Файл .exe становится поврежденным при загрузке с сервера

Во-первых: я - непритязательный веб-дизайнер, который знает, что как раз достаточно PHP опасно и как раз об администрировании сервера, чтобы быть, ну, в общем, ничем. Я, вероятно, не пойму Вас, если Вы не будете очень ясны!

Установка: я настроил веб-сайт, где клиент загружает файлы на определенный каталог, и те файлы сделаны доступными, через php, для загрузки пользователями. Файлы являются обычно исполняемыми файлами более чем 50 МБ. Клиент не хочет их заархивированный, поскольку они чувствуют, что их пользователи не являются достаточно здравым смыслом для разархивации их. Я использую php ниже, чтобы вызвать диалоговое окно загрузки и скрыть каталог, где файлы расположены.

Это - сервер Linux, если это имеет значение.

Проблема: существует определенный файл, который становится поврежденным после того, как пользователь пытается загрузить его. Это - исполняемый файл, но когда на это нажимают, пустое окно DOS открывается. Исходный файл, до загрузки открывается отлично. Существует несколько других подобных файлов, которые проходят ту же точную процедуру загрузки, и все те работают просто великолепно.

Вещи я попробовал: я попытался загрузить заархивированный файл, затем разархивировав его на сервере, чтобы удостовериться, что это не становилось поврежденным во время загрузки и никакой удачи.
Я также сравнил двоичный код исходного файла в загруженный файл, который не работает, и они - точно то же (таким образом, php случайно не вставляет ничего дополнительного в файл).

Это могла быть проблема с заголовками в моей функции downloadFile? Я действительно не уверен, как диагностировать этот …

Это - загрузка php, если это релевантно ($filenamereplace определяется в другом месте):

downloadFile("../DIRECTORY/files/$filenamereplace","$filenamereplace");

function downloadFile($file,$filename){    
    if(file_exists($file)) {
        header('Content-Description: File Transfer');
        header('Content-Type: application/octet-stream');
        header('Content-Disposition: attachment; filename="'.$filename.'"');
        header('Content-Transfer-Encoding: binary');
        header('Expires: 0');
        header('Cache-Control: must-revalidate, post-check=0, pre-check=0');
        header('Pragma: public');
        header('Content-Length: ' . filesize($file));
        @ flush();
        readfile($file);
        exit;
    }
}

ETA Информация о Additonal: - тесты для working/non-working файлов были сделаны на той же машине - Если это имеет какое-либо значение, исходный файл имеет пользовательский значок. После загрузки файл имеет универсальный пустой значок документа.

Информация о Additonal: Я ДУМАЮ ЭТО ВАЖНОЕ! Я просто попытался загрузить файл непосредственно (для обхода ссылки на загрузку, которая инициировала функцию загрузки выше). Если я загружаю файл, просто идя в его URL и загружая его тот путь, загруженные РАБОТЫ файла. Таким образом, я думаю, что это должно иметь некоторое отношение к функции загрузки. Но что??

3/17 ОСНОВНОЕ ИСПРАВЛЕНИЕ — И РАЗРЕШЕННЫЙ — Таким образом, я проснулся этим утром и это рассветало на мне, что, возможно, я сравнивал файлы неправильно. (Я повторно сохранил их как двоичный текст и затем сравнил их. Я не понял, что программа сравнения возьмет и сравнит фактические EXE-файлы). Этим утром я пытался сравнить фактические EXE-файлы и существует различие. Была одна строка кода php, который вводился в первую строку файла. Я скорректировал php, и проблема была решена. (Это было от, если/еще оператор, который определил переменную $filenamereplace в коде, который я процитировал). Еще раз спасибо за всю Вашу справку, и жаль о введении в заблуждение Вас в настаивании, что содержание файлов было идентично!

7
задан Kerri 17 March 2010 в 17:14
поделиться

2 ответа

«Я также сравнил двоичный код исходного файла с загруженным файлом, который не работает, и их точно такими же (так что php не вставляет случайно ничего лишнего в файл) "

Если это действительно так, то проблема должна заключаться в том, как исполняемый файл запускается после того, как он был загружен. Это определенно не должно быть проблемой для вашего PHP-кода.

3
ответ дан 7 December 2019 в 10:00
поделиться

Возможно, они были повреждены при загрузке. Это может произойти, если вы передадите их по FTP в режиме ASCII вместо BINARY.

3
ответ дан 7 December 2019 в 10:00
поделиться
Другие вопросы по тегам:

Похожие вопросы: