Windows+XAMPPとPHP赤マンモス本で苦労した。

PHP5徹底攻略

PHP5徹底攻略

を買いました。環境はXAMPPを何も考えずに入れて

PHP 5.2.6 (cli) (built: May 2 2008 18:02:07)
mysql Ver 14.12 Distrib 5.0.67, for Win32 (ia32)

です。これで、2日くらい悩んだので、書いておきます。

Part1 Chapter3は、コマンドラインからPHPを実行する話ですが、基本的にphp.iniに何を書いても無視されるようで、どこのディレクトリに必要なファイルを読みに行っているかを調べて、そこに必要な*.phpとか*.dllとかをコピーしておくしかないようだという結論に達しました(間違っていたらご指摘ください)。

まずは、自分が実行したいzip.phpに phpinfo(); とか書いて、いっぱい文字が出力されるので、grepなりリダイレクトするなりして中を見ると、

Configuration File (php.ini) Path => C:\WINDOWS

とか出るんですけど、どうも当てにならないようで、ここにphp.iniを読みに行っているという感じがしません。はっきりとは分かりませんがそうとしか言えません。

いきなり余談なのですが、マンモス本ではSQLiteを使っているんですが、自分が使いたいのがMySQLだったので、MySQLを使おうとして、途中まで設定した話。

phpspotさん
http://phpspot.net/php/pg%82r%82p%82k%8E%C0%8Ds.html
から


getMessage());
}

$sql = "SQLコマンド";
$result = $db->query($sql);

をそのままコピって来たのですが、'DB.php'が見つからないようで

Fatal error: require_once(): Failed opening required 'DB.php'
(include_path='.;C:\php5\pear') in C:\work\part3\zip.php on line 2

とかエラーが出てきます。include_pathはデフォルトだと

include_path = ".;C:\xampp\php\pear\"

となっていると思いますが、本当にこの設定が生きているなら、DB.phpが開けられないとエラーが出るわけないので、これを信じるのはやめて、

C:\xampp\php\pear\ を C:\php5\pear にコピーします。

で、肝心の赤マンモス本をMySQLでやると言うのは、
目から鱗さん
http://kandk.cafe.coocan.jp/nucleus/index.php?itemid=180

MySQLでの対応関数がまだ分からないSQLite関数
sqlite_array_query -- 指定したデータベースに対してクエリを実行し、配列を返す

と赤マンモス本で使っている関数が書いてあったのであきらめました。

で、SQLiteをやる事にしたのですが、
必要なdllは

extension=php_pdo.dll
extension=php_sqlite.dll

のようです。

で、php.iniに

extension_dir = "C:\xampp\php\ext\"

と書いてあるからここに読みに行くだろうと思うとこれも違うようで、じゃぁどこを読みに行っているかというと、
rakutoネットさん
http://study.rakuto.net/php/sqlite/sqlite_us/


/* sqliteモジュールがあるか判定 */
if (!extension_loaded('sqlite')) {
/* OS毎に読み込み方を変更 */
if (strtoupper(substr(PHP_OS, 0,3) == 'WIN')) {
dl($dir.'/php_sqlite.dll');
} else {
dl('sqlite.so');
}
}
を参考に、

/* sqliteモジュールがあるか判定 */
if (!extension_loaded('sqlite')) {
/* OS毎に読み込み方を変更 */
if (strtoupper(substr(PHP_OS, 0,3) == 'WIN')) {
dl('php_pdo.dll');
dl('php_sqlite.dll');
} else {
die("dllがdl出来ません");
}
}
と書きました。すると

Warning: dl(): Unable to load dynamic library 'C:\php5\php_sqlite.dll' - 指定されたモジュールが見つかりません。
in C:\work\part3\zip.php on line 12

とか出てきます。ので、C:\php5\ の下に
php_pdo.dll
php_pdo_mysql.dll
php_pdo_sqlite.dll
php_sqlite.dll
をコピーしました。これでコマンドラインからのSQliteMySQLをいじるPHPの実行が出来ると思います。

あと文字コードSJISにしたほうがいいみたいですね。