質問: レンタル共用サーバーのロリポップにPEARをインストールしてユーザー認証をしたいです。 ------------------------------------------- ロリポップとしてもPEARはインストールしてあるようですが、Authなどパッケージは権限が無くてインストールできません。 そこでここのサイトを参考にして自分のWebルート以下に入れる方法をとってみました。 PHP.iniは変更できないので、PEARインストール時にphp.iniのインストール操作はNoで進めました。 PEARはsshでphp go-pear.pharで行っています。 インストール構成 /ROOT/web/PEAR内にインストール。 その中にbin, cfg, data, docs, man, share, tests, wwwディレクトリです。 ロリポップの場合、インクルードさせるにはファイルを書いてその中に、インクルードパスを記述。 そのファイルを管理画面からauto_prepend_fileに指定する。 ``` ## path.incとして下記を記述。 ``` path.incをauto_prepend_fileに指定。 phpinfo()を見ると、 | Directive | Local Value | Master | | --- | --- | --- | | auto_prepend_file | /ROOT/path.inc | /ROOT/path.inc | | include_path | .:/ROOT/PEAR | .:/usr/local/php/7.3/lib/php | となってます。 #### 実行 試しにサイトからの借り物です。 ``` "; echo ""; echo ""; echo ""; echo ""; } ?> ``` 上記を実行すると、500エラーになってしまいます。 require_once行を抜けば実行。 * つまりパスが通ってないのか? * そもそもPEAR自体に問題があるのか? ロリポップは複数バージョンのPHPがありますが、それぞれの下にPEARが公式にインストール済み。 include_pathにある「/usr/local/php/phpバージョン/lib/php/」以下。 ここでインクルードしているのと、/ROOT/PEARをインクルードしていることでバッティング的なことが起きているのでしょうか? インクルードパス自体がおかしい? ``` ## path.inc ``` とすればinclude_pathのローカル側でも2箇所バスが通りますよね? と何も考えずにやってみましたが、これも変化無し。 ### 疑問 自分のWebルート以下にインストールしたPEAR。 これに対するパスはどこを指定すべきでしょうか? 今はPEARが入っている親ディレクトリ。それを例えばbinにする? binやshare/pearなどパスを変えてみましたが、実行できず。 参考にしたサイトはPHP5.3で実行しているようですが、 PHP7系のロリポップではPEARは使えないのでしょうか? PHPで認証機能を持たせたいのですが、 PEARに代わるものってあるのでしょうか? よろしくお願いします。 ※ちなみにロリポップはBASIC認証のみでDigest認証は使えません。 ##### 環境 CentOS(バージョン非公表)、Apache、PHPは7.1と7.3で試してみました。 契約プラン:エンタープライズ
回答: 私はauto_prepend_fileの項目を空白にして一旦インクルードを止める。 その上で下記を実行してPEARのインストール状況を確認。 ※参考サイト ``` require_once 'PEAR/Config.php'; require_once 'PEAR/Registry.php'; $config = new PEAR_Config(); $reg = new PEAR_Registry($config->get('php_dir')); $packages = $reg->listPackages(); foreach($packages as $value) { echo $value.""; } ``` 上記を実行すると下記が返ってきます。 ``` console_getopt pear archive_tar structures_graph xml_util ``` 次にauto_prepend_file にpath.incを指定し自前PEARをインクルードさせます。 すると空白。 require_onceをフルパスにしても、どのようにしても空白です。 このテスト実行ファイルはドメインルート内に置いて実行しており、 最初の投稿のPHPINFOの内容も同じドメイン内に置いて実行しています。 PEARの場所をうまく指定できてないのでしょうか?