8/10/2010

CPIサーバにPEARをインストール





その前にまずPHPを使えるように設定
設定完了したら早速PHPの詳細を確認

<?php phpinfo(); ?>


上記のように1行記述したテキストファイルにinfo.phpと名前をつけて
PHPが動作するディレクトリにアップしてブラウザから見てみると
〔Configure Command〕の欄に「'--without-pear'」とある

要するにPEARがナイので使いたい場合には
ライブラリを個別にダウンロードして利用するか
go-pear.phpでがっつりライブラリ群をインストールするか


ここは1つインストールしてみるるる~

インストール前に確認しておくのは以下

【A】
PEARのライブラリ群を入れておくディレクトリのパス
→セキュリティの面からWEB領域でナイディレクトリが望ましいので
自分の場合はhtmlと同じ階層にライブラリ用のディレクトリを設けて
その中に入れるようにした(共用サーバのプランの場合
httpドキュメントルートは usr/home/xxxxx/html となってるが
PEARのライブラリ群は usr/home/xxxxx/php/lib に入れた)


【B】
PEARの管理画面のトップページを開くディレクトリのパス
→こちらはブラウザで開くのでWEB領域にディレクトリを作成したが
セキュリティ上Basic認証をかけておくので
既に.htaccessファイルがおかれてナイ状況が望ましいかもだ
(CPIサーバでは.htaccessを自動生成してくれるのはありがたいが
勝手に上書きもしてしまうのだった・・・)
またこのディレクトリのパーミッションは777にしておく


go-pear.phpをブラウザで表示



Next>>



ここのチェックはしてもしなくても差し障りはナイが
PEAR_Frontend_Gtk2とMDB2がもれなくインストールされるのがお得だと思えたらチェックw

画面を下方にスクロールするとサーバのパスを入力する画面が出てくる



1.が【A】で10. が【B】で他は書き直さナイ方が無難だ
ちなみに[$prefix]の部分には1.で指定されたパスが反映されるので10.は「【B】/index.php」となる

画面を最下部にスクロールするとインストールの[Install]ボタンが出てくる



そのまま[Install]すると次のページへ

ここでエラーが出るようなら
パスが間違ってる(指定のディレクトリが存在しナイ)か
【B】のパーミッションが777になってナイか
いずれ英文だが内容も赤字で表示されてエラーが出るので
ここはひとつ、エラーが出なくなるまで頑張るしかナイ



インストールが上手い具合に完了すれば「Installation Completed ! 」が表示され
そのすぐ下にはinclude_pathが何になるかも表示される

include_pathとゆーのはPHPプログラムからPEARのライブラリを参照する際
どこを基点にそのライブラリの所在を突き止めて呼び出すのか
基点となるディレクトリを示すパスだ
これはプログラムに毎度長たらしい絶対パスを書かずとも済むように
通常はphp.iniファイルなどで指定しておくのだ
インストールが完了してもこの設定がなされてなければ
毎度長たらしいパスを書かねばならずメンドウ(設定は後述)

また管理画面(のトップページ)のディレクトリには
先述のようにBasic認証をかけておき(サーバのコンパネから設定)
ブラウザから接続する前にパーミッションを777から755に戻しておき
(CPIサーバでは777のディレクトリにアクセスすると500エラーを返されるので要注意!!)

Start Web Frontend of the PEAR Installer >>

Basic認証のダイアログが出て
管理画面のトップページが表示されればしめたモノ!
2011/03/23追記:管理画面のトップページが表示されなかった場合



とりあえずインストールまでは完了

この画面の右上の検索窓から「PEAR_Info」を検索



[緑のクロス]ボタンからインストール



インストールが完了したらこれを以下のファイルでテスト

<?php
require_once("PEAR/Info.php");
$info = new PEAR_Info();
$info->show();
?>


ファイル名をinfo_pear.phpとかつけてPHPが動作する場所へアップ
これをブラウザから表示すると次のようなエラーになる(はず)

Warning: require_once(PEAR/Info.php) [function.require-once]: failed to open stream: No such file or directory in /usr/home/xxxxx/html/php/info_pear.php on line 2

Fatal error: require_once() [function.require]: Failed opening required 'PEAR/Info.php' (include_path='.:') in /usr/home/xxxxx/html/php/info_pear.php on line 2


2行目で「PEARのライブラリからPEAR/Info.phpを参照して」って
いや、パスの設定してナイですから~無理っつw
サーバにはPEARのライブラリがどこかわかってナイのだ

通常は.htaccessで次のように指定すればOK

php_value include_path ".:/usr/home/xxxxx/php/lib/PEAR"


だがしかしCPIサーバは.htaccessに「php_value」があると500エラーになってしまうので
.htaccessでの指定はCPIでは不可

そこでちと厄介なのだが
CPIの次のオンラインヘルプを参考にしてphp.iniを設定するしかナイ
.htaccessを利用して下位ディレクトリ全体にPHPの独自設定を反映させる

まずは元となるphp.iniファイルを手順通りに作成して
エディターで開いて「include_path」の設定箇所を以下のように修正

; UNIX: "/path1:/path2"
;include_path = ".:/php/includes"
include_path = ".:/usr/home/xxxxx/php/lib/PEAR"
;
; Windows: "\path1;\path2"
;include_path = ".;c:\php\includes"


これを/usr/home/xxxxx/phpにアップしておいて
.htaccessでこのディレクトリとWEBディレクトリのトップで
つまりそれ以下のディレクトリ総てでこの設定が反映して
このphp.iniを参照するように次のように指定

suPHP_ConfigPath /usr/home/xxxxx/php/
<Files ~ "\.ini$">
deny from all
</Files>


これで冒頭のPHPの詳細を確認するinfo.phpをブラウザから開くと
〔include_path〕の欄にPEARのパスが表示されてたら成功

先ほどエラーになったinfo_pear.phpをブラウザから開くと
以下のような画面が表示されるだろうか?



されてたらPEARのパスが通ってるってコトで
これで管理画面から好きなだけPEARライブラリをインストールして
それらの利用が可能になったワケだ♪

・・・☆★追記

■参考ディレクトリ構成例



※1 以下のディレクトリでのPHPのVer.と動作ファイル拡張子の設定php.iniファイルのパス
※2 PHPのサーバ内情報一覧表示画面
※3 PEARのサーバ内情報一覧表示画面
※4 PEARインストールプログラムファイル(インストール後は削除)
※5 PEAR管理画面(通常はファイル名を変更しておいて、使用時にindex.phpに戻す)
※6 Basic認証ファイルセット(コンパネから作成)
※7 以下のディレクトリでのPHPのVer.と動作ファイル拡張子の設定php.iniファイルのパス
※8 php.ini

注1 赤字はインストール時に生成されたファイル・フォルダ
注2 htmlディレクトリ以下はWEB領域、同じ階層に作成したphpディレクトリ以下はWEB表示不可領域

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 に設定すれば
以上のような問題も起こらナイ