Rynor
stay hungry
grep: writing output: Broken pipe
Уважаемые! Не уверен, связано ли это с программированием на PHP, но сабж лезет при использовании popen для парсинга лога, так что звиняйте
Запрос через popen делается типа такого: cat file.log | grep -E '\|[0-9]*\|(1|2|...|N)\|'
Файл парсится в полтора гига.
Длина строк - до кило.
Если вы сталкивались с такой проблемой и знаете, как её побороть, прошу помочь.
Интересует также не особо тормозные альтернативы, пока что вижу чтение через fopen - fgets и разбор самим PHP, но вроде как это сильно тормозно.
Заранее спасибо за помошь.
ps PHP 5.0.4/ALT (cli)
-~{}~ 30.05.06 15:16:
Альтернатива в виде fopen получилась никакой, попробовал, хотя ясно, что полтора гига файла файл будет фигачиться в память, что даёт:
PHP Fatal error: Allowed memory size of 52428800 bytes exhausted (tried to allocate 1025 bytes) in ...
-~{}~ 30.05.06 16:25:
Разобрался откуда проблема - оказывается, popen жрёт память так же, как и fopen.... низачот.
[30.05.2006 16:16:09] getMemoryUsage(): 52.427.128 bytes
Когда натыкается на предел памяти, разумеется, начинает болеть.
Как бы мне это обойти?
Уважаемые! Не уверен, связано ли это с программированием на PHP, но сабж лезет при использовании popen для парсинга лога, так что звиняйте

Запрос через popen делается типа такого: cat file.log | grep -E '\|[0-9]*\|(1|2|...|N)\|'
Файл парсится в полтора гига.
Длина строк - до кило.
PHP:
if ($fp = popen($cmd, 'r')){
while(!feof($fp)) {
$s = trim(fgets($fp));
//здесь всяко-разно
}
}
pclose($fp);
Интересует также не особо тормозные альтернативы, пока что вижу чтение через fopen - fgets и разбор самим PHP, но вроде как это сильно тормозно.
Заранее спасибо за помошь.
ps PHP 5.0.4/ALT (cli)
-~{}~ 30.05.06 15:16:
Альтернатива в виде fopen получилась никакой, попробовал, хотя ясно, что полтора гига файла файл будет фигачиться в память, что даёт:
PHP Fatal error: Allowed memory size of 52428800 bytes exhausted (tried to allocate 1025 bytes) in ...
-~{}~ 30.05.06 16:25:
Разобрался откуда проблема - оказывается, popen жрёт память так же, как и fopen.... низачот.
[30.05.2006 16:16:09] getMemoryUsage(): 52.427.128 bytes
Когда натыкается на предел памяти, разумеется, начинает болеть.
Как бы мне это обойти?