ほぼバッドノウハウなPHP CGI
PHP4に苦しんでいる皆さんこんにちは、いつまでたってもPDOがつかえなかったり、ひどいですよね。
この間諸般の理由でPHP4のサーバーでPHP5をうごかさざるをえず、大変だった件について。
disclaimer
以下をマネしてなにがおこってもしりません。
特にラッパースクリプトのクエリを展開している所は(特にPOSTを取り込んでいる所は)理解した上でつかわないと、危ないです。
PHP5をスタンドアローンで入れる
Apacheと連携させません、apxsとか指定しません。具体的にはこんなオプションでビルドします。
./configure --prefix=/home/httpd/php5 --with-mysql=/usr --with-libdir=lib64 --with-pdo-mysql=/usr --without-pgsql --enable-mbstring=all --enable-mbregex --with-pear
絶対に必要なのがprefixで、これの指定を忘れると、場合によってはお客さんに土下座参りするハメになります。
どこでもいいんですが、バッティングしないところに指定します。
他のオプションはお好みで。
サーバーにコンパイラが入ってたときはラッキーなので、そのままビルドしてinstallします。
ライブラリが足りない場合にはどうにかしましょう
php.iniは忘れずにコピーを(無くても大概動くけど)
じゃあこれで実行できるか?というと、まず実行できません
こんなラッパーを用意しましょう
#!/home/httpd/php5/bin/php -q Content-Type: text/html; <?php $posts = explode ("&", fgets (STDIN)); foreach ($posts as $val) { $parts = explode ("=", $val); $_POST[$parts[0]] = urldecode($parts[1]); } $posts = explode ("&", $_SERVER["QUERY_STRING"]); foreach ($posts as $val) { $parts = explode ("=", $val); $_GET[$parts[0]] = urldecode($parts[1]); } $_SERVER['PHP_SELF'] = '/url/to/index.php'; include "target.php" ;
酷い実装ですね!
さて、target.phpが本来なら動かすはずのphpです。
適当にかきかえましょう!
さあ、これで大抵動く筈です!
mod_rewriteと連携すれば、動的なラッパーだって夢じゃない!かも!
CGI最高!!
あ、勿論パーミッションの実行ビットは立てて下さいね、chmod 755とかで。あくまでこれはPHPじゃなくて、phpインタプリタを使ったCGIなんですから。