🎄teratailクリスマスプレゼントキャンペーン2024🎄』開催中!

\teratail特別グッズやAmazonギフトカード最大2,000円分が当たる!/

詳細はこちら
PEAR

PEAR (PHP Extension and Application Repository)はPHPで利用する事ができるライブラリです。

Q&A

1回答

2960閲覧

ロリポップでPEARのインクルードの方法

退会済みユーザー

退会済みユーザー

総合スコア0

PEAR

PEAR (PHP Extension and Application Repository)はPHPで利用する事ができるライブラリです。

0グッド

1クリップ

投稿2019/10/25 10:40

レンタル共用サーバーのロリポップに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()を見ると、

DirectiveLocal ValueMaster
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で試してみました。
契約プラン:エンタープライズ

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

guest

回答1

0

私は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."<br>"; }

上記を実行すると下記が返ってきます。

console_getopt pear archive_tar structures_graph xml_util

次にauto_prepend_file にpath.incを指定し自前PEARをインクルードさせます。
すると空白。
require_onceをフルパスにしても、どのようにしても空白です。

このテスト実行ファイルはドメインルート内に置いて実行しており、
最初の投稿のPHPINFOの内容も同じドメイン内に置いて実行しています。
PEARの場所をうまく指定できてないのでしょうか?

投稿2019/10/29 02:00

退会済みユーザー

退会済みユーザー

総合スコア0

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

まだベストアンサーが選ばれていません

会員登録して回答してみよう

アカウントをお持ちの方は

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.36%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問