Форум: Форум PHPФорум ApacheФорум Регулярные ВыраженияФорум MySQLHTML+CSS+JavaScriptФорум FlashРазное
Новые темы: 0000000
Объектно-ориентированное программирование на PHP. Авторы: Кузнецов М.В., Симдянов И.В. MySQL 5. В подлиннике. Авторы: Кузнецов М.В., Симдянов И.В. Социальная инженерия и социальные хакеры. Авторы: Кузнецов М.В., Симдянов И.В. C++. Мастер-класс в задачах и примерах. Авторы: Кузнецов М.В., Симдянов И.В. Самоучитель PHP 5 / 6 (3 издание). Авторы: Кузнецов М.В., Симдянов И.В.
ВСЕ НАШИ КНИГИ
Консультационный центр SoftTime

Форум PHP

Выбрать другой форум

 

Здравствуйте, Посетитель!

вид форума:
Линейный форум Структурный форум

тема: вывод больших данных
 
 автор: Gemorroj   (11.11.2008 в 14:35)   письмо автору
 
 

здравствуйте. столкнулся со следующей проблемой - нужно вывести некие данные предположительно неограниченного размера.
данные хранятся в переменной $out, простой вывод через echo, print работает не корректно, данные либо отображаются не полностью (отображает только килобайт 20 примерно), либо вообще ничего не отображается.
попробовал следующим образом
<?php
// $sz = размер данных
if($sz>10000){
$all ceil($sz/10000);

for(
$i=0$i<$all; ++$i){
echo 
mb_substr($out,($i*10000),(($i*10000)+10000));
}

}
else{
echo 
$out;
}
?>

но так же не успешно.
Всяческие подстановки flush(); и т.п. функций так же мне не помогли.
Да, отмечу что в .htaccess прописано следующее
php_flag zlib.output_compression On
php_value zlib.output_compression_level 5

Помогите.

  Ответить  
 
 автор: cheops   (11.11.2008 в 17:27)   письмо автору
 
   для: Gemorroj   (11.11.2008 в 14:35)
 

1) Каков размер $out в байтах?
2) Вам нужно вывести эту переменную именно на одной странице? Разбить её на несколько страниц не хотите?

  Ответить  
 
 автор: Gemorroj   (11.11.2008 в 17:52)   письмо автору
 
   для: cheops   (11.11.2008 в 17:27)
 

в тестовом примере примерно 70 кб
нужно вывести всю переменную целиком и сразу.
вот примерно как это должно выглядеть
http://wapinet.ru/files/show.htm?d=4&f=mysql.htm
кстати... подумалось, ведь на этой странице весь файл и даже еще больший по размеру его отформатированный вариант отображается нормально, а вот если попробовать его скачать (text или attach), то получаем только конец файла. На Windows вообще ничего не получаем.
Все данные хранятся только в переменных и не записываются в файлы.

  Ответить  
 
 автор: cheops   (12.11.2008 в 11:05)   письмо автору
 
   для: Gemorroj   (11.11.2008 в 17:52)
 

Вообще-то не больно много... А у вас какая версия Apache используется? Это локальная машина или сервер?

  Ответить  
 
 автор: Gemorroj   (12.11.2008 в 12:19)   письмо автору
 
   для: cheops   (12.11.2008 в 11:05)
 

Это выделенный сервер.
Апач 2.2.9, PHP 5.2.6 как модуль апача.

  Ответить  
 
 автор: Gemorroj   (12.11.2008 в 15:26)   письмо автору
 
   для: Gemorroj   (12.11.2008 в 12:19)
 

http://wapinet.ru/files/show.htm?d=5&f=8.css более короткие отображает корректно.

  Ответить  
 
 автор: Gemorroj   (13.11.2008 в 17:41)   письмо автору
 
   для: Gemorroj   (12.11.2008 в 15:26)
 

кажется нашел причину.
т.к. контент отгружается посредством скрипта, я сам генерирую необходимые заголовки, в т.ч. и Content-Length, так вот mb_strlen дает меньший результат чем реальный размер переменной.
Как мне думается проблема в php_flag zlib.output_compression On php_value zlib.output_compression_level 5, если посмотреть возвращаемые заголовки, то заголовка Content-Encoding почему-то нет. Хотя в phpinfo директивы станавливаются корректно, и даже пришет HTTP Response Headers - Content-Encoding gzip. Хотя реально этот заголовок не передается. При чем эта же самая проблема и на локальном "Денвере" и на боевом сервере с FreeBSD + Apache + PHP. Отключаем в .htaccess компрессию и... все работает как положено.

  Ответить  
Rambler's Top100
вверх

Rambler's Top100 Яндекс.Метрика Яндекс цитирования