2011-04-29 76 views
1

我在最近更新到PHP 5.2.17的FreeBSD服务器上运行了一些PHP网站,之后exec("something")停止工作,并且我被要求编写exec("/full/path/something")php exec()搜索路径系统范围设置

由于脚本在可执行文件位于不同位置的不同计算机上运行,​​因此写入完整路径是不可接受的。

运行从PHP passthru("set")揭示了PATH变量(用户 “WWW”)是:

PATH=/sbin:/bin:/usr/sbin:/usr/bin 

我需要PATH指向PHP safe_mode_exec_dir之目录:

PATH=/usr/phpsafe_bin 

在运行putenv("PATH=/usr/phpsafe_bin") PHP解决了这个问题,但是我需要一个解决方案来修复这台机器上运行的所有PHP脚本在全局级别上的问题,换句话说就是更改php.ini,Apache设置或其他系统设置。

希望有人可以提供一个很好的解决方案,甚至可以解释为什么这改变了PHP更新。似乎没有关于如何确定exec()和朋友的搜索路径的PHP文档。

+0

你能简单地启动Apache之前修复了'PATH'环境变量在'/等/ rc'?您可以使用符号链接将分散在您的服务器上的程序填充到_fixed_目录中:/ usr/local/php_bin /'? – sarnold 2011-04-29 08:16:14

+0

请注意,[safe_mode已弃用](http://us2.php.net/manual/en/features.safe-mode.php),您可以通过关闭它(然后双击“检查所有对'exec'的调用......硬编码路径名称毕竟不是一个坏主意!) – Charles 2011-04-29 08:21:47

回答

0

这不是一个愉快的解决方案,但这是我所能想到的。创建一个脚本文件,执行您建议的更改,然后使用php.ini或.htaccess中的“auto_prepend_file”来包含此脚本。然后实际上运行的每个php脚本都会在执行之前运行该文件,从而更改您的目录。

注意:你必须非常小心使用这一点,因为任何错误,在前置脚本的额外空白等可以打破整个页面,现有的功能,如下载脚本,或任意数量的未知的影响。

阅读更多:http://php.net/manual/en/ini.core.php