所以我想在我的网络服务器上从PHP执行一个bash命令。我可以使用shell_exec
执行此操作。但是,我要执行的命令之一是curl
。我用它将.wav
文件发送到另一台服务器并记录其响应。但是当从PHP调用时,curl
不起作用。
我将错误减少到以下小例子。我有一个名为php_script.php
的脚本,其中包含:
<?php
$ver=shell_exec("curl -F file=@uploads/2013-7-24-17-31-43-29097-flash.wav http://otherserver");
echo $ver
奇怪的是,当我使用php php_script.php
从命令行运行这个php脚本时,我得到的结果是
Status: 500 Internal Server Error
Content-type: text/html
但是,如果我直接运行curl -F file=@uploads/2013-7-24-17-31-43-29097-flash.wav http://otherserver
,我会得到我期待的响应:
verdict = authentic
(编辑:)我应该提一下,如果我在shell_exec
参数中放入一些不包含curl
的bash代码,bash命令执行正常。例如,将行更改为$ver = shell_exec("echo hello > world");
会将单词“hello”放入文件“world”中(前提是它存在且可写)。 (结束编辑。)
当从PHP调用curl时,有些东西阻止了curl的执行。我认为这可能是PHP在安全模式下运行,但我在php.ini中没有发现这一点。 (有没有办法对此进行测试以确保100%?)什么阻塞卷曲,更重要的是,我如何绕过或禁用此块?
(是的,我知道PHP有一个curl库。但是,为了调试目的,我更喜欢使用可以从命令行运行的命令。)
欢呼声, 艾伦
答案 0 :(得分:0)
原因是直接运行命令时的管理权限,您以root身份运行它,从而执行命令。但是,当您通过PHP运行命令时,它以用户身份运行。通过,默认用户没有运行shell_exec命令的权限。
您必须通过CPanel / Apache配置文件更改shell_exec的设置。但是,不建议为用户提供shell_exec访问权限,因为它可以帮助黑客攻击服务器,因此应该采取适当的谨慎措施。
使用PHP中提供的curl库更合适。