PHPよくある疑問・難問
PHPを使っていると、色々と疑問や難問にぶち当たる事も多いかと思います。ここでは、それらの解決法を順次掲載して行きたいと思います。(実体験に基づく!)
エラー1 PHP4の掲示板スクリプトなどで、書き込み記事の中の特定の文字に自動的に「\」マークが付いてしまう。 解決法 PHP4の設定ファイル/etc/httpd/php.ini (Turbolinuxの場合)の中に、これに関する設定文があります。少し下の方に
magic_quotes_gpc = On
と言う一文がありますので、ここの「On」を「Off」に変えて下さい。これで特殊文字に自動的にエスケープ文字が付く現象を回避できます。
尚、このような簡易的な措置を取らない場合は、スクリプト内でデータの受け渡しの際に以下の文字列処理を行わなくては行けません。ここで使用する関数はstripslashes()関数です。
処理例: $name = stripslashes($name);
この処理で、特殊文字に付いたエスケープ文字「\」を除去します。
エラー2 PHP4からPostgreSQLのデータベースに繋ごうとしたら、
Fatal error: Call to undefined function: pg_connect()
と言うエラー表示が出て、データベースに繋げられません。解決法 PHP4のバージョンによっては、バグの為PHP4の設定ファイル/etc/httpd/php.ini に、PostgreSQL関数を呼び出す為の設定文
extension=pgsql.so
が欠落している場合があります。このような場合は、「Dynamic Extensions」の項目に
extension=/usr/lib/php/extensions/no-debug-non-zts-20001222/pgsql.so
*Turbolinux 7 Serverの場合
と言う設定文を追加するか、PHPを最新のバージョンにアップグレードしてこのエラーを修正下さい。
エラー3 PHP4.2.0以降のバージョンにおいて、掲示板等のスクリプトでフォームデータが以前のように「$変数名」で取得できない。 解決法 PHPの4.2.0以降のバージョンでは、セキュリティ強化の為、POST・GETによるフォームデータが以前のような「$変数名」では取得できない設定になっています。/etc/httpd/php.iniファイルのちょっと下の方にある
register_globals = Off
と言う設定文がそうですが、デフォルトで「Off」に設定されています。4.2.0より前のバージョンでは「On」になっていたんですが・・・(^^ゞセリュリティが少々下がってもいいのなら、ここを「On」に替えれば、以前のように簡単にフォームデータが取得できます。
尚、ここを「Off」のままでフォームデータを取得したい場合は、書式を以下のように変えて下さい。
POSTの場合…$_POST['変数名']
GETの場合…$_GET['変数名']
クッキーについては…$HTTP_COOKIE_VARS{"クッキー名"}