运行一个.bat文件的PHP脚本

我需要每天晚上在服务器上运行一个php脚本。 在Linux系统上,我设置了一个cron作业,但是我被一个windows系统困住了。

我知道我必须使用Windows任务计划程序设置任务,并且该任务需要运行一个.bat文件,该文件又将运行php文件,但是我试图写入.bat文件。

我目前拥有的是:

@echo off REM this command runs the nightly cron job start "C:\Program Files (x86)\PHP\v5.3\php.exe" -f C:\inetpub\wwwroot\sitename\crons\reminder-email.php 

但是,当我尝试手动运行.bat文件来testing它,我得到一个Windows警报说

“Windows找不到'-f',确保你input的名字正确,然后重试。

我错过了什么?

START命令可以选择接受创建窗口的标题作为其第一个参数; 在这种情况下,它认为C:\Program Files (x86)\PHP\v5.3\php.exe是要显示的标题, -f (第二个参数)是要运行的可执行文件。

因此,您可以通过提供一个占位符标题来解决这个问题

 start "email reminder task" "C:\Program Files (x86)\PHP\v5.3\php.exe" -f C:\inetpub\wwwroot\sitename\crons\reminder-email.php 

或者,最好是完全抛弃START命令(您不使用任何独特的功能),直接运行PHP:

 "C:\Program Files (x86)\PHP\v5.3\php.exe" -f C:\inetpub\wwwroot\sitename\crons\reminder-email.php 

其实,你甚至不需要批处理文件。 您可以从任务计划程序运行php脚本。

只要让任务调度程序运行php.exe,并将php文件的位置设置为任务的参数即可。

我可以提出一个小的改变。

 echo off REM This adds the folder containing php.exe to the path PATH=%PATH%;C:\Program Files (x86)\PHP\v5.3 REM Change Directory to the folder containing your script CD C:\inetpub\wwwroot\sitename\crons REM Execute php reminder-email.php 

PS。 在Program Files放入Apache,MySQL或PHP是一个坏主意。 不要使用Windows文件夹名称中的空格。

可悲的是,这花了近10个小时才弄清楚。 某些协议(如WinRM和PSEXEC)必须通过已登录的用户帐户,而不管提供的凭据如何(或者PHP会覆盖您输入的任何内容)。 无论如何,要获得PSEXEC,WinRM或者只是启动连接到远程计算机的批处理文件,您将需要将具有IIS权限的用户(服务帐户)更改为运行帐户。 我意识到这是一个巨大的安全漏洞,但这是由设计。 PHP是安全的,因此它不容易被黑客入侵,你必须通过指定一个运行帐户来覆盖他们的安全。 与您的应用程序池帐户不一样 – 尽管您的IIS凭据可以使用您的应用程序池帐户。

尝试像这样的家伙!

 cd E:\ xampp \ htdocs \ my-project
 E:
 PHP的工匠时间表:运行