PEARのインストール後のインクルード パスの設定について - PHPプロ!Q&A掲示板

2243

  • 0P

PEARのインストール後のインクルード パスの設定について

質問日時 / 2009年8月31日 22:16    回答数 / 16件

Questioner:  takuzo03  このエントリーをはてなブックマークに追加 

キーワード / PEAR    インクルード パス   

PEARのインストール後のインクルード パスの設定がわかりません。

実行するPHPファイルにパスを記述しているのですが

Warning: require_once(XML/Feed/Parser.php) [function.require-once]: failed to open stream: No such file or directory in /home/takuzo/public_html/php/2/rss.php on line 8

Fatal error: require_once() [function.require]: Failed opening required 'XML/Feed/Parser.php' (include_path='pear_install/PEAR:.:/usr/local/php5/pear') in /home/takuzo/public_html/php/2/rss.php on line 8

というエラーが出ます。

記述の仕方などアドバイスをよろしくお願いします。

パス自体が違うのかも知れませんし、ファイルの書き方が違うのかも知れません。


よろしくお願いいたします。

この質問への意見の募集は締め切られ、ポイントは既に配分されました。
意見を投稿することはできますが、ポイントを受け取ることはできません。



ツリー一覧

┣A01kaitauphp.iniの設定を疑ってみる場合で書いておきます。
┗A02shimix気になるのは・・ >include_path='pear_install/PE
 ┗A02-1takuzo03アドバイスありがとうございます。大変助かってます。
  ┣A02-1-1shimixphp.iniのpathはphpinfo()の出力結果に「Loaded Confi
  ┗A02-1-2takuzo03PHP.iniですが phpinfoで調べたところ Configurat
   ┗A02-1-2-1shimix>user/localというのがFFFTPでは見つからないのでどこ
    ┣A02-1-2-1-1takuzo03アドバイスありがとうございます。 ご察しのとおり
    ┗A02-1-2-1-2takuzo03お世話になってます。 ホスティング会社に聞いたと
     ┗A02-1-2-1-2-1shimix><?php > >set_include_path(get_include_path() .
      ┗A02-1-2-1-2-1-1takuzo03大変助かってます。本当にありがとうございます。
       ┗A02-1-2-1-2-1-1-1shimix>そもそもPATH_SEPARATOR とは何でしょうか? path
        ┗A02-1-2-1-2-1-1-1-1kaitau>> $pathはパラメータでしょうか? PEARをインストー
         ┗A02-1-2-1-2-1-1-1-1-1shimix>> shimix さん >質問者の方の7,8ほど前のレス(ht
          ┗A02-1-2-1-2-1-1-1-1-1-1takuzo03お世話になっております。 インストールはマニュア
           ┗A02-1-2-1-2-1-1-1-1-1-1-1shimix>Note: To use PEAR without any problems you need t
            ┗A02-1-2-1-2-1-1-1-1-1-1-1-1takuzo03超亀レスですみません。体調を崩しておりました。

回答一覧

並び替え:

A01
answererkaitau [9月1日 09:30] (最終編集:9月1日 09:34)

php.iniの設定を疑ってみる場合で書いておきます。

一般的な方法でパッケージをインストールしたのであれば、

require_once 'XML/Feed/Parser.php';
と記述するのは間違いではありません。

require や require_once などで指定されたファイルを探す先には、
基本的には、php.ini に記述されたinclude_pathの記述によります。

この記述は、たしかpearそのものインストールの時に
更新されているはず(うろおぼえ)なので、例えば
1.pearのインストール時に更新したphp.iniと、
 質問で実行されたphpが読み込んでいるphp.ini(若しくはその設定)が違う
2.pearのインストール時にphp.iniの更新が正しくおこなわれなかった
3.pearのインストール後にphp.iniの該当の記述を間違った値で上書きした
などがあるかもしれません。

もし、pearのパッケージのインストールをコンソールから出来たのなら、
同様にコンソール上の操作で
$ pear config-get php_dir
と打てば、pearのパッケージがどこの下に格納されているはずかわかるので、
その場所がphpinfo() で確認できるinclude_pathの設定と同じか
確認してみてください。
(unix系のOSの場合、incude_path では : 区切りで複数ののディレクトリが列挙されています)

この意見に回答する

ツリーへ TOPへ

A02
answerershimix [9月1日 09:45]

気になるのは・・

>include_path='pear_install/PEAR:.:/usr/local/php5/pear'

・pear_install/PEARとは?(フルパスで記述されていないし・・)
・/usr/local/php5/pearの下にXML/Feed/Parser.phpがあるのかどうか

というあたりでしょうか?どこにインストール{した|されている}のか確認してみてください。

この意見に回答する

ツリーへ TOPへ

A02-1
replyertakuzo03 [9月1日 14:35] (最終編集:9月1日 14:36)

アドバイスありがとうございます。大変助かってます。

PEAR自体はFTPを使ってサーバーにgo-PEAR.phpなるファイルを置き
サーバーにpear_installというフォルダを作ってそこにインストールしました。
ライブラリはpear_installの下にあるindex.phpをブラウザで開き
パッケージマネージャーによりXML_Feed_Parserをインストールしました。

ライブラリがどこにインストールしているかは定かではありませんが
どうしたら調べられるでしょうか?

またphp.iniは記述されていないのではないかと思うのですが
これはどこを参照すれば良いのでしょうか?

あと、phpファイルへのインクルードパスの設定は、(php.iniに記述しない場合)
自分が使用したいすべてのphpファイルに記述するということでしょうか?
ちなみにレンタルサーバーなのでphp.iniはいじることができないかもしれません。


何卒よろしくお願いいたします。

この意見に回答する

ツリーへ TOPへ

A02-1-1 参考になった
replyershimix [9月1日 14:41]

php.iniのpathはphpinfo()の出力結果に「Loaded Configuration File」とかで表示されてませんか?

何にしても「pear_install/PEAR」の下にpearのファイルがあるのであれば、include_pathにはフルパスで記述していないとマズイんじゃないですかね。

#findでも何でも使って探してみればいいと思うのですが・・

この意見に回答する

ツリーへ TOPへ

A02-1-2
replyertakuzo03 [9月1日 14:57] (最終編集:9月1日 15:00)

PHP.iniですが

phpinfoで調べたところ
Configuration File (php.ini) Path  /usr/local/php5/etc  
Loaded Configuration File  /usr/local/php5/etc/php.ini  

にあるみたいです。

user/localというのがFFFTPでは見つからないのでどこにあるのかわからないです。

あとPEAR infoを起動させて見ましたが、

Warning: require_once(PEAR/Info.php) [function.require-once]: failed to open stream: No such file or directory in /home/takuzo/public_html/php/pear_info.php on line 2

Fatal error: require_once() [function.require]: Failed opening required 'PEAR/Info.php' (include_path='.:/usr/local/php5/pear') in /home/takuzo/public_html/php/pear_info.php on line 2

というエラーが帰ってきました。


よろしくお願いいたします。

この意見に回答する

ツリーへ TOPへ

A02-1-2-1 参考になった
replyershimix [9月1日 15:15] (最終編集:9月1日 15:17)

>user/localというのがFFFTPでは見つからないのでどこにあるのかわからないです。

えっと。。ひょっとしてレンタルサーバか何かでしょうか?であれば/usr/localへはアクセス出来ません。インストールしたPEARは多分「/home/takuzo/」の下じゃないかと思いますが・・。

#というか『共用』サーバなら共通のphp.iniを触るべきではないですね。

サーバによってはユーザーのDocumentRootにphp.iniを置いて有効に出来たり、.htaccessに書いて有効に出来たり、ini_set(もしくはset_include_path)で指定したりということになります(この順番で設定が楽ですかねぇ)。php.iniが置けるのか、.htaccessで指定可能なのか・・を確認してください。どちらも無理なら面倒ですがスクリプトで(毎回)ini_setを使って指定することになります。


(ex.)
もしsakuraなら、サーバのコンパネのphp設定の編集で(自分用の)php.iniが作れますから

  include_path=".:/home/takuzo/pear/php"

とか記述してやればいいですね(DocumentRoot直下にphp.iniが作成されて有効になります>sakura)。

この意見に回答する

ツリーへ TOPへ

A02-1-2-1-1
replyertakuzo03 [9月1日 15:55]

アドバイスありがとうございます。

ご察しのとおりレンタルサーバーで共用のものです。
残念ながらさくらではなく、カゴヤとGMOのものです。
php.iniの設定については現在確認してます。

>サーバによってはユーザーのDocumentRootにphp.iniを置いて有効に出来たり、.htaccessに書いて有効に出来たり、ini_set(もしくはset_include_path)で指定したりということになります(この順番で設定が楽ですかねぇ)。php.iniが置けるのか、.htaccessで指定可能なのか・・を確認してください。どちらも無理なら面倒ですがスクリプトで(毎回)ini_setを使って指定することになります。


とのことですが スクリプトでini_setを使う場合は phpファイルの冒頭に記述すればよろしいのでしょうか?


よろしくお願いいたします。

この意見に回答する

ツリーへ TOPへ

A02-1-2-1-2
replyertakuzo03 [9月2日 08:33]

お世話になってます。

ホスティング会社に聞いたところ php.iniの変更はNGとのことでした。

PEAR_infoの起動に

<?php 

set_include_path(get_include_path() . PATH_SEPARATOR . $path); 


require_once "PEAR/Info.php";

$info =& new PEAR_Info();
$info->show();

?>
というスクリプトを書いたのですが、
Warning: require_once(PEAR/Info.php) [function.require-once]: failed to open stream: No such file or directory in /home/takuzo/public_html/php/pear_info.php on line 6

Fatal error: require_once() [function.require]: Failed opening required 'PEAR/Info.php' (include_path='.:/usr/local/php5/pear:') in /home/takuzo/public_html/php/pear_info.php on line 6

というエラーがでました。

PHP.Infoにも

include_pathが.:/usr/local/php5/pear:という風にかかれているのですが

書き方か何か間違っているのでしょうか?

確かにPEARはインストールされているのですが。。


よろしくお願いいたします。

この意見に回答する

ツリーへ TOPへ

A02-1-2-1-2-1 参考になった
replyershimix [9月2日 09:28]

><?php 
>
>set_include_path(get_include_path() . PATH_SEPARATOR . $path); 

今現在のinclude_pathに$pathを追加・・ですよね。$pathの中身はどうなっているんでしょう。pearをインストールしたパスが(フルパスで)書かれているのであれば問題ないですけど、そうは読めません(汗

おそらくインストールしたのは「ご自分のディレクトリ」だと思いますが、ftpで繋いだときにpearのインストール先がありませんか?ないようでしたらSSHで入ったときの位置を確認してください。sakuraだと前述の位置でOKなんですがお使いのサーバについては存じかねますので。



ちなみにset_include_pathで設定するので(php.iniや.htaccessで設定出来ないので)、単に『phpinfo()だけ』書いたスクリプトでは設定後のinclude_pathは表示されなくて正解です。

#「設定されてないからset_include_pathを使う」ともいう。

この意見に回答する

ツリーへ TOPへ

A02-1-2-1-2-1-1
replyertakuzo03 [9月4日 00:38]

大変助かってます。本当にありがとうございます。

PATH_SEPARATOR . $pathの中身がよくわからなくて。。

そもそもPATH_SEPARATOR とは何でしょうか?

$pathはパラメータでしょうか?

すみません。。本当に初心者なもので。

自分でもインストール先はPEAR_installの下にあるPEARフォルダなんだろうと
思うのですが#FINDのコマンドはどのように使えば良いのでしょうか?


よろしくお願いいたします。

この意見に回答する

ツリーへ TOPへ

A02-1-2-1-2-1-1-1
replyershimix [9月4日 08:28]

>そもそもPATH_SEPARATOR とは何でしょうか?

pathの区切り(そのまんまだ)。pathを複数記述するときに区切る文字。普通はコロン(:)ですが、システムによって違いがあるかもしれないのでphp側で定数として持っています。PHP_EOLなどもそうですね。

  http://www.php.net/manual/ja/reserved.constants.php

というか、それがわかっていないと

>set_include_path(get_include_path() . PATH_SEPARATOR . $path); 

がどう展開されるか机上デバッグが出来ないと思うのですが。まぁ、動かしてから「ダメだ」ということになったんでしょうけど、どうせ動かして確認するなら

>print "bofore:" . get_include_path() . "<br>" . PHP_EOL;
>set_include_path(get_include_path() . PATH_SEPARATOR . $path); 
>print "after:" . get_include_path() . "<br>" . PHP_EOL;

とか書いた方がよかったでしょうね。

>自分でもインストール先はPEAR_installの下にあるPEARフォルダなんだろうと
>思うのですが

インストールはsshか何かで入って実行されたんですよね?もう一度sshで入って確認すればいいんじゃないでしょうか。cdとかlsは使えますよね(findの使い方だって検索すればたくさん出てくると思いますが・・)。

いずれにしても、$pathには「pear_install/PEAR」をフルパス(/home/takuzo/pear_install/PEARとか)で書かないといけませんので

この意見に回答する

ツリーへ TOPへ

A02-1-2-1-2-1-1-1-1
replyerkaitau [9月4日 10:41]

>> $pathはパラメータでしょうか?
PEARをインストールしたディレクトリをフルパス名で入れなければいけないです。

PEARパッケージマネージャで入れたんでしたっけ。
Webのインターフェイスのアレですか?

その場合は、
1. Installation prefix ($prefix)
に入れたパス名に /PEAR を追加してください。

例えば、prefixに /var/www/~takuzo03 
って入れてたら、
/var/www/~takuzo03/PEAR

prefixが /home/~takuzo03/lib
だったら、
/home/~takuzo03/lib/PEAR
みたくなると思います。


> shimix さん
質問者の方の7,8ほど前のレス(http://www.phppro.jp/qa/2243#9038)のレスを参照すると、
http://pear.php.net/manual/en/installation.getting.php#installation.getting.hosted
のやり方で入れてるんじゃないかと思います。
おそらくsshではやっていないのではないかと・・・。(実際に入れるかどうかは知りませんが)

この意見に回答する

ツリーへ TOPへ

A02-1-2-1-2-1-1-1-1-1
replyershimix [9月4日 11:03]

>> shimix さん
>質問者の方の7,8ほど前のレス(http://www.phppro.jp/qa/2243#9038)のレスを参照すると、
>http://pear.php.net/manual/en/installation.getting.php#installation.getting.hosted
>のやり方で入れてるんじゃないかと思います。

あぁ、そうでした。失念してましたね。

それならそれで(というか、そうでなくても自分のサーバ領域なら)FTPで繋いでも見えるような気がしますね。とりあえずFTPでサーバ側を探してみるとか>質問者さん。

この意見に回答する

ツリーへ TOPへ

A02-1-2-1-2-1-1-1-1-1-1
replyertakuzo03 [9月4日 17:49]

お世話になっております。

インストールはマニュアルにそってやってます。

SSHではなくFTPを使ってます。どちらでも問題ないと思うのですが。。

パスの設定ミスなのかコマンドの書き方がまちがっているのかわかりせん。

PHPは初心者なのでコマンドもよくわかりません。しばらくプログラムも書いていなかったので
困っているのですが、とりあえず色んなサンプルコードを動かしながら構文でも
覚えてカスタマイズしていこうかなあと思っていたので。。
ライブラリも入れて色々やってみようかと思っていたところでした。
 
再度別のサーバーにインストールをしたところ 


Note: To use PEAR without any problems you need to add your
PEAR Installation path (/export/sd02/www/jp/r/e/gmoserver/2/4/sd0067824/mbgm.jp/pear_install/PEAR)
to your include_path.

という結果が出てきました。


/export/sd02/www/jp/r/e/gmoserver/2/4/sd0067824/mbgm.jp/pear_install/PEAR

がパスになるのでしょうか?


また 再度

ini_set('include_path', '/export/sd02/www/jp/r/e/gmoserver/2/4/sd0067824/mbgm.jp/pear_install/PEAR' .PATH_SEPARATOR . ini_get('include_path'));

と書いてみたのですがエラーになりました。


アドバイスよろしくお願いいたします。

この意見に回答する

ツリーへ TOPへ

A02-1-2-1-2-1-1-1-1-1-1-1
replyershimix [9月4日 22:04]

>Note: To use PEAR without any problems you need to add your
>PEAR Installation path (/export/sd02/www/jp/r/e/gmoserver/2/4/sd0067824/mbgm.jp/pear_install/PEAR)
>to your include_path.

ドメインを邪推して、/pear_install/PEAR/HTML/Template/IT.phpにアクセスしてみました(汗

requireはエラーになりますが、IT.phpが存在する(404エラーにならない)ということは「/export/sd02/www/jp/r/e/gmoserver/2/4/sd0067824/mbgm.jp/pear_install/PEAR」で間違いないですね。FTPでも確認できるハズです。インストール時にdefaultのままで実行すればgo-pear.phpを実行した位置にPEARディレクトリが作成されますし・・。

  1. $path = '/export/sd02/www/jp/r/e/gmoserver/2/4/sd0067824/mbgm.jp/pear_install/PEAR';
  2. set_include_path(get_include_path() . PATH_SEPARATOR . $path);

で問題ないハズですが、エラーメッセージは以前と同じですか?

この意見に回答する

ツリーへ TOPへ

A02-1-2-1-2-1-1-1-1-1-1-1-1
replyertakuzo03 [9月30日 13:31]

超亀レスですみません。体調を崩しておりました。

教えていただいたように次のスクリプトを記述してみました。

<?php 
$path = '/export/sd02/www/jp/r/e/gmoserver/2/4/sd0067824/mbgm.jp/pear_install/PEAR';
set_include_path(get_include_path() . PATH_SEPARATOR . $path);


require_once "PEAR/Info.php";

$info =& new PEAR_Info();
$info->show();

?>

PEAR_info.phpというファイルをサーバーにおいてブラウザで起動してみたところ



Warning: require_once(PEAR/Info.php) [function.require-once]: failed to open stream: No such file or directory in /export/sd02/www/jp/r/e/gmoserver/2/4/sd0067824/mbgm.jp/php/pear_info.php on line 6

Fatal error: require_once() [function.require]: Failed opening required 'PEAR/Info.php' (include_path='.::/export/sd02/www/jp/r/e/gmoserver/2/4/sd0067824/mbgm.jp/pear_install/PEAR') in /export/sd02/www/jp/r/e/gmoserver/2/4/sd0067824/mbgm.jp/php/pear_info.php on line 6


というエラーが出ました。

パスの書き方に問題があるのでしょうか?

例えば
'/export/sd02/www/jp/r/e/gmoserver/2/4/sd0067824/mbgm.jp/pear_install/PEAR'

のどこかに半角あけるとか

そういうのはありますでしょうか?


よろしくお願いいたします。

この意見に回答する

ツリーへ TOPへ

<<質問一覧へ



Pick Up Q&A

Q
ログファイルの中の空のデータ行を削除したい
 このエントリーをはてなブックマークに追加 
A
ログのデータ個数(列数)が固定で、空のログが"<><><>"だと既知であれば if ($line === "<><><>") { continue; } で読み飛ばしてもいいのでは? ...

>>続きを読む

まずは配列や文字列の扱いから、じっくり勉強して行きましょう。

▲解説者:岡本(アシアル株式会社 教育コーディネーター兼 システムエンジニア)

Q&A掲示板 新着情報