PHP-关于下载图片的问题?
这是我写的一个简单的保存图片的方法,但是很多保存后出现图片缺失,这个是保存后的图片:
<?php
$str = file_get_contents('http://test.cc.com/test/test.jpg);
header("Content-type: text/plain");
header("Accept-Ranges: bytes");
header("Content-Disposition: attachment; filename="test.jpg");
header("Cache-Control: must-revalidate, post-check=0, pre-check=0" );
header("Pragma: no-cache" );
header("Expires: 0" );
exit($str);
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(3)
可能是BOM造成的。PHP5中的file_get_contents函数获取文件内容,实际是按二进制来读取的,所以,当你用file_get_contents去获取一个带BOM的UTF-8文件时,它并不会把UTF-8的BOM去掉,因为file_get_contents函数读取文件的时候,是按二进制来读取的,读取到的内容是包含BOM的,而用户操作的时候,想当然的以为读取到的内容是不包含BOM的内容,只有在十六进制模式下才可以看见,问题也就出在这;还有可能是网络原因造成的,file_get_contents很不稳定建议用curl替换。
file_get_contents函数读取的应该是文件的输出流,在输出捕做的时候可能因为网络的原因输出没有完整,但是你的header函数已经把不完整的输出流保存为文件了...
file_get_contents在指抓取的时候会出现很多问题,我以前也遇到过,不过都没有解决,后来改成了curl就没有出现这个问题了,建议你用CURL试试。
$url = "http://test.cc.com/test/test.jpg";
$ch = curl_init();
curl_setopt ($ch, CURLOPT_URL, $url);
curl_setopt ($ch, CURLOPT_RETURNTRANSFER, 1);
curl_setopt ($ch, CURLOPT_CONNECTTIMEOUT,10);
$str= curl_exec($ch);
header("Content-type: text/plain");
header("Accept-Ranges: bytes");
header("Content-Disposition: attachment; filename="test.jpg");
header("Cache-Control: must-revalidate, post-check=0, pre-check=0" );
header("Pragma: no-cache" );
header("Expires: 0" );
exit($str);