2012-11-06 29 views
2

我嘗試使用以下代碼在使用exec()之前臨時更改PATH是否可以臨時更改PHP中的PATH?

$s1 = getenv ('PATH'); 
putenv('PATH=c:\bins'); 
$s2 = getenv ('PATH'); 
putenv('PATH='.$s1); 
$s3 = getenv ('PATH'); 
var_dump($s1); 
var_dump($s2); 
var_dump($s3); 

第一次腳本運行一切都按預期工作。下面是輸出:

string 'C:\Program Files (x86)\'... (length=1400) 
string 'c:\bins' (length=7) 
string 'C:\Program Files (x86)\'... (length=1400) 

然而,似乎PHP破壞PATH這個腳本運行後,由於運行它第二次產生下面的輸出。

boolean false 
string 'c:\bins' (length=7) 
string '' (length=0) 

我在Windows上使用lighttpd和PHP 5.3通過fastcgi獲得了這種行爲。我還沒有用Linux/Apache進行測試。

以下方法在Windows(即使你使用&)不工作: How to set $PATH in PHP?

有誰知道一個與操作系統無關的方式來改變PATH

+0

你爲什麼要這麼做? '運行putenv( 'PATH = /網絡/上傳/路徑/到/惡/')'?; –

+0

我有一個使用exec()的函數。我想讓它在單元測試中失敗。 –

+0

您希望路徑變量在腳本終止後保留嗎? –

回答

0

我相信你正在尋找通過set_include_path http://www.php.net/set_include_path

<?php 
//Set a new path 
set_include_path('/usr/lib/pear'); 

// Works in all PHP versions 
ini_set('include_path', '/usr/lib/pear'); 

//Add a new path to the already existing path throug get_include_path() 
set_include_path(get_include_path() . PATH_SEPARATOR . $path); 
?> 
+0

不,我希望操作系統使用PATH來查找可執行文件。這是由php用於查找php文件。 http://www.php.net/manual/en/ini.core.php#ini.include-path –

+0

對不起,誤解! –

相關問題