php note



 

PHP Note(トップページ) > 02.基本的な関数 > 10.その他 > 典型的なエラーとその意味







[Note] 典型的なエラーとその意味

PHPでプログラミングを始めた頃の1つのハードルがエラーメッセージの解読ではないでしょうか?まず、エラーが英語ででるので拒絶反応を起こす人もいます(スクリプトも英文なのですが)。それから、100行目にエラーがあるとのメッセージを受けて、一生懸命100行目をみるのですが、どうしてもエラーがわからない。そんな壁にぶつかる方もいると思います。

ここでは、そんな方の為に典型的なエラーを簡単に解説していきたいと思います。

まず最初は、以下のエラーメッセージについてです。

Parse error: syntax error, unexpected ‘@’, expecting ‘,’ or ‘;’ in ***.php on line ~

これをみると、「@なんかスクリプト中に使ってないんだけどな?」と思う方がいらっしゃるかと思います。ここでの@は実は「全角スペース」を意味しています。英文どおりにとれば、「,」や「;」を想定していたところに「全角スペース」があるというエラーメッセージです。

このページを読んでいる方は、もしかしたら初耳かもしれませんが、PHPスクリプト中には「全角スペース」は含めてはいけないことになっています。半角スペースかTabで間隔を調整するしかありません。プロはおそらく「Tab」による調整で構造化した記述をしていると思います。

このエラーの場合は、テキストエディタで該当する行に「全角スペース」がないか探してください。特に冒頭のスペースは要注意だと思います。バックスペースキーなどで戻る幅が、当然、全角と半角では違いますので、よく確認しましょう。

次は以下のようなエラーメッセージです。T_STRINGは文字列を意味します。Tはテキストの頭文字でしょうか。

Parse error: syntax error, unexpected T_STRING in ***.php on line ~

この場合も直訳すれば、「~行目に想定外の文字列がある」ということですが、しかし、「~行」を一生懸命探しても、「一体、どこがエラーなのか教えて欲しい!」と思うよな時があります。そういった場合、相当なる確率で前後に間違いがあります。実際上どういうケースかといいますと、例えば、前の行で行末の「;」を入れ忘れているとか、「()」「{}」の区切り方がおかしいとか、そういった理由で「この行にいきなり文字列がくるのは、おかしいですよ」とのエラーの場合があります。よく前後のスクリプトを注意しましょう。

また、上記に似たようなエラーの原因の1つとしては、他にも例えば、文字列に「.」で変数を加えて ”test”.$data とするところを「.」を忘れてしまって ”test”$data となっているなど様々な要因が考えられます。

次にエラーといっても、もっと致命的なエラー(Fatal error)を紹介しておきます。

Fatal error: Maximum execution time of 60 seconds exceeded in ~

この意味は、「スクリプトの実行時間がデフォルト設定の60秒を超えたので停止しました」という意味です。PHPで非常に時間のかかる処理を実行させようとすると、制限時間を気にしなければなりません。もし、何かのテストや自分以外のユーザが使用しないなどの利用であれば、スクリプトの冒頭に、「set_time_limit(0);」を入れると実行時間は無制限になります。もしくは、「set_time_limit(120);」などとすれば120秒は実行可能です。ただし、本質的には、「php.ini」の設定で「max_execution_time = 60」の箇所の値を変更しなければなりません。

もう1つ致命的なエラーを紹介しておきます。

Fatal error: Allowed memory size of 16777216 bytes exhausted (tried to allocate 36204 bytes) in ~

この意味は、「デフォルトで割り当てられたメモリ(16M程度)を使い切ったので停止しました」ということです。この場合、スクリプトの冒頭で、「ini_set(”memory_limit”,”-1″);」 とすれば、実行に使用する制限はなくなります。しかし、自分だけでなく他のユーザーも使用している場合には、ユーザー数が多いとハングアップするかもしれません。またこれも本質的には、「php.ini」の設定の中で「memory_limit = 16M」のような箇所を変更する必要があります。しかしながら、それでもApachのMax_Clientsとの兼ね合いで、16M(32Mなどでも)×n人分のメモリが最大でサーバーに負荷をかけることに注意しなければなりません。

以上、典型的なエラーのいくつかとその対処を紹介しておきました。







[ カテゴリ一覧 ]

 |  01.基本構文  |  02.基本的な関数  |