[PHP] 配列に値を入れていくとエラーになりプログラムが落ちます。原因と対処法を教えて下さい。


詳細)
ループで配列に値を入れていくと、(推測ですが)配列の許容数をオーバーしてエラーになりプログラムが落ちます(ブラウザがアラートダイアログを返し、ブラウザは真っ白です)。

原因と対処法を教えて下さい。

よろしくお願い致します。

回答の条件
  • 1人1回まで
  • 登録:
  • 終了:2006/04/19 16:12:05
※ 有料アンケート・ポイント付き質問機能は2023年2月28日に終了しました。

ベストアンサー

id:bonlife No.5

回答回数421ベストアンサー獲得回数75

ポイント50pt

配列の許容量というものはありませんが、スクリプトが確保できる最大メモリを指定している設定があります。

このmemory_limitが効いており、エラーになっているのではないでしょうか。

回避するためにはphp.iniの内容を書き換えるか、ini_setで設定を変更する必要すれば良いはずです。

ini_set("memory_limit", "16M");

上記の例ではmemory_limitを16MBに変更しています。

(デフォルトでは8MBか16MBに設定されています。)

また、「ブラウザがアラートダイアログを返し」とありますが、どのような内容になっていますか。

そこに出ているエラーメッセージが解決のヒントになると思います。

以降の回答者の方の参考になるように情報を開示していただけますでしょうか。

可能であれば、問題が発生するソースも開示するより確実な回答がつくと思います。

(全ソースは問題がある場合、配列の部分に特化した簡単なサンプルを提示していただければ良いと思います。)

参考になると幸いです。

id:k2017

ありがとうございます。解決いたしました。

エラーは以下でした。ブラウザによっても違うと思います。

「アクセス中のURL:〜の読み込みに失敗しました」

(あまり奨励されるやり方ではありませんが)簡単な質問文で的確な答えが返ってくるか知りたかったという思いがありました(同じトラブルにあわれた方が多ければすぐに正解が出るし、否なら逆)。すみません。ありがとうございました。

2006/04/19 16:08:50

その他の回答4件)

id:Xegnyph No.1

回答回数66ベストアンサー獲得回数1

ポイント5pt

>配列の許容数をオーバーしてエラー

と、原因がわかっているのであれば、必要な配列を用意すればいいのでは?

id:k2017

あくまで推測です。

配列のサイズを増やしながら値を入れています。それでもエラーになります。

そもそも許容数というものがあるのかどうかを知りたいです。

2006/04/19 13:41:37
id:taknt No.2

回答回数13539ベストアンサー獲得回数1198

ポイント5pt

配列は、確保した分を 超えると エラーになるのが 通常だと思われます。

なので、宣言時に 多めに配列を確保する。

か、もしくは動的で 使う前に確保するかのどちらかでしょう。

id:k2017

宣言の仕方が知りたいです。

2006/04/19 14:04:04
id:disca No.3

回答回数26ベストアンサー獲得回数0

ポイント20pt

http://php.s3.to/man/function.set-time-limit.html

可能性として考えられるのは、タイムアウトが発生した

ことが考えられます。PHPを連続して動作させる方法として、

set_time_limit という関数がありますので、一度お試しください。

id:k2017

あっという間にエラーを返します。

ただ原因はそれに近いような気がします。

2006/04/19 14:04:55
id:masasan No.4

回答回数143ベストアンサー獲得回数2

ポイント30pt

配列の宣言について

http://www.res-system.com/weblog/item/128

>変数定義時に明示的な型定義を必要としない(サポートしない)そうです。

サポートしないの?ソースは不明。

 

http://www.atmarkit.co.jp/flinux/php4/php4_3/php4_3.html

>多次元配列の要素には数値添字と文字列添字を混在でき、次元数の制限はありません。

次元に制限がないなら、配列に制限がない可能性も。

すると、OSやメモリなどシステムの上限が限界になるのかも。

 

http://php.benscom.com/manual/ja/function.stream-select.php

>注意: 配列に返されたストリームに対して読み込みまたは書き込み操作を行う際に、 必ずしもあなたの希望しただけデータが読まれたり書かれたりはしないことに 注意してください。たった 1 バイトしか読み出せない場合も、書き込めない 場合もあるのです。

こういうこともあるようで。

 

配列に入れるサイズを10倍くらいにして、どこまで許容されるか元と比較すれば状況が少しは分かるかもしれません。

 

解決のお役にたてば。

id:k2017

> すると、OSやメモリなどシステムの上限が限界になるのかも。

これかも知れません。

既定値などを詳しく知りたいです。対処法も知りたいです。

2006/04/19 15:00:16
id:bonlife No.5

回答回数421ベストアンサー獲得回数75ここでベストアンサー

ポイント50pt

配列の許容量というものはありませんが、スクリプトが確保できる最大メモリを指定している設定があります。

このmemory_limitが効いており、エラーになっているのではないでしょうか。

回避するためにはphp.iniの内容を書き換えるか、ini_setで設定を変更する必要すれば良いはずです。

ini_set("memory_limit", "16M");

上記の例ではmemory_limitを16MBに変更しています。

(デフォルトでは8MBか16MBに設定されています。)

また、「ブラウザがアラートダイアログを返し」とありますが、どのような内容になっていますか。

そこに出ているエラーメッセージが解決のヒントになると思います。

以降の回答者の方の参考になるように情報を開示していただけますでしょうか。

可能であれば、問題が発生するソースも開示するより確実な回答がつくと思います。

(全ソースは問題がある場合、配列の部分に特化した簡単なサンプルを提示していただければ良いと思います。)

参考になると幸いです。

id:k2017

ありがとうございます。解決いたしました。

エラーは以下でした。ブラウザによっても違うと思います。

「アクセス中のURL:〜の読み込みに失敗しました」

(あまり奨励されるやり方ではありませんが)簡単な質問文で的確な答えが返ってくるか知りたかったという思いがありました(同じトラブルにあわれた方が多ければすぐに正解が出るし、否なら逆)。すみません。ありがとうございました。

2006/04/19 16:08:50

コメントはまだありません

この質問への反応(ブックマークコメント)

「あの人に答えてほしい」「この質問はあの人が答えられそう」というときに、回答リクエストを送ってみてましょう。

これ以上回答リクエストを送信することはできません。制限について

回答リクエストを送信したユーザーはいません