PHP - 从Cron作业/命令行调用脚本时不可用的环境变量

时间:2015-01-07 16:07:53

标签: php apache cron environment-variables

我的test.php文件如下:

<?php

echo $_SERVER["myEnvVariable"];
echo getenv("myEnvVariable");

以上将返回我的设置环境变量两次。从服务器外部调用脚本时,它可以正常工作。

如果我使用命令行命令在服务器上调用相同的脚本:

php test.php

或使用cronjob

****** curl http://localhost/test.php

什么都没有。

如何在服务器本身内提供环境变量?我在Apache httpd.conf文件中设置我的环境变量。

4 个答案:

答案 0 :(得分:2)

以这种方式执行cron作业:

myEnvVariable=value php test.php

变量将来自getenv("myEnvVariable"),而不是$_SERVER

答案 1 :(得分:1)

尝试在cron中将wget设置为http://address.domain/test.php。 我知道这不是解决办法,但可能有所帮助。

答案 2 :(得分:0)

我建议你对你的文件进行特殊的卷曲调用。像这样:

test.php (这是您的文件,此处无更改)

<强> specialcurl.php

<?php
    $curl = curl_init('http://www.youraddresshere.com/pathtofile/test.php');
    curl_setopt($curl, CURLOPT_FAILONERROR, true);
    curl_setopt($curl, CURLOPT_FOLLOWLOCATION, true);
    curl_setopt($curl, CURLOPT_RETURNTRANSFER, true);
    curl_setopt($curl, CURLOPT_SSL_VERIFYHOST, false);
    curl_setopt($curl, CURLOPT_SSL_VERIFYPEER, false);
    $result = curl_exec($curl);
    echo $result;
    curl_close($curl);
?>

现在,使用php命令从服务器运行specialcurl.php脚本:

php specialcurl.php

这里的要点是将test.php称为呼叫服务器的有效用户。它对我有用。

答案 3 :(得分:0)

如果您有很多环境变量,请尝试此操作

将环境条目导出到文件中

env >> /etc/environment

添加CRON作业 crontab -e

5,35 * * * * . /etc/environment; /usr/local/bin/php /srv/app/artisan schedule:run >> /dev/null 2>&1

CRON :在每小时的05、35运行php调度程序,其中包含所有环境变量的来源。 (用您的命令替换)