2015-01-07 38 views
2

文件test.php看起来像:PHP - 环境变量Not Available在脚本调用从cron作业/命令行

<?php 

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

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

如果我打电话使用命令行命令的服务器上相同的脚本:

php test.php 

,或者使用一个cronjob返回

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

什么。

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

+3

是否为您登录的帐户设置了env var,与从命令行运行时相同?因为命令行并不关心你的apache配置中可能设置了什么 –

+0

如果你正在尝试使用http,并使用真正的url而不是localhost,你会得到env变量吗? – Maerlyn

+0

当你用'php'命令从命令行调用它时,你会绕过Apache,这就是为什么你不能获得env变量。不知道如何解决这个问题。 @MarkBaker你应该写一个答案,概述如何为你登录的帐户设置var“。 – mopo922

回答

1

执行cron作业是这样的:

myEnvVariable=value php test.php 

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

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作为一个VAL ID用户调用您的服务器。这个对我有用。