@i_want_to_know_everything

Отдача docx файла PHP?

отдаю файл через PHP с помощью простейшего скрипта

$contenttype = get_post_mime_type( $file[ 'id' ] );
$filename    = basename( $file[ 'url' ] );
set_time_limit( 0 );
header( "Content-Disposition: attachment; filename=\"{$filename}\""  );
header("Content-Type: application/x-force-download; name=\"{$filename}\"");
header( 'Expires: 0' );
header( 'Cache-Control: must-revalidate' );
header( 'Pragma: public' );
header( 'Content-Length: ' . filesize($file_dir) );
readfile( $file_dir );
exit;


Все отдается нормально кроме файлов с расширнением docx, на них постоянно вылетает ошибка такого вида
0b17bcbe71.jpg
В чем может быть причина?
  • Вопрос задан
  • 1224 просмотра
Решения вопроса 1
syamskoy
@syamskoy
if (ob_get_length()) ob_end_clean();
            header('Content-Description: File Transfer');
            header('Content-Type: application/octet-stream');
            header('Content-Disposition: attachment; filename="' . basename($file->display_name) . '"');
            header('Content-Transfer-Encoding: binary');
            header('Connection: Keep-Alive');
            header('Expires: 0');
            header('Cache-Control: must-revalidate, post-check=0, pre-check=0');
            header('Pragma: public');
            header('Content-Length: ' . filesize($file->path));
            if ($fd = fopen($file->path, 'rb')) {
                while (!feof($fd)) {
                    print fread($fd, 1024);
                }
                fclose($fd);
            }
            exit;


Такого вида код работает во всех случаях для всех браузеров. Через readfile иногда c Safari не работает.
Ответ написан
Комментировать
Пригласить эксперта
Ответы на вопрос 1
Комментировать
Ваш ответ на вопрос

Войдите, чтобы написать ответ

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