4

所以我想在我的网络服务器上从 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 php_script.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

(编辑:)我可能应该提到,如果我将一些 bash 代码放在shell_exec不包含的参数中curl,则 bash 命令执行得很好。例如,将行更改为$ver = shell_exec("echo hello > world");将单词“hello”放入文件“world”(前提是它存在并且可写)。(结束编辑。)

当从 PHP 调用 curl 时,有些东西阻止了 curl 的执行。我认为这可能是 PHP 在安全模式下运行,但我在 php.ini 中没有发现这一点。(有没有办法对此进行测试以确保 100% 确定?)是什么阻止了 curl,更重要的是,我如何绕过或禁用此阻止?

(是的,我意识到 PHP 有一个 curl 库。但是,出于调试目的,我更喜欢使用可以从命令行运行的命令。)

干杯,艾伦

4

1 回答 1

0

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

您必须通过 CPanel/Apache 配置文件更改 shell_exec 的设置。但是,不建议向用户提供 shell_exec 访问权限,因为它有助于黑客攻击服务器,因此应小心谨慎。

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

于 2013-07-24T17:01:57.850 回答