ドメインキングでPEARを使う

 年間100円につられて契約したドメインキング。自分にとってサイト構築にはPEARが不可欠。まずはそれを解決せねばなるまい。まず、その結果だけどちょっと手間は必要だけど、問題なく動作はできた。以下、その手順。





 以前、XREAでやったのがこれ。
 XREAでPEARを使う: point of view pointはてなブックマーク - XREAでPEARを使う: point of view point
 この方法でCORESERVERも問題なくやってきた。では、ドメインキングではどうか?
 ドメインキングでは、外部からアクセスできるところ以外にはファイルが設置できないようだ(FTPでアップロードできない)。プログラムからアクセスできるphpコードは、外からもアクセスできる場所におかなくてはならない模様。でもって、複数のサブドメインをドメインキングで運用しようとした場合、1つのスクリプトを複数のサブドメインでは共用できないっていう感じ。
 サーバー上のパスは、登録したドメインとサブドメインがexample.com、sub1だとすると、
 /var/www/vhosts/example.com/subdomains/sub1/httpdocs/
 となる。PHPでPEARのパスを指定する場合には、上記ディレクトリ以下に設置した上で行う。FTPクライアントから見えるパスは
 /subdomains/sub1/httpdocs
 といった具合になる。sub1の部分がサブドメインのホストに当たる部分(この表現、自信なし)。sub1.example.comっていう感じで外部からアクセスすることになる。
 PEARのファイルは、ローカルPC上のXAMPPからコピーする。更新などもローカルPCで行い、更新結果をドメインキングのサーバーにアップロードする。このほうが考えることが少なくて済む。たぶん。PEARのライブラリは、FTPクライアントで以下のディレクトリを作って、そこにコピー。
 /subdomains/sub1/httpdocs/pear/
 今回は必要なもののみ。CORESERVERとかだと1度コピーしてしまえば、複数のサブドメインから共用できるのだけど、ドメインキングではそれが不可能っぽい(別のサブドメイン用のディレクトリを指定するとファイルがないって言われる)ので、サブドメインごとにコピーすることになる。複数の場所に同じファイルが配置されることになることを考えると、PEAR以下全部をコピーするには容量がもったいない(今回は5GBの契約なのだ)のと、メンテナンス的にも不安があったので。把握しやすいようにという配慮から。PagerとかCacheとか、ディレクトリごとコピー。これなら最小限。たぶん。
 で、コピーしたPEARライブラリを、自分のプログラムから参照する場合にはいくつかの方法がある。CORESERVERでやっていたのはこんな感じ。
 ini_set(‘include_path’, ‘PEARを配置した絶対ディレクトリ’ . PATH_SEPARATOR . ini_get(‘include_path’));
 なんかあった場合にまたCORESERVERに戻すことも考えて、CORESERVER用の記述とドメインキング用の記述両方を書いておこうと思ったのだ。これだとドメインキングで運用時、CORESERVER用に記述されたパスも見に行くことになるけど、そのロスはさほどでもなく、そして、動作に問題はない。
 とはいえ、存在しないパスをサーチしてしまうのもなんか気分的にいやだし、保守する際のことを考えてもちょっと気分的に問題あり。スクリプトごとにこれを記述するのか? とかいう点から。
 ということで、.htaccessに書く方法をとることに。
 php_value include_path “.:/var/www/vhosts/example.com/subdomains/sub1/httpdocs/pear”
 ドキュメントルートに配置した.htaccessにこれを追加する。これだけでOK。元からあるスクリプトはそのままでいける。ナイス。参考にしたのはこれ。【 ほでなすPHP 】 PHPのインストール -> 「.htaccess」ファイルでの設定はてなブックマーク - 【 ほでなすPHP 】 PHPのインストール -> 「.htaccess」ファイルでの設定” title=”はてなブックマーク – 【 ほでなすPHP 】 PHPのインストール -> 「.htaccess」ファイルでの設定” style=”border:none” /></a><br />
 でもって、もう1つ問題が出た。警告が表示されてしまうのだ。「Notice Undefined index」とかいうやつ。これはApacheの設定がドメインキングとCORESERVERで異なるため。宣言してない変数を使おうとしてるからで、これをいちいち直していくのが最善とはわかりつつ、それをやるには時間がかかる。それが済むまで短時間といえども稼動しているサービスに警告が出てるのはなんとも問題がある。ということで、これも.htaccessで対処。<br />
 php_value error_reporting 6133<br />
 これを追加する。参考にしたのはこれ。<a href=.htaccess で error_reporting を設定するときの注意点 | Sun Limited Mt.はてなブックマーク - .htaccess で error_reporting を設定するときの注意点 | Sun Limited Mt.
 とりあえず、ここまでやれば、従来通りの方法でコンテンツの作成・更新ができるはず。
 残った問題といえば、PHPのバージョンが5.1系という、WordPressから見放されたバージョンのままであるということだ。さて。WordPressはこのサーバーで使わないからいいか、とか思ってたんだけど、やっぱり使いたくなってしまったんだよなあ。うーむ。ドメインキングのレンタルサーバー契約、サブドメインの引越しで悩む話はてなブックマーク - ドメインキングのレンタルサーバー契約、サブドメインの引越しで悩む話: point of view pointの続きでした。

コメント

  1. ひまあーと より:

    不躾ではございますがこの記事に関して質問させていただきたくコメントいたしました。

    以前からWordpressのプラグイン「CS SHOP」というのを用いて商品等の表示を行っておりました。

    サーバーはドメインキングを使用しており、Wordpressのバージョンは4.9です。

    PHPのバージョン5.6の頃には正常に動作していたものの、7.0にアップデートしたところ動作しない(このプラグインを使って表示している場所以降が表示されない)ようになってしまいました。

    デバッグモードにしてエラー内容を確認したところ

    Notice: Undefined index: args in /var/www/vhosts/example.com/httpdocs/wp-includes/functions.php on line 5149

    Warning: require_once(): open_basedir restriction in effect. File(/usr/local/php70/share/pear/Cache/Lite.php) is not within the allowed path(s): (/var/www/vhosts/example.com/:/tmp/) in /var/www/vhosts/example.com/httpdocs/wp-content/plugins/cs-shop/service-base.php on line 16

    Notice: Undefined index: args in /var/www/vhosts/example.com/httpdocs/wp-includes/functions.php on line 5149

    Warning: require_once(/usr/local/php70/share/pear/Cache/Lite.php): failed to open stream: Operation not permitted in /var/www/vhosts/example.com/httpdocs/wp-content/plugins/cs-shop/service-base.php on line 16

    Fatal error: require_once(): Failed opening required ‘Cache/Lite.php’ (include_path=’.:/usr/local/php70/share/pear’) in /var/www/vhosts/example.com/httpdocs/wp-content/plugins/cs-shop/service-base.php on line 16

    恐らくこちらの記事で取り上げられているPEARに関する問題だとは思われますが、PHPやサーバーの知識に乏しいため改善できずにおります。

    つきましては、お分かりになる範囲で結構ですので解消方法等ご存知でしたらお教えいただきたく思います。

    突然のコメント、しかも不躾な質問で申し訳ありませんがよろしくお願いいたします。

  2. ここの人 より:

    しばらくチェックしておらず、返事が遅れました。残念ですが、すでにドメインキングを使っていないのでわかりません。

    と、書こうとしたところ、すでに解決したようで。

    あと、書き込みいただいたエラーメッセージなどに個人情報につながりそうな部分がありましたので、変換しておきました。