我想用cron-job执行一个PHP脚本,但它必须每秒或每2秒执行一次。 (PHP文件通过opengraph更新页面的封面照片)
所以我决定编写一个shell脚本,如下所示。但是,当shell脚本执行时,php如何操作,它是否像浏览器请求的那样正常工作或者会发生什么? 会议有效吗?
#!/bin/bash
while true; do
/path/to/file.php
sleep 1
done;
echo "Stopped" | mail -s "Cron script has stopped." mymail@domain.com
答案 0 :(得分:5)
不同之处在于您不会拥有$_GET
,$_POST
和其他特定于http的内容。会话也行不通(你为什么需要它们?)。你显然无法设置cookie,标题和其他类似的东西。
除此之外,你几乎可以忽略这样一个事实,即你是“在一个shell中”。
请点击此处了解详情:http://www.php.net/manual/en/features.commandline.differences.php
答案 1 :(得分:2)
将所有浏览器方面与PHP以及它的行为方式区分开来。你没有会话(除非你用cURL调用它并存储cookie somwehre)。
您没有$_GET
或$_POST
- 而是需要使用$args
- 但如果您没有传递任何变量,那么这与我们并不相关你。
您显然需要确保您已获得脚本执行权限,否则请使用/path/to/php /path/to/file.php
进行调用。
看看这些资源,他们应该帮助你。
http://www.php.net/manual/en/features.commandline.differences.php http://www.php.net/manual/en/features.commandline.php
答案 2 :(得分:2)
当您从命令行(CLI)执行php时,您输入另一个环境 有multiple differences
其中一些是
<强>配置强>
从命令行执行时,运行另一个php.ini
文件。 (通常是/etc/php5/php.ini
)
的权限强>
在网络上,您通常使用www-data
用户执行PHP
从命令行执行时,脚本将作为当前用户执行。
的参数强>
您无法再访问$_GET
,$_POST
,$_FILES
...超级全球了。
相反,您有{$ 3}}和$argv
<强>会话强>
您无权访问session
或$_COOKIES
相对路径
脚本使用的路径是相对于命令开始的路径
因此,在脚本中使用相对./
路径时要小心
例如:
$ pwd
/path/to/project/
$ cat app/script.php
<?php
echo getcwd(), PHP_EOL;
$ php app/script.php
/path/to/project
$ cd app
$ php script.php
/path/to/project/app
您可以使用$argc