【问题标题】:PHP system() howto export PATHPHP system() 如何导出 PATH
【发布时间】:2011-02-15 09:55:03
【问题描述】:

我想更改php脚本执行期间的默认系统$PATH var,但由于某种原因失败了。

我正在尝试以下方法:

<?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 上尝试过,其他系统命令都可以正常工作(cat、ls 等)这些都不起作用:export PATH=$PATH:/customBin; OR export PATH=$PATH:/customBin: OR export PATH=/customBin,所有这些都可以在外壳……)

感谢任何帮助。谢谢。

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

【问题讨论】:

    标签: php export system


    【解决方案1】:

    系统的return value不是返回参数)是命令输出的最后一行,如果失败,则为布尔值FALSE。在您的情况下,它可能成功(您的 $return 变量中有 int 0 以成功退出)并且没有返回任何内容(可能是一个空字符串),它在您的 or 语句中评估为 false 并且骰子被执行。如果您想检查是否成功导出,请尝试

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

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

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

    尚未对此进行测试,您的结果可能会有所不同。

    【讨论】:

    • 谢谢,但仍然不起作用:(我将测试更改为更简单的测试:system('export PATH=$PATH:/customBin;', $return); echo system('echo $PATH');@wimvds 我试过/home/myuser/customBin - 这也不起作用 -( 它返回标准:/usr/local/bin:/usr/bin:/bin /usr/local/bin:/usr/bin:/bin
    • 据我所知,导出变量只会更改当前会话。因此,如果您调用system 两次,第二个会话可能不再知道它(具有原始值)。
    • 你试过system('export PATH=$PATH:/customBin;echo $PATH;', $return);吗?
    • @Denis 'Alpheus' Čahuk 谢谢!这有效:system('export PATH=$PATH:/customBin; echo $PATH;', $return);
    【解决方案2】:

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

    【讨论】:

    • +1。这是最好的解决方案。玩system 是一种技巧。
    【解决方案3】:

    您使用 system 的方法是创建一个新的 shell 环境,在其中设置 PATH,然后离开它。

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

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

    【讨论】:

    • 是的,我现在明白了。尝试进行检查时没有考虑返回值是空的。上面的答案是有效的。谢谢
    猜你喜欢
    • 2011-07-05
    • 2022-01-03
    • 1970-01-01
    • 1970-01-01
    • 2016-05-23
    • 2015-09-07
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多