レンタル共用サーバーのロリポップに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として下記を記述。 <?php ini_set('include_path', '.:/home/users/X/lolipop.jp-YYYY/web/PEAR'); ?>
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 |
となってます。
実行
試しにサイトからの借り物です。
<?php require_once "Auth.php"; // 三つの引数を受け取ります。それぞれ // 直近にログインを試みたユーザ名、認証状態、そして Auth オブジェクトです。 // このシンプルなデモではこれらを使用しませんが、ちゃんとした処理を // 書く際には必要となるでしょう。 function loginFunction($username = null, $status = null, &$auth = null) { /* * HTML出力は、作成するアプリケーションに合うように、 * 変更してください。 */ echo "<form method=\"post\" action=\"test.php\">"; echo "<input type=\"text\" name=\"username\">"; echo "<input type=\"password\" name=\"password\">"; echo "<input type=\"submit\">"; echo "</form>"; } ?>
上記を実行すると、500エラーになってしまいます。
require_once行を抜けば実行。
- つまりパスが通ってないのか?
- そもそもPEAR自体に問題があるのか?
ロリポップは複数バージョンのPHPがありますが、それぞれの下にPEARが公式にインストール済み。
include_pathにある「/usr/local/php/phpバージョン/lib/php/」以下。
ここでインクルードしているのと、/ROOT/PEARをインクルードしていることでバッティング的なことが起きているのでしょうか?
インクルードパス自体がおかしい?
## path.inc <?php ini_set("include_path", ".:/ROOT/PEAR;.:/usr/local/php/phpバージョン/lib/php"); ?>
とすれば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で試してみました。
契約プラン:エンタープライズ
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。