Загрузка файла не работает - PullRequest
0 голосов
/ 19 января 2010

Когда я загружаю оригинальный zip-файл, он работает нормально, но когда я загружаю его, используя приведенные ниже заголовки и прочее, он не работает. Я знаю, что лучше пойти по этому пути и сказать браузеру, как обрабатывать файл, а не оставлять его на усмотрение браузера, но я не могу заставить это работать, поэтому я испытываю желание использовать header () вперед.

            $path = $this->tru->config->get('root.path').'/Digital Version of Book for Web.zip';

            set_time_limit(0);
            header("Cache-Control: public");
            header("Content-Description: File Transfer");
            header('Content-Type: application/zip');
            header("Content-Transfer-Encoding: binary");
            header('Content-Disposition: attachment; filename="NewFileName.zip"');
            header('Content-Length: ' . filesize($path));

            $f = fopen($path, 'rb');
            fpassthru($f);
            fclose($f);

Edit:

Извините, я не имею в виду, что файл загружается в формате zip (все 9,3 МБ), но я не могу распаковать zip, поскольку он недействителен.

Ответы [ 2 ]

1 голос
/ 20 января 2010

Загляните в ZIP-файл, используя Блокнот или другой текстовый редактор. Проверьте, есть ли сообщение об ошибке PHP, обворачивающее файл в первых нескольких строках. Это может быть сообщение «заголовки уже отправлены» или вызов set_time_limit(), из-за которого скрипт находится в безопасном режиме.

0 голосов
/ 19 января 2010

Попробуйте использовать readfile(). Пример приведен в Руководстве по PHP .

$file = 'monkey.gif';

if (file_exists($file)) {
    header('Content-Description: File Transfer');
    header('Content-Type: application/octet-stream');
    header('Content-Disposition: attachment; filename='.basename($file));
    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));
    ob_clean();
    flush();
    readfile($file);
    exit;
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...