Виснет скрипт

Статус
В этой теме нельзя размещать новые ответы.

phillip

Полезный
Регистрация
4 Сен 2007
Сообщения
411
Реакции
15
Скрипт, генерит страницы дора. Раньше работал норм, счас не работает. я ничего не трогал :nezn:
генерит 1к паг, то есть стоит цикл for ($x=0; $x<1000; $x++)

Что удивительно- в целом стало генерится раз в 5 дольше. и если еще ставлю сгенерить 10 паг, а не 1к- то более-менее генерит, хотя долго. если ставлю 1000к паг- виснет наглухо! весь код облазил- нифига не нашел!
Подключил xdebug, включил профайлинг. В итоге сгенерился файл 400мб весом!! у меня даже нет возможности скачать его с фтп чтобы посмотреть! Тогда я поставил сгенерить 1 пагу, и получился более-менее файл с логами от xdebug. Скачал я его. Посмотрел. ничего он мне интересного не представил. Указано время какое затрачено на каждую операцию. Ну и. не особо много. То есть 1 пага генерится норм, а когда дело доходит до 1к паг, уже ничего не генерится.
Как быть
 
может текстовку огромную подсовываешь? и нехватает оперативы?
в общем-то думай что изменил, т.к. если раньше было норм. чудес не бывает.
 
Сложно без кода что-то сказать.
Добавь дебаговых выводов, таймеров. Запусти не на 1000, а на 1, 5, 10, 20 смотри в каких местах будет тратиться больше времени, смотри что там.
Как вариант, у хостера могло что-то измениться.
 
И своего опыта с доргеном ред.батон

1) Тормозило из за фтп куда итогом заливалось все файло
2) Тормозило в генераторе текстов, когда был парсинг ресурсов в инете, а эти ресурсы моргали в своей доступности
3) Тормозило при огромном файле кейев
 
Вообщем действительно. Трабла возникла после моих изменений, но заметил я ее не сразу, либо она не проявляла себя. я так и не понял до конца в чем она, прошу помощи!

Суть в чем. Есть функция, которая обрабатывает текст. вставляет вместо %txt 2 del% 2 строки из заданного файла. Но потом оказалось что строки не заканчиваются знаками препинания, и на выходе получалась страшная каша)) Тогда я сделал чтобы брались на строки, а предложения из файла. Тогда возникла новая проблемка! В разных файлах, среднее предложение разное по длине! Тогда я решил брать сразу много строк, из них вычленять предложения, и еще проверять, чтобы было все вместе по 400 символов примерно! получилась функция %txt 2 del% которая берет 2 условных куска текста, примерно по 400 символов длиной, с необорванными предложениями!
И вот если я эту функцию делаю 1 раз- все норм. если 10 раз- все норм. если 1000 раз- все виснет! Не могу понять почему, помогите пожалуйста :bc:

PHP:
$addfile= 'text.txt';
$adfile_size=filesize($addfile);

function InsertTag4($t,$addfile,$adfile_size) {
	preg_match_all('&%txt.+del.*%&iU', $t, $tags);
		foreach ($tags[0] as $tag ) {
			$code='';
			$add='';
			preg_match('&%txt(.+)del.?(br)?%&iU', $tag, $values);
			for ($c=0; $c<$values[1]; $c++) {
				fseek($addfile, rand(0, $adfile_size)); fgets($addfile);
				if (isset($values[2]) and $values[2]=='br') {
					while(strlen($add)<400) $add.=makeGoodTXT(fgets($addfile).fgets($addfile).fgets($addfile));
					$code.=$add.'<br />';
				} else {
					$code.=trim(makeGoodTXT(fgets($addfile).fgets($addfile).fgets($addfile).fgets($addfile))).' ';
				}
				$add='';
				}
				while(strlen($code)<400*$values[1]) $code.=makeGoodTXT(fgets($addfile).fgets($addfile));
		$t= preg_replace('/'.$values[0].'/', $code, $t, 1);
		}
return $t;
}

Function makeGoodTXT($text) {
	$sens= unik_split_sentence($text);
	//unset($sens[0]);
	//array_pop($sens);
	//return implode(' ',$sens);
	if (isset($sens[1]))	return $sens[1].' ';
}

function unik_split_sentence($text) {
	$sentences = preg_split("/([\.\!\?])\s/u", trim($text), -1, PREG_SPLIT_DELIM_CAPTURE|PREG_SPLIT_NO_EMPTY);
	$sentences2 = array();
	$num = 0;
	foreach($sentences as $key => $sentence) {
		if ($sentence == "." || $sentence == "!" || $sentence == "?") {
			$sentences2[$num - 1] .= $sentence;
			continue;
		}
		@$sentences2[$num] .= ucfirst(trim($sentence));
		$num++;
	}
	return $sentences2;	
}
Перемудрил вообщем, уже сам не знаю как так! Может быть это оттого что делаем много fgets ?


Всё! Вник сам! проблемной была строка while(strlen($code)<400*$values[1]) $code.=makeGoodTXT(fgets($addfile).fgets($addfile)); Иногда получалось так что fgets доходил до конца файла, и тогда while впадал в бесконечность
 
Статус
В этой теме нельзя размещать новые ответы.
Назад
Сверху