我在PHP中有一个函数,它调用curl来检索图像.当我将其打印到文件并在浏览器中进行检查时,图像看起来很棒.当我将卷曲结果的“ echo”用作我的PHP脚本的返回值时,浏览器将显示残影图标(请参阅该图标的示例:http://www.artifacting.com/blog/wp-content/uploads/2007/01/error_icon.gif).
$ch = curl_init();
$options = array(
CURLOPT_CONNECTTIMEOUT => 120,
CURLOPT_TIMEOUT => 120,
CURLOPT_HTTP_VERSION => CURL_HTTP_VERSION_1_1,
CURLOPT_FRESH_CONNECT => 1,
CURLOPT_HEADER => 0,
CURLOPT_USERAGENT => "Mozilla/4.0 (compatible; MSIE 5.01; Windows NT 5.0)",
CURLOPT_FOLLOWLOCATION => true,
CURLOPT_HTTPPROXYTUNNEL => 1,
CURLOPT_POST => 1,
CURLOPT_RETURNTRANSFER => 1,
CURLOPT_BINARYTRANSFER => 1,
);
curl_setopt($ch, CURLOPT_URL, $url);
curl_setopt_array($ch, $options);
curl_setopt($ch, CURLOPT_POSTFIELDS, $param_list);
// The http response code is 200, and the body length is 50kb.
$body = curl_exec($curl_params);
// This produces a file containing an image that looks good when viewed in a browser.
$bodyFile = @fopen("img.jpg", "w");
fprintf($bodyFile, "%s", $body. "\n");
fclose($bodyFile);
// This does not render in the browser. Instead I see the broken image icon.
$contentType = "image/jpeg";
header('Content-type: ' . $contentType);
echo $body;
有任何想法吗?救命!
解决方法:
答案取决于您所说的“破”.如果图像的上半部分出现了,但下半部分没有出现,则说明缓存中的数据包有错误的版本(空缓存,刷新,重试)或脚本被过早地切断了使用资源过多或运行时间过长.如果清空缓存不能解决问题,请检查php.ini设置,看看是否增加脚本的生存时间或最大内存可以解决该问题.
如果图像是一堆毫无意义的ASCII码,则在代码中的这一点之前,您已回显了某些内容或发送了标头.最常见的看不见的原因是在页面顶部的<?php之前有一个空行.如果是这种情况,请确保在<?php之前没有单个字节(甚至不可打印!). 如果图像绝对是图像文件,但它是静态的,灰色框,随机的颜色等,则这是内容类型的问题.尝试将JPG图像解析为PNG有时会产生一个灰色框或其他随机的“失败”图像.