curl调用时curl没有正确执行

时间:2013-07-24 16:42:06

标签: php curl shell-exec

所以我想在我的网络服务器上从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库。但是,为了调试目的,我更喜欢使用可以从命令行运行的命令。)

欢呼声, 艾伦

1 个答案:

答案 0 :(得分:0)

原因是直接运行命令时的管理权限,您以root身份运行它,从而执行命令。但是,当您通过PHP运行命令时,它以用户身份运行。通过,默认用户没有运行shell_exec命令的权限。

您必须通过CPanel / Apache配置文件更改shell_exec的设置。但是,不建议为用户提供shell_exec访问权限,因为它可以帮助黑客攻击服务器,因此应该采取适当的谨慎措施。

使用PHP中提供的curl库更合适。