file_get_contents($ url)返回一些服务器的额外数据

时间:2014-07-23 09:02:53

标签: php iis

我制作了一个简单的脚本来隔离我的问题:

<?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*.. ........ 

0 个答案:

没有答案