2012-11-06 36 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

对不起,误解! –

相关问题