PHP脚本执行时如何操作?

时间:2013-03-13 09:49:32

标签: php shell

我想用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

3 个答案:

答案 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

获取当前目录