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

我们正在尝试在服务器上调试一些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)不应被视为错误:-)

相关文章

统一支付是JSAPI/NATIVE/APP各种支付场景下生成支付订单,返...
统一支付是JSAPI/NATIVE/APP各种支付场景下生成支付订单,返...
前言 之前做了微信登录,所以总结一下微信授权登录并获取用户...
FastAdmin是我第一个接触的后台管理系统框架。FastAdmin是一...
之前公司需要一个内部的通讯软件,就叫我做一个。通讯软件嘛...
统一支付是JSAPI/NATIVE/APP各种支付场景下生成支付订单,返...