0

我正在使用 exec 来获取 curl 输出(我需要使用 curl 作为 linux 命令)。

当我使用 php_cli 启动文件时,我看到一个 curl 输出:

  % Total    % Received % Xferd  Average Speed   Time    Time     Time  Current
                                 Dload  Upload   Total   Spent    Left  Speed
100 75480  100 75480    0     0  55411      0  0:00:01  0:00:01 --:--:-- 60432

这意味着所有文件都已正确下载(~ 75 KB)。

我有这个代码:

$page = exec('curl http://www.example.com/test.html');

我得到一个非常奇怪的输出,我只得到:</html>

(这是我的test.html文件的结尾)

我真的不明白原因,CURL 似乎下载了所有文件,但在 $page 我只得到 7 个字符(最新的 7 个字符)。

为什么?

PS我知道我可以使用其他php函数下载源代码,但我必须使用curl(作为linux命令)。

4

2 回答 2

4

RTM 为exec()

它返回

命令结果的最后一行。

您必须将第二个参数设置为exec()包含执行命令的所有输出。

例子:

<?php
$allOutputLines = array();
$returnCode = 0;
$lastOutputLine = exec(
    'curl http://www.example.com/test.html',
    $allOutputLines,
    $returnCode
);

echo 'The command was executed and with return code: ' . $returnCode . "\n";
echo 'The last line outputted by the command was: ' . $lastOutputLine . "\n";
echo 'The full command output was: ' . "\n";
echo implode("\n", $allOutputLines) . "\n";

?>
于 2012-07-22T11:12:01.270 回答
4

除非这是一个非常奇怪的要求,否则为什么不使用 PHP cURL 库呢?您可以更好地控制发生的事情以及调用参数(超时等)。

如果你真的必须使用 PHP 中的 curl 命令行二进制文件:

1) Use shell_exec() (this solves your problem)
2) Use 2>&1 at end of command (you might need stderr output as well as stdout)
3) Use the full path to curl utility: do not rely on PATH setting.
于 2012-07-22T11:18:20.187 回答