2015-01-07 40 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用戶調用您的服務器。這個對我有用。