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

Форум PHP

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

 

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

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

тема: Скрипт зависает при больших объёмах текста.
 
 автор: Владимир55   (25.11.2006 в 01:06)   письмо автору
 
 

Скрипт, осуществляющий сепарирование текста на отдельные страницы, нормально работает при размере текста в районе 300000 знаков, но зависает при 700000 знаков. Предположительно где-то вот на этих операциях:

$text_ish = file_get_contents($book); //считываем книгу в исходном виде
$text = nl2br($text_ish); // вставляет перед переводами строк <br>.
$words=preg_split('/ /', $text, -1, PREG_SPLIT_NO_EMPTY);

Может, переменные или функции имеют ограничение по размеру?

   
 
 автор: Alph[p]a   (25.11.2006 в 12:08)   письмо автору
 
   для: Владимир55   (25.11.2006 в 01:06)
 

set_time_limit(0); - может поможет

   
 
 автор: Владимир55   (25.11.2006 в 13:30)   письмо автору
 
   для: Alph[p]a   (25.11.2006 в 12:08)
 

Нет, это не помогло.

Дело в том, что обработка текста размером 300.000 знаков занимает секунд пять-десять, так что и 700.000 должно бы уложиться в 30 секунд, заданных по умолчанию.

Детальные исследования показали, что при больших текстах не исполняется только один оператор. Вот этот:

$words=preg_split('/ /', $text, -1, PREG_SPLIT_NO_EMPTY);

   
 
 автор: deman-b   (25.11.2006 в 13:48)   письмо автору
 
   для: Владимир55   (25.11.2006 в 13:30)
 

попробуй в альтернативу регулярным выражениям использовать строковые функции....
или как нибудь разбивать текст на блоки по 10000 символов, а потом склеивать результаты..
PS бедныя preg_split() :o)

   
 
 автор: shiva   (25.11.2006 в 13:52)   письмо автору
 
   для: Владимир55   (25.11.2006 в 13:30)
 

Попробуйте еще

ini_set("memory_limit", "64M");

Хотя вряд ли, на самом деле.

   
 
 автор: deman-b   (25.11.2006 в 14:00)   письмо автору
 
   для: shiva   (25.11.2006 в 13:52)
 

скорее рег. выражение не справляется)

   
 
 автор: Владимир55   (25.11.2006 в 14:25)   письмо автору
 
   для: deman-b   (25.11.2006 в 14:00)
 

Я окружил

$words=preg_split('/ /', $text, -1, PREG_SPLIT_NO_EMPTY);

флагами, но и с ними диагностика получается непростой. Вот смотрите:

Если упомянутому регулярному выражению предшествует

ini_set("memory_limit", "64M");

то через эту операцию скрипт проходит, то есть регулярное выражение исполняется. Но… выдаваемый результат противоречит здравому смылу! Если в тексте размером 450.000 знаков насчитывается 60.000 слов, то в тексте размером 870.000 знаков насчитывается 40.000 слов! То есть эта функция не зависает, но исполняется неправильно. Может ей 64М мало?

   
Rambler's Top100
вверх

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