2016-09-19 3 views
0

Я пытаюсь создать, скачать и удалить gzip-файл.Заголовок - Скачан Gzip Не в формате Gzip, правильно на сервере

Файл, созданный на сервере, является правильным. Я могу загрузить его по прямой ссылке, и файл распаковывается правильно локально.

Если я использую header(), файл не будет распаковываться и выдаст ошибку «Not In Gzip Format». Кажется, я должен использовать header(), чтобы иметь возможность отключить().

Суть кода:

# This creates the gz file correctly.. 
$tar = 'meta-info.tar'; 
$gz = $tar.'.gz'; 
$p = new PharData($tar); 
$p->compress(Phar::GZ)->buildFromDirectory('../'); 

# This creates the dialog then removes the file correctly.. 
header('Content-Type:'.mime_content_type($gz)); 
header('Content-Length:'.filesize($gz)); 
header("Content-Disposition:attachment;filename=$gz"); 
flush(); 
readfile($gz); 
unlink($gz); 

# ...but the downloaded file is not correct. 

Как ни странно, а «молнии» загрузки файлов и распаковывает правильно.

Я просмотрел весь стек и попробовал несколько вещей, но ничего не работает .. Любые идеи?

Заранее благодарен!

+0

Итак, какой текст заголовка Content-Type отправлен? Используйте консоль разработки браузеров, чтобы изучить полученный ответ. – arkascha

+0

Вы не можете видеть _what_? Если вы загружаете файл, то, конечно же, вы выполнили запрос, и это, безусловно, отображается в консоли разработчика. Вы знаете, как открыть это и использовать вкладку «Сеть» там? – arkascha

+0

AFAICS 'application/x-gzip' не относится к официальным типам mime, которые обычно поддерживаются ... – arkascha

ответ

0

Проблема заключалась в том, что информация заголовка уже отправлена.

Использование ob_end_clean() исправлено (структура страницы не может быть изменена).

ob_end_clean(); 
header("Content-Disposition:attachment;filename=$gz"); 
header('Content-Type:application/x-gzip'); 
header('Content-Length:'.filesize($gz)); 
flush(); 
readfile($gz); 
unlink($gz); 
Смежные вопросы