我在最近更新到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文档。
你能简单地启动Apache之前修复了'PATH'环境变量在'/等/ rc'?您可以使用符号链接将分散在您的服务器上的程序填充到_fixed_目录中:/ usr/local/php_bin /'? – sarnold 2011-04-29 08:16:14
请注意,[safe_mode已弃用](http://us2.php.net/manual/en/features.safe-mode.php),您可以通过关闭它(然后双击“检查所有对'exec'的调用......硬编码路径名称毕竟不是一个坏主意!) – Charles 2011-04-29 08:21:47