<HOME>

PHP&PostgreSQL設定概要

 第2サーバにおけるPHPとPostgreSQLとの設定についてご説明したいと思います。運用上、サーバOSのデフォルト設定でない部分がありますので、どうかご注意下さい。

 PHP

magic_quotes_gpc設定「On」

 php.iniファイルの中の「magic_quotes_gpc」の設定に関し、PHPとPostgreSQLとの間で重要な不突き合いが発生していた事が分かりました。この設定が「On」の場合、データベース登録においては文字化け等の問題は起きませんが、掲示板等のスクリプトにおいて「表・予・構」などの特殊文字にエスケープ文字「\」が付いてしまいます。反対に「Off」の場合、掲示板等のログファイル中の特殊文字に「\」が付く事はありませんが、今度はデータベースに登録したデータが一部文字化けを起こしてしまいます。
 そこで回避措置として、.htaccessファイルによる制御を取り入れる事と致しました。第2サーバではユーザーディレクトリpublic_html下での.htaccessファイルによる設定の上書きを許可致しておりますので、掲示板等のPHPスクリプトを置いてあるディレクトリ内に、次の設定文を含む.htaccessファイルをアップロードして下さい。

php_flag magic_quotes_gpc off

これにより、本来のphp.iniファイル中の「On」設定が「Off」に変更されますので、指定のディレクトリ内でのログファイルにはエスケープ文字「\」は自動付与されなくなります。もちろんデータベース側は本来の「On」設定により、文字化け現象は起こりません。

 尚、このような簡易的な措置を取らない場合は、スクリプト内でデータの受け渡しの際に以下の文字列処理を行わなくては行けません。ここで使用する関数はstripslashes()関数です。

処理例: $name = stripslashes($name);

この処理で、特殊文字に付いたエスケープ文字「\」を除去します。

register_globals設定「On」

 PHP4.2.0以降、このデフォルト設定は従来の「On」から「Off」に変更になっています。これは偏にセキュリティ強化の為と言われておりますが、これによりPOST/GETで送られて来たデータを従来のように「$変数名」と言う形では受け取れなくなっております。そこで、KOMONETでは既存のスクリプトの事も考慮に入れて、簡易措置としてこの設定を「On」に戻しています。セキュリティは少し下がる事になりますが、何卒ご理解を賜りますようお願い申し上げます。

 尚、この設定を「Off」に変更した場合は、データの取得方法が以下のように変わります。

POSTの場合…$_POST['変数名']

GETの場合…$_GET['変数名']

 どうしてもセキュリティの面が気になる方は、該当のフォルダ内に以下の設定文を含む.htaccessファイルをアップロードして下さい。これによりデフォルト設定に戻ります。

php_flag register_globals off

mb_send_mail()関数の扱いについて

 サーバのアップグレードに伴い、SMTPデーモンが従来のsendmailからpostfixに変更になりました。この影響で、今までのようにスクリプト内で単独でmb_send_mail()関数を使うと、メール内容が文字化けしてしまう現象が起きています。これはpostfixの内部処理文字コードがUTF-8であることに起因しているようです。この文字化けを回避するため、mb_send_mail()関数処理の前に以下の2つの関数処理を埋め込んでやって下さい。

mb_language("ja"); …カレントの言語を指定
mb_internal_encoding("SJIS"); …内部文字エンコーディングを指定

 言語とその設定は、Japaneseの場合がISO-2022-JP/Base64、uniの場合がUTF-8/Base64、Englishの場合がISO-8859-1/quoted printableになるそうです。mb_internal_encoding()関数処理だけでは、メール送信の際のContent-TypeのcharsetがUTF-8になってしまい、そのメールに対して返信処理をした場合、文字化けが発生してしまいます。上記の2つの処理を施すことによって初めて、通常どおりのメールが送信できるようになります。

 PostgreSQL

外部からの接続について

 以前、pg_hba.conf 設定ファイルや起動用スクリプトpostgresql に手を加える事によってサーバ外部からの接続を許可していましたが、今回の第2サーバのアップグレードに際し、セキュリティ強化の為これを中止しました。データベースを操作するPHPスクリプトは同じサーバ内に置いて下さい。

テーブル操作について

 以前のバージョンのPostgreSQLに比べ、今回のPostgreSQLはALTER TABLE操作においてかなりの機能拡張が成し遂げられました。特に、コラムの削除が出来るようになった事は、データテーブルの運用上実に喜ばしい事です。その詳細については、以下の公式マニュアルのページをご参照下さい。

http://www.postgresql.jp/document/pg745doc/html/sql-altertable.html