контрольная сумма md5 не совпадает при загрузке файла - PullRequest
0 голосов
/ 05 ноября 2018

Я не могу понять эту проблему. Я загружаю файл (расширение Moodle .mbz), используя PHP с заголовками HTTP. Файл сначала загружается из Amazon S3 на сервер с помощью aws php sdk, который работает нормально. Проблема заключается в загрузке файла с сервера на другую рабочую станцию. Что бы я ни изменил, контрольные суммы md5 для файла на рабочей станции и файла на сервере не совпадают. Клиенты не могут восстановить загруженный файл .mbz на свою рабочую станцию. Кажется, что-то происходит с файлом, чтобы каким-то образом изменить его, но я не могу понять, что.

Я ссылался на: 1. этот урок 2. Этот похожий вопрос и различные другие ресурсы через Google. Я в отчаянии, пожалуйста, помогите, если можете. Я убедился, что сжатие отключено в файле httpd.conf. Полностью отключил отладку в php.ini. Я могу воспроизвести проблему как в своей среде разработки, так и в промежуточной среде.

Вот код для прямой загрузки:

<?php
    if(!file_exists($filename))
    { 
        // file does not exist
        die('file '.$filename.' not found');
    } else 
    {
	$this->load->model('Job_model', 'job');
	$save_as = $this->job->get_file_name_from_key($filename);
        header("Content-Type: application/octet-stream");
        header("Content-Disposition: attachment; filename=\"$save_as\"");
        header("Expires: 0");
        header("Pragma: public");
        header("Cache-Control: must-revalidate, post-check=0, pre-check=0");
        header("Content-Length: " . filesize($filename));
        readfile($filename);
}

Использование PHP с каркасом codeigniter, если это актуально.

Спасибо!

Редактировать: восьмеричный дамп первых 16 байтов показывает, что к началу файла, загруженного с использованием приведенного выше кода, добавляется 4 пробела по сравнению с файлом на сервере.

Ответы [ 2 ]

0 голосов
/ 07 ноября 2018

Итак, я нашел этот вопрос , в частности ответ от MrPanda. Я просмотрел все помощники и библиотеки (которые я написал), которые я вызвал / инициализировал в своем контроллере, и удалил все пробелы после закрывающего тега php. Задача решена. Спасибо пользователям, которые пытались помочь мне! Два дня разочарования наконец подошли к концу.

0 голосов
/ 06 ноября 2018

Это не столько ответ, сколько предложение для эксперимента.

Мне интересно, есть ли проблема с пантомимой? Я нашел этот файл , который в строке 145 описывает тип mime для mbz как application / vnd.moodle.backup. Возможно, изменив заголовок Content-Type, вы получите лучшие результаты.

Насколько я понимаю, mbz - это, по сути, zip-файл. Поэтому попробуйте добавить следующее в конец / application / config / mimes.php .

'mbz' => array('application/vnd.moodle.backup', 'application/zip'),

Если вы хотите охватить все базы, вы можете расширить определение до

'mbz' => array('application/vnd.moodle.backup', 'application/x-zip', 'application/zip', 'application/x-zip-compressed', 'application/s-compressed', 'multipart/x-zip'),

, который принимает все возможности для типа почтового индекса и создает "default" application / vnd.moodle.backup '. Сначала я бы попробовал более простую версию.

Попробуйте этот заголовок

 header("Content-Type: application/vnd.moodle.backup");
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...