【问题标题】:PHP - Environment Variables Not Available When Script Called From Cron Job / Command LinePHP - 从 Cron 作业/命令行调用脚本时环境变量不可用
【发布时间】:2015-03-05 14:10:15
【问题描述】:

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

<?php

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

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

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

php test.php

或使用 cronjob

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

没有返回任何内容。

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

【问题讨论】:

  • 是否像从命令行运行时一样为您登录的帐户设置了 env var?因为命令行不关心你的 apache 配置中可能设置的内容
  • 如果您尝试使用 http,并使用真实的 url 而不是 localhost,您会获得 env 变量吗?
  • 当您从命令行使用php 命令调用它时,您绕过了 Apache,这就是您没有获取 env 变量的原因。不知道如何解决它。 @MarkBaker,您应该写一个答案,概述如何为“您登录的帐户”设置 var。
  • 取决于操作系统,但通常在 Linux 上,您可以在调用 php test.php 之前的某个时间点执行 export myEnvVariable=myValue

标签: php apache cron environment-variables


【解决方案1】:

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

【讨论】:

    【解决方案2】:

    以这种方式执行 cron 作业:

    myEnvVariable=value php test.php
    

    变量将在getenv("myEnvVariable") 中可用,而不是在$_SERVER 中。

    【讨论】:

      【解决方案3】:

      我建议您对您的文件进行特殊的 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 作为调用服务器的有效用户。它对我有用。

      【讨论】:

      • 好主意。但是,它确实要求您公开提供该脚本。顺便说一句,file_get_contents('http://www.youraddresshere.com/pathtofile/test.php') 在大多数情况下应该做同样的工作。
      【解决方案4】:

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

      将环境条目导出到文件

      env >> /etc/environment
      

      使用 crontab -e

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

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

      【讨论】:

        猜你喜欢
        • 2013-08-08
        • 2012-05-17
        • 1970-01-01
        • 1970-01-01
        • 2017-06-26
        • 1970-01-01
        • 2017-10-26
        • 2014-04-18
        • 1970-01-01
        相关资源
        最近更新 更多