[PHP-users 8944] Re: FATAL: emalloc(): Unable to allocate とな
Osamu Shigematsu
php-users@php.gr.jp
Thu, 25 Jul 2002 16:54:25 +0900
重松です。
> PHPにてテキストファイルを順番に読み集計して表示したいのですが、少し多めの
> ファイルを読み込むと「ページを表示できません」となり Apacheのerroe_logに
>
> FATAL: emalloc(): Unable to allocate 35 bytes
> FATAL: erealloc(): Unable to allocate 160 bytes
>
> が残ります。
単純に emalloc(), erealloc() に失敗しているだけでしょう。
通常は、この程度のメモリが割り当てられないはずはないので、
かなりメモリが切迫した状況になっているのではないでしょうか。
それとも、PHP (Apache) って、各 http の子プロセスが使えるメモリに
上限が設けられているなら、それを変更してあげる必要があるのでは。
# こんな状態になったことが私はないので。
そうでないなら、単に実メモリを追加するなり、swap 領域を増やす、
ということになるかと思います。
> while(list(,$name)=each($file_name_arr)){
> $tmp = @file($name);
> for($c = 0; $c < count($tmp); $c++) $all[] = $tmp[$c];
> }
>
> count($tmp)がだいたい1000を超えるとエラーが出ます。
ソースを読む限りでは、とっても効率の悪いことをしているように見えますけ。
array を扱う関数を使うと、随分効率よく書けると思います。
while ... each は foreach を使うとか、for ループは array_merge を使うとかです。
$all = array();
foreach($name as $file_name_arr)
$all = array_merge($all, @file($name));
根本的な解決ではありませんが。
--
Osamu Shigematsu
mailto:shige@ravi.ne.jp