【问题标题】:How to set $PATH in PHP?如何在 PHP 中设置 $PATH?
【发布时间】:2011-04-02 19:14:58
【问题描述】:

我目前正在做自己的小项目,但是有一个小问题:我想将$PATH环境变量设置为./bin,这样当我使用exec()和类似的功能时,它只会搜索对于该目录中的二进制文件(除非我另有明确说明)。

我已经尝试过putenv(),除非我启用了安全模式,否则我不希望这样做;我也尝试了apache_setenv(),但这似乎也不起作用。

还有其他我想尝试的解决方案吗?

(我使用的是带有 PHP 5.3.2 的 Linux 机器)

【问题讨论】:

  • 您的意思是“除非我禁用了安全模式”吗?
  • @greg0ire,不,除非我启用了安全模式,否则它实际上不会工作。在手册页上亲自查看:php.net/manual/en/function.putenv.php
  • "这些指令只有在安全模式本身启用时才有效!"来自php.net/manual/en/function.putenv.php。这很愚蠢。
  • @sreservoir,确切地说,更糟糕的是安全模式本身已被弃用....
  • 是的,我读过这个,我认为“指令”的意思是 safe_mode_protected_env_vars、safe_mode_allowed_env_vars。但是,如果您尝试过...

标签: php environment-variables


【解决方案1】:

这里描述了在 Mac OS X 上更改 apache 使用的 PATH 的方法: http://lists.apple.com/archives/macos-x-server/2008/Sep/msg00433.html

如那篇文章所述:

[A]将以下文本添加到[文件 /System/Library/LaunchDaemons/org.apache.httpd.plist] 在第五 行:

<key>EnvironmentVariables</key> 
<dict>
<key>PATH</key>
<string>/usr/bin:/bin:/usr/sbin:/sbin:/opt/local/bin</ string>
</dict>

查看launchd.plist(5) 的手册页,了解我使用的语法的详细信息 在这里使用。

如果您需要将 PHP 命令作为 CLI 会话运行,您还需要 可能需要在/etc/paths.d 下添加/opt/local/bin 作为新路径 工作。例如,这样的事情:

shell> sudo echo "/opt/local/bin" >> /etc/paths.d/macports

参见path_helper(8) 的手册页。

【讨论】:

    【解决方案2】:

    如果你只想在特定情况下设置它,你可以这样做:

    exec("PATH=/my/path ./bin");
    

    【讨论】:

    • 谢谢,我怎么没想到呢? :P
    • PATH 设置有点毫无意义,因为您还提供了实际的相对路径。
    • @sreservoir 不,不是。该路径不仅影响./bin 的分辨率(在这种情况下,它根本不影响它,因为它是一个相对路径)。如果./bin 是例如调用其他应用程序的脚本可能会影响它们的路径解析。
    【解决方案3】:

    如果您为您的用户设置了路径并且您的脚本以您的用户身份运行,您唯一应该做的就是为您的 shell 设置此路径,但您的脚本是否以 ie 身份运行。 apache 用户(类似 debian 的系统中的 www-data)要使其正常工作,您应该为该用户设置此 PATH 显式

    【讨论】:

    • 问题是我不希望它应用在服务器上的任何地方,只在 one PHP 脚本中......
    • 比,你不能在不禁用安全模式的情况下做到这一点(据我所知,但我可能错了),PATH 是面向 shell 的环境变量,而不是面向脚本的
    【解决方案4】:

    与其将路径设置为bin 并调用foo,不如直接显式调用bin/foo

    【讨论】:

      猜你喜欢
      • 2014-04-27
      • 1970-01-01
      • 1970-01-01
      • 2012-04-10
      • 2014-04-11
      • 1970-01-01
      • 1970-01-01
      • 2016-11-04
      • 1970-01-01
      相关资源
      最近更新 更多