我有一个脚本,我必须下载一些文件并确保一切正常,我正在比较MD5校验和。在PHP中使用CURL下载后错误的MD5校验和 - file_get_contents工作正常
我发现使用CURL下载时,校验和不正确。下面的脚本演示了这一点。它下载Google徽标并比较校验和。
$url = 'http://www.google.com/intl/en_ALL/images/logo.gif';
echo md5_file($url)."\n";
$path = 'f1';
file_put_contents($path, file_get_contents($url));
echo md5_file($path)."\n";
$path = 'f2';
$out = fopen($path, 'wb');
$ch = curl_init();
curl_setopt($ch, CURLOPT_FILE, $out);
curl_setopt($ch, CURLOPT_HEADER, 0);
curl_setopt($ch, CURLOPT_URL, $url);
curl_exec($ch);
curl_close($ch);
echo md5_file($path)."\n";
输出为:
e80d1c59a673f560785784fb1ac10959
e80d1c59a673f560785784fb1ac10959
d83892759d58a1281e3f3bc7503159b5
前两个是正确的,得到卷曲产生的结果(他们的MD5校验当我下载用firefox标志匹配)也不行。
任何想法如何解决?
感谢您的帮助
UPDATE:
有趣的是下面的代码工作得很好,并产生正确的输出。当保存到文件时,问题似乎只存在。不幸的是我必须直接保存到一个文件,因为我正在下载的文件可能会变得相当大。
$path = 'f3';
$ch = curl_init();
curl_setopt($ch, CURLOPT_URL,$url);
curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);
file_put_contents($path, curl_exec ($ch));
echo md5_file($path)."\n";
curl_close ($ch);
我得到'从http://windows.php.net/download/的PHP 5.3.1构建e80d1c59a673f560785784fb1ac10959'三次。你使用什么版本的PHP和curl版本? – VolkerK 2010-01-12 17:32:12
我在PHP 5.2.10上,我也试过在另一台机器上安装了PHP 5.2.6 同样的结果 – MarcS 2010-01-12 17:37:18
但是从哪里安装? (也许:怎么样?) – VolkerK 2010-01-12 17:58:19