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{"クッキー名"}

HOME