我在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更新中这会发生变化。似乎没有关于如何确定exec()
和朋友的搜索路径的PHP文档。
答案 0 :(得分:0)
这不是一个令人愉快的解决方案,但这是我所能想到的。创建一个脚本文件,执行您建议的更改,然后使用php.ini或.htaccess中的“auto_prepend_file”来包含此脚本。然后实际上运行的每个php脚本都会在执行之前运行该文件,从而更改目录。
警告:您需要非常小心地使用它,因为前置脚本中的任何错误,额外空格等都可能会破坏整个页面,现有功能(如下载脚本)或任意数量的未知效果