加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 站长学院 > PHP教程 > 正文

php – 使cURL输出STDERR到文件(或字符串)

发布时间:2020-12-13 14:02:06 所属栏目:PHP教程 来源:网络整理
导读:我们正在尝试在服务器上调试一些cURL错误,我想看到STDERR日志.目前,我们可以看到我们的错误是“错误代码:7”,我们无法连接到目标服务器.我们已经联系了主机,并制定了特殊规则来开放我们需要的港口,我们甚至暂时忽略证书. 不过,我们无法连接.我需要调试这个,
我们正在尝试在服务器上调试一些cURL错误,我想看到STDERR日志.目前,我们可以看到我们的错误是“错误代码:7”,我们无法连接到目标服务器.我们已经联系了主机,并制定了特殊规则来开放我们需要的港口,我们甚至暂时忽略证书.

不过,我们无法连接.我需要调试这个,但是我看不到任何有关的信息.

提到“VERBOSE”和“STDERR”的线条是我最重要的.没有任何东西写入$curl_log.我究竟做错了什么?遵循手册逻辑,这应该是正确的…

使用PHP

<?php
$curl = curl_init();
$curl_log = fopen("curl.txt",'w');
$url = "http://www.google.com";

curl_setopt_array($curl,array(
    CURLOPT_URL             => $url,// Our destination URL
    CURLOPT_VERBOSE         => 1,// Logs verbose output to STDERR
    CURLOPT_STDERR          => $curl_log,// Output STDERR log to file
    CURLOPT_SSL_VERIFYPEER  => 0,// Do not verify certificate
    CURLOPT_FAILONERROR     => 0,// true to fail silently for http requests > 400
    CURLOPT_RETURNTRANSFER  => 1            // Return data received from server
));

$output = fread($curl_log,2048);
echo $output; // This returns nothing!
fclose($curl_log);

$response = curl_exec($curl);
//...restofscript...
?>

从PHP手册:http://php.net/manual/en/function.curl-setopt.php

CURLOPT_VERBOSE TRUE to output verbose information. Writes output to STDERR
CURLOPT_STDERR An alternative location to output errors to instead of STDERR.

这不是一个权限问题,我已经在服务器端设置了777的文件和脚本权限,我的本地客户端是Windows,并且从来没有关心权限设置(它只适用于开发人员).

你在你的例子中犯了几个错误:

1)您必须在从“详细日志”读取之前调用curl_exec(),因为curl_setopt()不执行任何操作,因此在curl_exec()之前不能记录任何内容.

2)你打开$curl_log = fopen(“curl.txt”,“w”);只有写,所以没有什么可以读,即使你写入文件并倒回内部文件指针.

所以正确的缩短代码应该如下所示:

<?php
$curl = curl_init();
$curl_log = fopen("curl.txt",'rw'); // open file for READ and write
$url = "http://www.google.com";

curl_setopt_array($curl,CURLOPT_VERBOSE         => 1,CURLOPT_STDERR          => $curl_log,CURLOPT_RETURNTRANSFER  => 1
));

$response = curl_exec($curl);

rewind($curl_log);
$output= fread($curl_log,2048);
echo "<pre>". print_r($output,1). "</pre>";
fclose($curl_log);

// ...

?>

注意:详细日志可能长于2048字节,因此您可以在curl_exec()之后“fclose”$curl_log,然后使用file_get_contents()读取整个文件.在这种情况下,点2)不应被视为错误:-)

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读