2011-02-15 26 views
1

我想更改PHP脚本执行期间的默认系统$ PATH var,但它由于某种原因失败。PHP系统()如何导出PATH

我试着如下:

<?php 
$lastline = system('export PATH=$PATH:/customBin;',$return) OR die("why do i die all the time"); 
echo $lastline; 
?> 

但它显然死所有的时间。 (尝试在RHEL & Debian Linux发行版,PHP版本5.3.xx,其他系统命令工作正常(猫,ls等)这些工作都没有:export PATH=$PATH:/customBin;export PATH=$PATH:/customBin:export PATH=/customBin,所有这些工作在shell寿..)

任何帮助表示赞赏。谢谢。

编辑:上面的代码是错误的,解决方法是使用putenv('PATH=$PATH:/customBin');

回答

2

使用putenv从PHP更改环境变量可能会带来更好的运气。只需用getenv获取当前值,添加任何你喜欢的,最后调用putenv来改变值。

3

系统的return value返回参数)是指令(S)”输出,或者如果它失败布尔FALSE的最后一行。在你的情况下,它可能成功(你的$ return变量中有int 0成功退出)并且没有任何返回(可能是空字符串),在你的或语句中计算结果为false并且死亡执行。如果你想检查一个成功的出口,尝试

system('export PATH=$PATH:/customBin;', $return); 
$return === 0 OR die('...'); 

,或者如果你想使用系统的故障处理程序:

(system('export PATH=$PATH:/customBin;') !== FALSE) or die('...'); 

没有测试过这一点,结果可能会不同。

+0

感谢,但仍然不工作:(我改变了测试,测试比较简单: `系统( '出口PATH = $ PATH:/ customBin;',$回报); 回声系统( '回声$ PATH') ;` @wimvds ive试过`/ home/myuser/customBin` - 这个也没用 - ( 它返回标准:`/ usr/local/bin:/ usr/bin:/ bin/usr/local/bin:/ usr/bin:/ bin` – Sigtran 2011-02-15 10:10:36

+1

据我所知,导出变量只会改变当前会话,所以如果你调用`system`两次,第二次会话可能不会意识到它值) – 2011-02-15 10:12:11

+1

你试过`system('export PATH = $ PATH:/ customBin; echo $ PATH;',$ return);`? – 2011-02-15 10:12:40

1

你的方法与system正在创建一个新的shell环境,设置PATH,然后离开它。

此外,您的成功检查被打破。该调用返回一个空字符串,然后您的条件检查失败。

据我所知,您无法操作调用php的环境。