使用.bat文件运行php脚本


Running a php script with a .bat file

我需要每晚午夜在服务器上运行一个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文件来测试它时,我会收到一个窗口警报,上面写着

"Windows找不到'-f'。请确保键入的名称正确,然后重试。

我错过了什么?

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。将Apache、MySQL或PHP放在Program Files中是个坏主意。不要使用名称中有空格的windows文件夹。

这个怎么样?

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

遗憾的是,这花了将近10个小时才弄清楚。某些协议(如WinRM和PSEXEC)必须传递登录的用户帐户,而不考虑提供的凭据(该凭据或PHP会覆盖您键入的任何凭据)。无论如何,要获得PSEXEC、WinRM或启动连接到远程计算机的批处理文件,您需要将IIS运行方式帐户更改为对这些资源具有权限的用户(服务帐户)。我意识到这是一个巨大的安全漏洞,但那是故意的。PHP是安全的,所以它不会轻易被黑客入侵,你必须通过指定一个运行方式帐户来覆盖它们的安全性。与你的应用程序池帐户不同,尽管你的IIS凭据可以使用你的应用池帐户。

试试这些家伙!

cd E:''examplep''htdocs''my项目E:php-artisan时间表:运行