繁体   English   中英

使用.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警报说

“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是安全的,因此不容易被黑客攻击,您必须通过指定run as account来覆盖其安全性。 与您的应用池帐户不同 - 尽管您的IIS凭据可以使用您的应用池帐户。

试试这个家伙!

cd E:\xampp\htdocs\my-project
E:
php artisan schedule:run

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM