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

PHP - Environment Variables Not Available When Script Called From Cron Job / Command Line

我的 test.php 文件如下所示:

<?php

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

以上将return我的环境变量设置两次。它在从服务器外部调用脚本时起作用。

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

php test.php

或使用 cronjob[=6=​​]

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

return什么都没有。

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

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

以这种方式执行 cron 作业:

myEnvVariable=value php test.php

变量将从 getenv("myEnvVariable") 开始提供,而不是 $_SERVER

我建议您对文件进行特殊的 curl 调用。像这样:

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 作为调用服务器的有效用户来调用。它对我有用。

如果你有很多环境变量试试这个,

将环境条目导出到文件

env >> /etc/environment

添加 CRON 作业 crontab -e

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

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