在我的本地计算机上,我可以通过google chrome在控制器的rails应用程序中运行以下命令:
system 'say hello dan'
这会产生预期的输出 - 我的mac上的'say'程序会说“你好”。
从PHP应用程序中的控制器运行相同的命令,或者通过谷歌浏览器运行任何PHP脚本,并且没有输出。
exec('say hello dan');
或exec('/usr/bin/say hello dan');
都不起作用。
我检查了权限,但是apache和我一样以同一个用户身份运行。
然而,从命令行运行包含该代码的脚本可以正常工作!
任何人都可以提供任何有关某些程序不起作用的见解吗?其他命令,如afplay
和/ usr / bin中的其他标准命令都可以正常工作。
答案 0 :(得分:2)
您的服务器可能配置为在安全模式下使用PHP。安全模式限制exec()如下:
“你只能在safe_mode_exec_dir中执行可执行文件。出于实际原因,目前不允许在可执行文件的路径中包含..组件。在此函数的参数上执行escapeshellcmd()。”