Saba note

醜悪コード Ugly hacks ITものづくり

PEARをロリポップ・レンタルサーバーにインストール

レンタルサーバーはyumとかrpmとかapt-getみたいなものが使えないので、PHPライブラリーのPEARを設定する際には手動で配置することになるのでやや面倒です。ロリポでは2016年現在PHP Version 5.6.21が使えるのでこれで設定。
やるべきことは、

  1. PEARのインストールツール(http://pear.php.net/go-pear)を使って、PEARライブラリを任意のWEBディレクリにインストールする。(必要なライブラリーは同様のツールで追加可能です。)
  2. インクルードパスを設定して、includeしたりrequireできるようにする。

の2点だけなので、面倒は面倒ですが、やってしまえばそれでおしまいです。
http://tips.recatnap.info/install_pear_on_lolipop/がとても参考になりました。

PEARのダウンロード、レンタルサーバーにアップロード

最初にhttp://pear.php.net/go-pearのソースをコピペして、PEARのインストールしたいディレクトリにindex.phpとして配置します(*1)。ここではDocumentRoot以下に/pearlib/を作成してPEARをインストールすることにします。

/home/users/1/lolipop.jp-xxxx/web/pearlib/index.php

pear_install_http上記ファイルにhttpからアクセスするとPEARのインストール画面になるので下部のNEXT>>からインストールに進みます。
Go-PEAR Installer画面に移動してPEARをインストールディレクトリを設定します。上記で設定したディレクトリを$prefixとして各ディレクトリを作成後に777ぐらいのパーミッションを与えます。

Package Managementから必要なライブラリーをインストールします。私の場合はHTTP_OAuthをインストールしたかったのでフォームの入力フィールドにHTTP_OAuthを入力してinstallボタンを押します。forceにチェックを入れないとチャンネルの設定ができてない的なエラーになってインストールできなかったのでチェックを入れます。


pear_add_install_http

インクルードパスの設定

インクルードパスとは、phpの関数を呼び出す際にあらかじめパスを設定しておいて、いちいちフルパスとか相対パスとかで関数が記述してあるファイルを呼び出さないようにするような設定です。phpで標準の関数を書く際にphpinfo();とか直接書けて動いてしまうのはインクルードパスのおかげです。PHPはデフォルトで/usr/local/php5.3/phpのようなインクルードパスを標準で装備しています。(というか、装備してないと厄介です。)
で、このインクルードパスは複数設定できるので、PEARをアップロードしたディレクトリを追加します。そうすることで、システム側がインクルードパス内から自動的にファイルを探してくれます。
インクルードパスの設定方法は大きく分けて3つあります。

  1. php.iniに記述する。
  2. php.iniにphp_valueやphp_flagがOnになっている際に、.htaccessに設定する。
  3. 該当のphpファイルそのものに記述する。

上から順番に、「WEBサーバー全体に設定」「ディレクトリごとに設定」「ファイルごとに設定」という風になっていて、自分が便利な方法で設定すればよいと思いますが、php.iniに設定できる場合はそれが一番いいです。
ですが、ロリポは少々厄介です。自分のサーバーでは数秒で終わった作業がロリポでは結構ハマりました。まずPHP5.3にバージョンを上げた場合はインクルードパスの設定が容易ではありません。
まず、先のGo-PEAR Installerを設定した場所にpath.incというようなファイルを作成します。

/home/users/1/lolipop.jp-xxxx/web/pearlib/path.inc

その中にPEARの設置ディレクトリをインクルードパスとして設定します。

<?php ini_set('include_path', '.:/home/users/1/lolipop.jp-xxxx/web/pearlib/PEAR'); ?>

lolipop_php_ini_ctrlそれからロリポップのユーザーコントロールパネルの「WEBツール」→「PHP設定」と行って、php.iniの簡易設定の画面を開きます。この項目で下部のauto_prepend_fileの欄に先ほどのpath.incがあるフルパスを書きます。つまりauto_prepend_fileで示したファイルにPEARが存在する場所を書いておいてインクルードする用意をしてくれるということになります。ややこしいです。
これで、PEARのインクルードの設定は終わりなのですが、PHPファイル中にもインクルードパスを設定しないと動きませんでした。
PEARを利用するPHPファイルの先頭に、

ini_set("include_path", ".:/home/users/1/lolipop.jp-xxxx/web/pearlib/PEAR/");

を書かないとライブラリーを読み込んでくれませんでした。
なんともややこしいです。


*1 風柳メモさんのところにあるようにdownload_url()がリダイレクトに未対応なので途中で止まってしまいます。修正版があるのでこっちを使います。

コメントを残す

メールアドレスが公開されることはありません。 * が付いている欄は必須項目です