在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