PHP実行環境改変メモ
だいぶ前に自宅のPCにPHP実行環境を構築してから、そのままの環境でいろいろと試してきたのだが、そろそろちゃんと整備する必要が出てきたので、設定回りをきちんとしていくことにしたらしい。
ということで、以前構築した環境をベースに、ちょっと改変を加えていくことにする。
設定ファイルの準備
それすらやってなかったのか、という感じだが‥
ディレクトリ"C:/PHP/php-5.3.3-Win32-VC6-x86"の下に次のようなファイルがあるはず。
この環境は検証用なので、"php.ini-development"の方をコピーして"php.ini"というファイル名にする。
コピーができたら、Apache httpdを再起動する。
その後、前回作った"info.php"(phpinfo()を実行するだけのスクリプト)を実行し、次のような行が見つかればOK。
Loaded Configuration File C:\PHP\php-5.3.3-Win32-VC6-x86\php.ini
拡張機能を使用するための準備
現状で、phpinfoを見ると、設定が次のようになっているはず。
extension_dir C:\php5 C:\php5
そこで、先ほど作った"php.ini"を編集する。
編集するのは次の場所(809行目辺り)。
; Directory in which the loadable extensions (modules) reside. ; http://php.net/extension-dir ; extension_dir = "./" ; On windows: ; extension_dir = "ext"
この下に次のような行を追加する。(「extension_dir = "ext"」の行をそのまま編集してももちろんOK)
extension_dir = "C:/PHP/php-5.3.3-Win32-VC6-x86/ext"
(フルパスを書かなくてもいい方法があればいいのだが、とりあえずこうしないとうまくいかなかったらしい。)
そして、Apache httpdを再起動。phpinfoで先ほどのextension_dirが変更されていればOK。
ためしにマルチバイト拡張機能を有効にしてみる
現状で次のようなスクリプトを実行してみる:
<?php print_r(mb_detect_order()); ?>
と、次のようなエラーが出るはず。
Fatal error: Call to undefined function mb_detect_order() in C:\path\to\php\samples\mb_detect_order.php on line 2
関数"mb_detect_order()"の詳細はドキュメントを参照。
この関数を使用できるようにするためには、やはりphp.iniの設定が必要。
具体的には、次のような行のコメントをはずす(先頭の';'を削除する)(960行目辺り)。
;extension=php_mbstring.dll
Apache httpdを再起動すると、とりあえず上記のスクリプトは動作するようになる。
あとは必要に応じて、1749行目辺りからの"mbstring"セクションの設定を変更する。
ためしにPostgreSQLに接続してみる
やはり同様に、"php.ini"の次の行のコメントをはずす(975行目辺り)。
;extension=php_pgsql.dll
さらに、システム環境変数PATHに次のディレクトリを追加する。
このディレクトリの下に"libpq.dll"があるはずなのだが、"php_pgsql.dll"をロードする際にこのファイルが必要となる。
Apache httpdを再起動し、phpinfoにpgsqlという項が追加されていればOK。
確認のために、次のようなPHPスクリプトを実行してみる。
<pre><?php $pg_sql = pg_connect( 'host=localhost' . ' port=5432' . ' dbname=postgres' . ' user=postgres' . ' password=admin'); $res = pg_query($pg_sql, "select column_name" . " from information_schema.columns" . " where table_schema = 'information_schema'" . " and table_name = 'tables'" . " order by ordinal_position"); print_r(pg_fetch_all($res)); pg_close($pg_sql); ?></pre>
正常に実行されれば、information_schema.tables表の列名が出力されるはず。