【问题标题】:Saving and image to server from a URL using cURL results in a blank image使用 cURL 从 URL 保存和图像到服务器会导致空白图像
【发布时间】:2023-06-10 00:36:01
【问题描述】:
$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...我不知道为什么文件没有正确保存。我的猜测是文件在保存之前没有完全加载,但是有没有办法确保呢?

【问题讨论】:

  • 尝试使用 CURLOPT_FILE 而不是写入二进制数据
  • 我不确定,但您在几分钟前就有了类似的问题?当您没有正确的身份验证时,您将无法获得图像。相反,您将返回的结果保存为身份验证。
  • @Stony 很相似,但我能够通过最初的问题......但这个问题已经困扰了我一段时间了。
  • 如果你打开保存的文件是jpeg吗?该文件中的标题是什么?或者内容是什么?
  • @Stony 应该是.jpg

标签: php curl fopen fwrite


【解决方案1】:

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

检查你的 curl 结果,看看返回了什么。

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

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

更新

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

现在更改您的:

curl_setopt($ch, CURLOPT_HEADER, 0);

收件人:

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: $responseHeader\n";
  echo "\n\nINFO: $info\n\nDATA: $data";
}  

您可能会收到“检索基本页面错误:”,但它也会告诉您失败的原因。如果无法回显,请将echo 替换为$info .=

【讨论】:

  • log.txt 包含 false,我不确定这意味着什么......没有其他工作。
  • 表示 curl 请求失败。我更新了我的帖子。
最近更新 更多