PHP exec()搜索路径的系统范围设置


system-wide setting for php exec() search path

我在FreeBSD服务器上运行一些PHP网站,该服务器最近更新到PHP 5.2.17,之后exec("something")停止工作,我被要求编写exec("/full/path/something")

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

从PHP运行passthru("set")显示PATH变量(用户"www")为:

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

我需要PATH指向PHP safe_mode_exec_dir目录:

PATH=/usr/phpsafe_bin

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

希望有人能提供一个很好的解决方案,也许甚至解释为什么这改变了PHP更新。似乎没有PHP文档说明如何确定exec()和friends的搜索路径。

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

警告:你需要非常小心地使用这个,因为任何错误,额外的空白等前置脚本可以破坏整个页面,现有的功能,如下载脚本,或任何数量的未知效果。

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