Помогите оптимизировать пожалуйста

seva2

Партнер PHPClub.ru
Помогите оптимизировать пожалуйста

PHP:
$zd = gzopen("1.gz", "r");
$partner_array=array();
while(!gzeof($zd))
{
$bufZiped = gzgets ($zd, 1000);
if(strstr($bufZiped, 'dealer.php'))
	{
//echo $bufZiped.'<br><br>';

   preg_match_all("/&mag_did=(.*?)&/i",  $bufZiped,$par_id);
 $partner_array[]=$par_id[1][0];
	}

}
gzclose($zd);

 add();
function add()
{
	global $partner_array;
$partner_array_2=array_unique($partner_array);
foreach ($partner_array_2 as $key => $value )
{
$count=0;
		foreach ($partner_array as $key_t => $value_t )
		{
		if($value_t==$value)
			{
			$count++;
			}
		}
$count=ceil($count/2.6);
echo $value.'-'.$count.'<br>';
}

}
Данный код считывае аксесс лог и считает количество mag_did.

Мне нужно получить такиме данные mag_did и рядом количество упоминаний в файле..

Как можно пооптимальней написать данный код?
 

HraKK

Мудак
Команда форума
Если ты считаешь что выкладывая свои программы и говоря оптимизируйте их плз, что все сразу кинутся это делать - боюсь ты заблуждаешся. Рефакторинг стоит денег.
 

seva2

Партнер PHPClub.ru
SelenIT
супер то что надо, спасибо.

Такой вопрос, начал считывать фаил, как советовал ФАНАТ по 1 строчке, и выскочила ошибка
Allowed memory size of 33554432 bytes exhausted (tried to allocate 1001 bytes) in /home/u30122/domain.ru/www/cron/stat_par.php on line 11

Строчка 11: $bufZiped = gzgets ($zd, 1000);

Как быть?

Спасибо огромное
 

Navarro

Новичок
Попробуй так
$par_id=preg_replace("/&mag_did=(.*?)&/i", '\1',$bufZiped);
$partner_array[$par_id]++;


На выходе получишь массив, где ключами являються id партнеров , а значениями количество упоминаний
и приведи хотябы тестовую строку чтоли, а то непонятно что это (.*?)
 

seva2

Партнер PHPClub.ru
Navarro скрипт паботает, спасибо, мне надо знать как исправить эту ошибку... Которую я написал

-~{}~ 13.06.06 19:44:

Народ помогите... не могу решить проблему
 

Wicked

Новичок
1) народ бы с радостью, да не знает, куда там у тебя память девается. Можешь привести окончательный исходник? И запостить численные характеристики этих

2) также можно самостоятельно подебажить с помощью memory_get_usage().

3) замечание по коду: ты уверен, что когда ты читаешь буфер по 1000 байт, то не получится так, что выражение "/&mag_did=(.*?)&/i" окажется разбитым между двумя буферами?

4) совет: я бы порекомендовал добавить модифайер S в регулярное выражение.
 

seva2

Партнер PHPClub.ru
Попробовал как сказал Navarro, теперь ошибка
Fatal error: Allowed memory size of 33554432 bytes exhausted (tried to allocate 797 bytes) in /home/u30122/sotmarkettest.ru/www/cron/stat_par.php on line 20

Проблема в том что если делать ограничение на 1000 строчек все работает, а вот если весь разом обрабатывать нет

3) Я изменил.
4) Добавил
 
Сверху