HHeLiBeXの日記 正道編

日々の記憶の記録とメモ‥

PHP実行環境改変メモ

だいぶ前に自宅のPCにPHP実行環境を構築してから、そのままの環境でいろいろと試してきたのだが、そろそろちゃんと整備する必要が出てきたので、設定回りをきちんとしていくことにしたらしい。
ということで、以前構築した環境をベースに、ちょっと改変を加えていくことにする。

設定ファイルの準備

それすらやってなかったのか、という感じだが‥
ディレクトリ"C:/PHP/php-5.3.3-Win32-VC6-x86"の下に次のようなファイルがあるはず。

  • php.ini-development
  • php.ini-production

この環境は検証用なので、"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表の列名が出力されるはず。