2010-08-23 23 views
8

我目前正在开发自己的小项目,但我遇到了一些小问题:我想将$ PATH环境变量设置为./bin,这样当我使用exec()和类似的函数时,它只会搜索那个二进制文件目录(除非我明确告诉它)。

我已经试过putenv(),除非我启用了安全模式,否则我不会工作,我不想这样做;我也试过apache_setenv(),但那似乎也不奏效。

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

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

+0

您的意思是“除非我禁用了安全模式”? – greg0ire 2010-08-23 18:25:55

+0

@ greg0ire,不,它实际上不会工作,除非我已启用安全模式。在手册页上查看:http://php.net/manual/en/function.putenv.php – Frxstrem 2010-08-23 18:29:17

+0

“这些指令只有在启用安全模式时才有效!”从http://php.net/manual/en/function.putenv.php。这很愚蠢。 – muhmuhten 2010-08-23 18:30:06

回答

5

,你可以这样做:

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

谢谢,为什么我没有想到这一点? :P – Frxstrem 2010-08-23 18:36:11

+0

PATH设置是有点毫无意义的,因为你也给出了一个实际的相对路径。 – muhmuhten 2010-08-23 18:53:08

+0

@sreservoir不,它不是。路径不会影响'。/ bin'的分辨率(在这种情况下,它根本不会影响它,因为它是一个相对路径)。如果'。/ bin'是例如一个调用其他应用程序的脚本会影响它们的路径分辨率。 – Artefacto 2010-08-23 19:02:40

2

而不是路径设置为bin并调用foo,你为什么不只是明确援引bin/foo

0

如果您为您的用户设置了路径,并且您的脚本以您的用户身份运行,则唯一需要做的是为您的shell设置此路径,但是您的脚本以ie运行。 apache用户(www数据中的debian-like系统),这个工作,如果你想设置仅在特定情况下,你应该设置此路径为用户explicte

+0

问题是,我不希望它适用于服务器上的任何地方,只能在**一个** PHP脚本中... – Frxstrem 2010-08-23 18:27:09

+0

比,你不能这样做,而不禁用安全模式(正如我的知识说的,但我可能是错的),PATH是一个面向shell的环境变量,而不是脚本导向 – canni 2010-08-23 18:29:14

4

以改变在Mac OS X Apache使用该路径的方式在此描述: http://lists.apple.com/archives/macos-x-server/2008/Sep/msg00433.html

如该交指出:

[A] DD以下文本[在F ILE /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)的手册页语法的详细信息,我 。

如果你需要为CLI会话中运行你的PHP命令,你也可能 需要添加/opt/local/bin作为一种新的路径下/etc/paths.d 工作。例如,如下所示:

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

请参见path_helper(8)的手册页。