← |
2024年11月 |
→ |
日 |
月 |
火 |
水 |
木 |
金 |
土 |
|
|
|
|
|
1 |
2 |
3 |
4 |
5 |
6 |
7 |
8 |
9 |
10 |
11 |
12 |
13 |
14 |
15 |
16 |
17 |
18 |
19 |
20 |
21 |
22 |
23 |
24 |
|
26 |
27 |
28 |
29 |
30 |
|
知人の、WebサーバーでPHPがWarning出していることに気がついた><
PHP5.3系以降でDEPRECATEDになった命令を使っていたことが原因なんだけど、 →http://www.php.net/manual/ja/migration53.deprecated.php
さすがに色々と問題なので、 急ぎ、知人に連絡して、急場しのぎとして、PHP.iniを書き換えてもらった。 でも、Warningが消えない><
phpinfo()で確認すると確かに、php.iniは効いている。
原因がさっぱり分からなかったのですが、 ふと、思いつきでphp.iniを書き換えたら治ったー
図を書かないで説明すること自体難しいので、 かなり端折った説明になりますが・・・
通常、PHPはApache等のWebサーバーの内部モジュールとして動いている。 この場合は、ログに書かれるべきエラー、画面に出すべきエラー、画面に出すべき正常な結果 これらが、きちんと区別されて適切に処理される。 この時は、error_reportingで画面に出すべきエラーのレベルを指定すれば、 その通りにエラーが画面に出たり、画面に出なかったりする。
ところが、今回のサーバーはPHPがCGIとして動作していた。 つまり、Webサーバーから、外部プログラムとしてPHPが動作するわけである。 この場合、PHPの実行結果は、 ログに書かれるべきエラー、画面に出すべきエラー、画面に出すべき正常な結果も、 同じ「標準出力(stdout)」に書き出されるだけとなり、 Webサーバーは「「標準出力(stdout)」の内容をブラウザに返す」動きのため、 いくらエラーレベルを設定しても「標準出力(stdout)」に出された物は すべからく、ブラウザの画面に出てしまうわけだ。
そこで、登場するのがdisplay_errorsという設定。 これがonの場合には、 CGIで動作しているときにはエラーは標準出力に出力される。 これではまずいので、これをoffにする、つまり、 「エラーは標準出力などには書き出さない」とすることで解決した。
ちなみにエラーが標準出力に出ることが問題なので、 display_errors=stderr (エラーは標準エラー(STDERR)に出力) という設定でも良かったかも知れない。
以上、駆け足で、先ほど修正したサーバーの話。
追記 ちなみに、PHPはCGI的動作をしないで済むから軽量に動くというメリットがある。 そのため、普通は、CGIモードでPHPを使うことはあまりない。 なので、なかなか、この原因に思い至れなかったorz |
01:06, Wednesday, Aug 03, 2011 ¦ 固定リンク
¦ 携帯
■コメント
■コメントを書く
※コメントの受け付けは終了しました
|
|