Загрузка файла с помощью скрипта PHP приводит к неправильной / другой контрольной сумме md5 - почему? - PullRequest
4 голосов
/ 23 ноября 2011

Я пытаюсь осуществить косвенную загрузку через PHP. На стороне клиента я проверяю, является ли загруженный файл правильным или нет, используя md5.

Когда я загружаю файл напрямую (http://server/folder/file.apk), я получаю ту же контрольную сумму md5, что и в файловой системе, но когда я загружаю его через скрипт PHP (http://server/some_page.php), я получаю совершенно другую контрольную сумму) Почему?

Вот мой PHP-скрипт:

<?php
$name_file="test2.apk";
$path="/home/user/public_html/apk/"; 
$dimension_file=(string)filesize($name_file);

header("Content-Type: application/vnd.android.package-archive ; name=".$name_file);
header("Content-Transfer-Encoding: binary");
header("Content-Length: ".$dimension_file);
header("Content-Disposition: inline; filename=".$name_file);
header("Expires: 0");
header("Cache-Control: no-cache, must-revalidate");
header("Cache-Control: private");
header("Pragma: public");

readfile($path.$name_file);
?>

Ответы [ 2 ]

1 голос
/ 25 ноября 2011

Я обнаружил ошибку:

 $name_file="test2.apk";
 $path="/home/user/public_html/apk/"; 
 $dimension_file=(string)filesize($name_file); //<-- HERE! --- 

Я извлекал размер, используя только имя файла вместо полного пути

filesize($name_file) ---> filesize( $path . $name_file) 

ошибка была скрыта от

header("Content-Type: application/vnd.android.package-archive"); 

и ответ об ошибке php, добавленный к содержимому загруженного файла.

Поэтому я предлагаю тем, у кого такие проблемы, прокомментировать «Content-Type» во время отладки, чтобы увидеть, есть ли какие-либо ошибки в коде php, и когда весь код работает, снова включите «Content».-Type "header.

На моих серверных местах в коде до

readfile($path.$name_file);

не влияет на контрольную сумму

Спасибо Владимиру и Ракету за полезные советы

0 голосов
/ 25 января 2012

У меня были похожие проблемы при загрузке PDF-файлов через фред (хотя readfile приводил к той же проблеме). Моя возможная проблема была решена путем отключения отладочного вывода приложения, которое в моем случае было Wordpress . У меня для WP_DEBUG было установлено значение true, что привело к различиям в MD5.

...