ロリポップへのPEARのインストール(課題あり)

Amazon Product Advertising APIを簡単に使う方法にPEARのServices_Amazonを使用する方法があります。
ネットで検索するとロリポップにもPEARのインストールが可能らしいことがわかったので,実際に試してみました。
(注:後述するように,一応動くところまでこぎつけましたが,完全な方法とはいえません,その点にご注意ください)

参考にさせていただいたのはこちらの記事です。
ブラウザからPEARをインストールする | ホリデープログラミング入門

1.go-pear.phpの入手

以下にアクセスするとgo-pear.phpのソースが表示されるので,それを全部コピーしてテキストファイルなどでgo-pear.phpを作成します。
http://pear.php.net/go-pear


2.サーバーにPEAR用のディレクトリを作り,go-pear.phpをアップロード

PEARをインストールするためのディレクトリを作り,そこにgo-pear.phpをアップロードします。
go-pear.phpの属性は参考にさせていただいた記事では777となっていましたが,そこまで緩くなくてもいいのでは?と思い755にしました。(700でもいい?)


3.PEAR用のディレクトリにアクセス制限をかける

自分以外のユーザーがPEARのインストールや削除を行えるのは好ましくないので,アクセス制限をかけます。
.htaccessによるBASIC認証を使いました。


4.PEARのインストール

go-pear.phpをブラウザから開くとBASIC認証のあとインストール画面が現れますのでNEXTなどで進んでいきます。
設定はデフォルトのままにしました。


5.インストールの完了とセキュリティ表示

インストール自体はそれほど時間もかからずに終了し,PEARのメニューが表示されます。
ここで,1つ目の問題が発生。画面上部に赤枠で(このページの引用は青枠ですが)

Warning: This package management website is not protected with a password, this is a MAJOR security risk. Please read the README.

と表示されます。
これはPEARのディレクトリがパスワードで保護されていないという警告です。READMEを読むと,.htaccessを使ってアクセス制限をかけることが推奨されています。しかし,すでに上記3でアクセス制限はかけています。実際,インストール画面を開くにはパスワードが必要でした。念のためと思い,ブラウザをすべて閉じてもう一度BASIC認証を通ってアクセスしても警告は消えません。
ネットで検索したところでも,.htaccessでアクセス制限するというところまでの情報はありましたが,それでも警告が消えないという例は見当たりませんでした。少し気持ち悪いですが,実際に認証が働いているので,この件は保留して先に進みます。


6.Services_Amazonのインストール

管理画面のPackage SearchでServices_Amazonを検索してインストールします。依存するパッケージが不足している場合にはエラーが表示されますので,それにしたがって不足分もインストールしたあと,Services_Amazonのインストール指示を再度行います。


7.include_pathの設定ができないことによる影響

参考にした記事では,.htaccessを使ってPEARへのinclude_pathを設定していましたが,現在のロリポップは仕様でユーザーがphp.iniの設定を変えることに制限がかかってしまっているので(前回の記事参照),この方法をとることができません。
そこでやむをえずpathの指定はフルパスで行うことにし,サンプルコードが動くかどうか確かめてみます。

サンプルコードは次の記事にあるものを使わせていただきました。

Amazon APIを使って簡単にランキングを取得する|EC studio 技術ブロク

サンプルコードの動作はローカルにxamppで作った環境であらかじめ確かめておきました。
その上でサーバーにそのままアップロード。
実行してみると,あたりまえですが,Services_AmazonのAmazon.phpを見つけられなくてエラーが出ます。
そこで,Amazon.phpのフルパスを指定します。
これで解決するかと思ったのですが,今度はAmazon.phpが呼んでいるPEAR.phpが見つからないというエラーが出てしまいます。Amazon.phpのソースを修正してフルパスを指定すればエラーはとまるでしょうが,さらに別のファイルに依存している可能性を考えるとそれは現実的ではありません。
そこで,フルパスの指定をやめ,見つけられないというエラーの出たファイルをサンプルコードと同じディレクトリにコピーすることにしました。
エラーメッセージを確認しながらコピーを続けた結果,次のものをコピーしたところでエラーがなくなり,サンプルコードが正しく実行されました。

PEAR.php PEAR5.php Servicesディレクトリ HTTPディレクトリ XMLディレクトリ Netディレクトリ

一応は動いたものの,PEARをインストールしたディレクトリはおそらく参照されていません。そのため,インストール作業を行わなくても,エラーに応じて参照しているファイルを適宜コピーすればいいのではないかという疑問が生じます。
また,動かそうとするコードと同じディレクトリにPEARの構成ファイルを配置しなければならず,1つのコードだけ動かす場合はともかく,複数のコードを使おうとする場合にはその都度コピーが必要になります。ロリポップでは新構成のサーバーになってディスクの容量が大幅に増えたため,容量を圧迫することにはならないと思いますが,あまりスマートな方法であるとは思えません。


8.まとめ

以上のように,一応コードが動くところまではたどりついたものの,BASIC認証を施しても管理画面のセキュリティ警告が消えないこと,include pathを設定できないためファイルのコピーが必要なことという課題を残しました。特にセキュリティについては見落としがないかさらにチェックをしてみたいと思います。


カテゴリ

ウェブページ

Powered by Movable Type 4.261

このブログ記事について

このページは、midpurpleが2010年5月14日 18:13に書いたブログ記事です。

ひとつ前のブログ記事は「ロリポップでPHPのエラーを画面表示しないようにする」です。

最近のコンテンツはインデックスページで見られます。過去に書かれたものはアーカイブのページで見られます。