shell_exec的输出被截断为100个字符


Output of shell_exec gets truncated to 100 characters

在shell中运行以下命令时,

curl -F file=@filename http://192.168.0.1

产生以下输出:

Accuracy = 0% (0/1) (classification)
Accuracy = 0% (0/1) (classification)
Accuracy = 0% (0/1) (classification)
Accuracy = 0% (0/1) (classification)
verdict = success!

当我在php中运行它时,通过使用shell_exec(), exec()或反打号操作符,

$verdict = `curl -F file=@$filename $url`;

得到以下输出:

Accuracy = 0% (0/1) (classification)
Accuracy = 0% (0/1) (classification)
Accuracy = 0% (0/1) (class

输出被截断为正好100个字符。我怎么也弄不明白这是为什么。为什么会这样,我如何在php变量中获得完整的输出?

您可以避免通过终端执行cURL操作,因为

    很可能不是每个服务器都支持通过代码执行命令。
  • 很有可能在生产中启用了安全模式。
  • 不是每个在终端上执行上述命令的用户都有执行权限。
  • 不是每个执行上述命令的用户都没有指定命令的完整路径(如/usr/bin/curl)

考虑使用PHP的内置cURL选项来通过

实现这一点
CURLOPT_POSTFIELDS

我也经历过非常类似的问题。我想数一下一个给定的进程和ps aux返回的行总是在位置80截断。我不确定我的建议是否能解决讨论的问题,因为你确认得到100个字符。我将COLUMNS=9999添加到命令中以扩展输出。在您的示例中,它看起来像:

COLUMNS=9999 curl -F file=@filename http://192.168.0.1