1

我正在尝试在 php 中使用 curl。

我阅读了有关使用 CURLOPT_VERBOSE 来帮助调试的信息。但它没有输出。我检查了我的 phpinfo() 并在 cURL 下表示:

debug => no

我想这就是这里的问题。如何将其设置为是?我查看了 php.ini 并且可以找到它。

谷歌也没有运气。这里也没有运气:如何启用 php-curl 的功能

我希望有一个人可以帮助我!

4

1 回答 1

0

设置的工作不需要具有 cURL 的调试版本CURLOPT_VERBOSE,但默认情况下,CURLOPT_VERBOSE信息会输出到STDERR仅在控制台上可见的输出。因此,如果您从浏览器运行 PHP,详细输出不会发送到您可以看到的任何地方。

您可以将选项设置CURLOPT_STDERR为文件句柄,详细输出应该写在那里。

你应该能够做到这一点:

$stdout = fopen('php://output', 'w+');

$ch = curl_init(); 
curl_setopt($ch, CURLOPT_URL, 'http://www.example.com');
curl_setopt($ch, CURLOPT_VERBOSE, 1);
curl_setopt($ch, CURLOPT_STDERR, $stdout);
curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);

$data = curl_exec($ch);

我不确定我目前是否遇到了 PHP 错误(通过 FastCGI 运行 PHP 5.4.5),因为我在浏览器中看不到详细的输出,但如果我从命令行运行它,我会这样做。如果我确实fwrite浏览器中看到了该输出,但 cURL 仍然没有任何内容,所以我知道句柄是有效的。$stdout

如果您遇到同样的问题,这里有一个解决方法:

$tempout = fopen('php://temp', 'w+');

$ch = curl_init(); 
curl_setopt($ch, CURLOPT_URL, 'http://www.example.com');
curl_setopt($ch, CURLOPT_VERBOSE, 1);
curl_setopt($ch, CURLOPT_STDERR, $tempout);
curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);

$data = curl_exec($ch);

rewind($tempout);
$debug = stream_get_contents($tempout);

echo $debug; // the data from CURLOPT_VERBOSE

希望有帮助。

于 2012-08-17T21:44:12.537 回答