8/05/2010

CPI共用サーバでのPHP使用環境整備





CPI共用サーバではデフォルトでPHPが動作しナイ
なので動作するための設定を行う

まず必ず.htaccessを設置しなくてはならナイのだが
この記述について「Online Help」を見ると
コンパネの「お客様情報」の「プログラムのパスとサーバの情報」に
使えるVer.が記載されてるから
そのうちのどれかを選択して下記のように記述

AddHandler x-httpd-phpXXX .php


XXXはPHPのVer.で5.2.4 の場合だと以下のようになる

AddHandler x-httpd-php524 .php


これをWEB領域のトップディレクトリに設置すれば
WEB領域内のどこでもPHPが使えるワケだが
どこか一部に別のVer.を使いたかったら
そのディレクトリに別のVer.用の.htaccessを設置すればOK

例えばincludeで外部サーバのファイルを読み込みたい場合は
PHPのVer.が5.1.X~だとエラーになってしまう(※)が
このエラーをとりあえず回避するために
それを使ってるディレクトリだけ4.X.Xに設定するコトも可能だ(※※)

もちろんサポート終了した4.X.Xを使い続けるのもどうかと思うので
includeはreadfileで代替できるから
書き替えてからPHPを最新Ver.にしておくのが手だろう

また自分の場合はHTMLでもPHPを動作させる必要があるため
.htaccessに以下のように「 .html」を付け加える

AddHandler x-httpd-phpXXX .php .html


ところでこれをやる場合に気をつけなければならナイのは
HTMLに次のようなソースがある場合だ

<?xml version="1.0" encoding="UTF-8"?>

<?xml version="1.0" encoding="EUC-JP"?>


先頭の <? がPHPだと判別されてエラーになってしまうのだ
ちなみにエラー文は以下のように出る

Parse error: syntax error, unexpected T_STRING in /サーバのパス/フォルダ名/ファイル名.html on line 1


フツーは.htaccessに以下のように追記すると
<? だけではPHPとは判別されなくなるのでエラーを回避できる

php_flag short_open_tag Off


ところがCPI共用サーバでは
.htaccessに「php_flag」とあると500エラーが出てしまう
(あるいは通常PHPのコードに <?php でなく <? を使ってる場合も
今度はPHPとして読み込まれなくなってしまう)のでこの手は使えナイ

HTML中のPHPを動作させる.htaccessを設置する前に
エラーを起こす上記のような部分を総て以下のように書き直す必要がある
(注:¥はこのBLOGで表示させるために全角にしてある)

<?php echo "<?xml version=¥"1.0¥" encoding=¥"UTF-8¥"?>¥n"; ?>

<?php echo "<?xml version=¥"1.0¥" encoding=¥"EUC-JP¥"?>¥n"; ?>


最初はメンドウだと思うが
慣れてしまえばCPI共用サーバは「PHPを安全に使いやすい環境」とも言える

とゆーワケでPHPのVer.を5.2.4に設定して安心してたのだが
コントロール・パネルからphp.iniの設定情報を見ると

register_globals = On


となってるるる~

これがどうしてまずいのかの詳細は以下の参考記事に譲るとして
とにかくこれをOffにしなくてはならん

LINK:register_globals = On の恐怖

それにしても5.0.4 だとOffになってた気がするのだけど・・・
調べてみるとやっぱりこっちはOffだった?
遡って調べたトコロなぜか5.0.4 だけが最初からOffになってた??

疑問は残るが現実を見据えて対応するのが大事だ

オンラインヘルプに【PHPの設定を変更する】とゆー項目があるので
これに従って設定変更をしようと思ってよく見ると
例として載ってるのが5.0.4 の register_globals の状態を
On から Offにする方法だったりしてw

意味がわからん・・・???
てか、PHPのVer.を5.0.4 にした方が簡単だったりするぞ?!

ちなみに2010年8月現在では5.2.8が最新だがこれもOffだった

★結論
5.2.4 だけを避けて5.0.4 か5.2.8 かどちらかに設定すれば簡単だ
当然ながら最新の5.2.8があればこれに合わせるのがベストだ

※<?php phpinfo(); ?>でPHPの詳細設定を確認して
allow_url_includeがOffになってるとエラーになる
これをOnにできればそれでも解決するのだが
セキュリティ的にはOffのままの方が望ましいようだ

※※2010年8月現在では最新の5.2.8 に設定すれば
以上のような問題も起こらナイ

0 件のコメント: