我制作了一个简单的脚本来隔离我的问题:
<?php
$url = "http://www.sitlor.fr/photos/754/754000273_4.jpg";
file_put_contents("test.jpg", file_get_contents($url));
?>
在这种情况下,特别是使用此文件,file_get_contents()
会在文件的开头添加额外的字节。
当$url
是其他图片的网址时,它会正常工作。
导致问题的一些$url
:
$url = "http://www.sitlor.fr/photos/754/754000273_4.jpg";
$url = "http://www.sitlor.fr/photos/754/754005986_4.jpg";
$url = "http://www.sitlor.fr/photos/754/754002719_4.jpg";
如果我使用curl
脚本,则效果很好:
function curly($url) {
$ch = curl_init();
curl_setopt($ch, CURLOPT_URL, $url);
curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);
$content = curl_exec($ch);
curl_close($ch);
return $content;
}
file_put_contents("test.jpg", curly("http://www.sitlor.fr/photos/754/754000273_4.jpg"));
但我无法:我也需要getimagesize()
,当我在问题文件中使用它时,它会返回false
。
我还注意到问题只出现在我的远程服务器上。当我在本地尝试这些脚本时,它工作正常。
修改
我添加了IIS
标记,因为我可以看到他们正在使用响应HTTP标头中的IIS服务器:
Server :"Microsoft-IIS/6.0"
X-Powered-By :"ASP.NET"
X-AspNet-Version :"4.0.30319"
编辑2:
这是文件的二进制差异(vbindiff
输出)。
似乎额外的部分是33 32 34 0D 0A
(我不知道它意味着什么):
/tmp/original.jpg
0000 0000: FF D8 FF E0 00 10 4A 46 49 46 00 01 01 01 01 2C ......JF IF.....,
0000 0010: 01 2C 00 00 FF E1 03 BA 45 78 69 66 00 00 49 49 .,...... Exif..II
0000 0020: 2A 00 08 00 00 00 0B 00 0E 01 02 00 3B 00 00 00 *....... ....;...
/tmp/extra-bytes.jpg
0000 0000: 33 32 34 0D 0A FF D8 FF E0 00 10 4A 46 49 46 00 324..... ...JFIF.
0000 0010: 01 01 01 01 2C 01 2C 00 00 FF E1 03 BA 45 78 69 ....,.,. .....Exi
0000 0020: 66 00 00 49 49 2A 00 08 00 00 00 0B 00 0E 01 02 f..II*.. ........