我正在尝试让PHP在OS X上进行系统调用。但是,它似乎无法找到系统路径中包含的任何内容。
当我跑...
putenv("PATH={$_SERVER["PATH"]}:/usr/local/bin");
...就在系统调用之前,它可以运行。这不是一个实用的解决方案,因为执行系统调用的代码是一个插件,所以我宁愿不要触摸那些使它不兼容的源代码来更新。
Apache2作为我登录的用户运行,因此理论上它可以访问与我相同的命令。
此外,相同的代码在我的Ubuntu机器上运行良好。
答案 0 :(得分:0)
Mac OS X上的环境变量由不同的机制设置,具体取决于您的代码或其父进程的启动方式。为了确保从交互式shell启动的项目和WindowServer启动的项目具有相同的路径,您需要将〜/ .MacOSX / environment.plist与.profile(或.cshrc)中设置的内容保持同步。
无需借助编辑环境即可实现目标的最简单方法是为系统命令执行的操作指定临时路径。 e.g:
char cmdStr[512] = "PATH=$PATH:/usr/local/bin"; strncat(cmdStr,"MyCommand", 9); system(cmdStr);
这样,环境仅受MyCommand上下文的影响,之后才会恢复。