.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: - Тесты для рабочих /нерабочих файлов были выполнены на той же машине - Если это имеет какое-либо значение, исходный файл имеет собственный значок. После загрузки файл имеет общий пустой значок документа.

Дополнительная информация: я думаю, что это важно! Я просто попытался загрузить файл напрямую (чтобы обойти ссылку для скачивания, которая запускает функцию загрузки выше). Если я загружаю файл, просто перейдя по его URL-адресу и загрузив его таким образом, загруженный файл работает. Так что я думаю, что это как-то связано с функцией загрузки. Но что ??

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

7 голосов | спросил Kerri 17 MaramWed, 17 Mar 2010 00:06:01 +03002010-03-17T00:06:01+03:0012 2010, 00:06:01

0 ответов


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

Популярные теги

security × 330linux × 316macos × 2827 × 268performance × 244command-line × 241sql-server × 235joomla-3.x × 222java × 189c++ × 186windows × 180cisco × 168bash × 158c# × 142gmail × 139arduino-uno × 139javascript × 134ssh × 133seo × 132mysql × 132