PHP CURL ile indirdikten sonra yanlış MD5 - file_get_contents çalışıyor

2 Cevap php

Ben bazı dosyaları indirmek için ve her şeyi ben MD5 toplamlarını karşılaştırarak kulüpler iyi çalıştı emin olmak gerekir bir komut dosyası var.

Ben CURL ile indirirken sağlama doğru olmadığını bulduk. Aşağıdaki komut dosyası, bu gösterir. Bu Google logosunu indirir ve toplamlarını karşılaştırır.

$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";

çıktı:

e80d1c59a673f560785784fb1ac10959
e80d1c59a673f560785784fb1ac10959
d83892759d58a1281e3f3bc7503159b5

İlk iki doğru (ben firefox kullanıyorsanız logosunu indirmek zaman MD5 sağlama maç) ve kıvrılma tarafından üretilen sonuç normal değildir.

nasıl bunu düzeltmek için herhangi bir fikir?

Yardımlarınız için teşekkürler

GÜNCELLEME:

ilginç Aşağıdaki kod gayet güzel çalışıyor ve doğru çıkışı üretir. Sorun gerçekten sadece bir dosyaya kaydederken var gibi görünüyor. Ne yazık ki ben indiriyorum dosyaları oldukça büyük alabilirsiniz beri doğrudan bir dosyaya kaydetmek zorunda.

$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);

2 Cevap

Sen md5_file eksik bir dosya görme için hesap verebilecek, bir fclose($out) kaçırıyorsun.

Eklemeyi deneyin

curl_setopt($ch, CURLOPT_BINARYTRANSFER, 1);

Curl seçenekleri