[PHP-users 13139] メモリがreadになることはできませんでした

Koji Yamamoto php-users@php.gr.jp
Fri, 07 Feb 2003 20:29:46 +0900


Apache 1.3.12
PHP 4.1.2
MySQL 3.23.49
Windows2000

で動作させています。


ループ中に下記のエラーメッセージが表示されてしまいます。

===========================================================
Apache.exe アプリケーションエラー

"xxxxxxxxxx"の命令が "xxxxxxxxxx"のメモリを参照しました。
メモリが"read"になることはできませんでした。
===========================================================


請求書発行を行う処理で、明細行を取得し、鑑等計算し、印刷をする、
というプログラムです。

例えば、請求書が12ページ分あったとすると、2〜3ページ目までは印刷した後に、
上記エラーが表れます。タスクマネージャを立ち上げると、Apache.exe の
CPU使用率がほぼ全てを占有していて、プロセスを終了させると、
ブラウザが「ページが見つかりません」となってしまいます。

具体的にどうなっているかというと、
1.大体200〜800回のループになっている。
2.ループ内にユーザ定義関数を複数使用しており、引数に配列を渡している。
3.ループ内にプリンタ関数を使用していて、適宜改ページしている。
4.ループ内にMySQLへSELECT、INSERT、UPDATE処理がある。


単純に、メモリの使いすぎなのかと思い、下記の処置を
施してみましたが、やはりエラーが表示されてしまいます。

1.「printer_open()」「printer_close()」は1回だけ行う
(当然のことですが、初めは1ページごとに挿入されていた)
2.SQLクエリ実行した後に、「mysql_free_result()」を行った。
3.不必要になった変数、配列を「unset()」により解放した。
4.ユーザ定義関数の引数をすべて参照渡しにして、メモリを消費させないようにした。



何か他にメモリ消費を抑える方法はありますでしょうか。
もしくは、この考え方自体、間違えてるとか・・・。
ご教授願います。




┌【 山本浩二 / YAMAKOU 】――――――――♪
|
| mailto : yamamoto@amatelous.ne.jp
|
└――――――――――――――――――――