2011-09-15 3 views
2

Я пытаюсь отправить gzipped-контент с сервера. У меня есть gzipped файл (get it here), и я пытаюсь установить echo. Я установил правильные заголовки (я думаю). Выход начинается правильно, но выводит только так много строк.php echo gzipped file cut off half through

<?php 
    $file = file_get_contents('kendo/js/kendo.all.js.gz'); 
    header('Content-Encoding: gzip'); 
    header('Content-Length: '.strlen($file)); # gets the correct filesize of my gzipped file 
    echo $file; 
?> 

Есть ли что-то не так с моим методом?

+0

Возможно, у вас должен быть заголовок 'content-type'. Вы также можете попробовать превратить 'error_reporting' в' E_ALL' и после того, как файл не будет загружен, откройте то, что вы загрузили в текстовом редакторе, чтобы искать ошибки php. –

+0

выглядит как ложная тревога. Теперь я запускаю тот же код и, похоже, работаю. Должно быть, проблема кэширования браузера/сервера. –

ответ

1

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

1

Длина вашего содержимого - длина файла gzipped, а не фактического .js-файла.

Следовательно, контент усекается после достижения длины файла gzip. Рассмотрите возможность использования ob_gzhandler

http://php.net/manual/en/function.ob-gzhandler.php

+0

Я думаю, что длина контента относится к длине данных, отправленных клиенту, а не к сколько распакованных. Спасибо за предложенный gzhandler, это, вероятно, будет лучшим выбором. –

+0

да! Длина данных, отправленных клиенту, - это длина вашего файла gzip, а не длина фактического файла .js. Однако вы пытаетесь повторить содержимое файла .js - это то, что я пытаюсь сказать. –

+0

no - Я повторяю содержимое файла gzipped, поэтому он выглядит как загруженный искаженный текст, пока браузер не расшифрует его. Кажется, что он работает сейчас, должно быть, проблема с сервером/браузером. Cheers –