使用卷曲从URL保存和图像到服务器中,结果空白图像


$camera_ip = "10.10.10.10";
$image_url = "http://$camera_ip/cgi-bin/image.jpg?camera=right&size=1024x768&quality=60";
$ch = curl_init($image_url);
curl_setopt($ch, CURLOPT_HEADER, 0);
curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);
curl_setopt($ch, CURLOPT_BINARYTRANSFER, 1);
curl_setopt($ch, CURLOPT_FOLLOWLOCATION, 1);
$rawdata = curl_exec($ch);
curl_close($ch);
$fp = fopen('./logo.jpg', 'wb');
fwrite($fp, $rawdata);
fclose($fp);

一个文件保存在7KB上,但大小为0x0 ...我无法弄清楚为什么未正确保存文件。我的猜测是在保存之前没有完全加载该文件,但是是否有一种方法来确保?

尝试使用" W"而不是" WB" $fp = fopen('./logo.jpg', 'w');或尝试:file_put_contents('./logo.jpg',$rawdata);(不确定它是二进制安全的,应该是)

检查您的卷曲结果以查看发生了什么。

$info = var_export(curl_getinfo($ch),true);
file_put_contents('log.txt',$info);

header('content-type: text/plain');
var_export(curl_getinfo($ch));

更新

卷曲请求失败(返回false)。
现在您需要找出原因。

现在更改您的:

curl_setopt($ch, CURLOPT_HEADER, 0);

to:

curl_setopt($ch, CURLINFO_HEADER_OUT, true);

添加这些选项以进行故障拍摄:

curl_setopt($ch, CURLOPT_ENCODING,"");   
curl_setopt($ch, CURLOPT_CONNECTTIMEOUT, 10);
curl_setopt($ch, CURLOPT_TIMEOUT,10);
curl_setopt($ch, CURLOPT_FAILONERROR,true);
curl_setopt($ch, CURLOPT_VERBOSE, true);
$data = curl_exec($ch);
if (curl_errno($ch)){
    echo ' Retrieve Base Page Error: ' . curl_error($ch);
}
else {
  $info = rawurldecode(var_export(curl_getinfo($ch),true));
  $skip = intval(curl_getinfo($ch, CURLINFO_HEADER_SIZE)); 
  $responseHeader= substr($data,0,$skip);
  $data= substr($data,$skip);
  echo "HEADER: $responseHeadern";
  echo "nnINFO: $infonnDATA: $data";
}  

您可能会得到"检索基本页面错误:",但它也会说明为什么失败了。如果您无法回声,请用echo替换$info .=

最新更新