レンタルサーバーにプリインストールのPEARと

新たに自分でインストールしたPEARの共存に関する質問です。

PEARのMail_Queueを利用してメルマガ配信を行いたいのですが、
文字化けします。そのためPEARの元ファイルを修正したいのですが、
レンタルサーバーのためその設定を変更できません。

そこで↓参照のうえ自分で新たなPEARをインストールし、

■PEARのインストール
http://zx.jpn.org/b/20060629/14/php/how-to-instal-pear

↓のように読み込んで使おうとすると・・

ini_set("include_path", '/home/xxxxx/public_html/PEAR' . PATH_SEPARATOR . ini_get("include_path"));
include 'mailConfig.php';

↓のようなエラーが出ます。

Fatal error: Cannot redeclare _pear_call_destructors() (previously declared in /opt/local/lib/php/PEAR.php:804) in /home/xxxxx/public_html/PEAR/PEAR.php on line 806

調べたところ「関数の名前が被っている」時に出るエラーのようです。
元からあるPEARとバッティングしているためこのようなエラーが
表示されるのだと思いますが、これを防ぎ新たにインストールしたPEARを
利用するにはどうすれば良いのでしょうか?

※ちなみに上記エラー部分を削除しても他のエラーが出て解決しませんでした。

ご教授のほど宜しくお願いします。

回答の条件
  • URL必須
  • 1人2回まで
  • 登録:2009/12/08 13:56:28
  • 終了:2009/12/11 03:14:30

ベストアンサー

id:seidai3 No.3

まさひぃ回答回数12ベストアンサー獲得回数12009/12/10 23:46:23

ポイント100pt

>Smartyで構築していて〜

そういった情報は、最初に出して頂いた方が・・・

ini_set()で変更される"include_path"より前に、変更前の"include_path"が何処かで使用されてプリインストールのPEARが既に読み込まれているって事ではないでしょうか?

全てのプログラムファイルの中で一番最初に実行されるファイルの先頭でini_set(〜);を入れてから実行しても同じでしょうか?

だめなら、現実的ではありませんが、実行される全てのプログラムファイルの中でファイルがincludeされる前にini_set(〜);の一文を入れないと意味が無いかもしれません。

php.iniか.httpaccessファイルにinculde_pahtの設定を書いた方が手っ取り早いとは思いますが。。。

http://zx.jpn.org/b/20060629/14/php/how-to-instal-pear

id:gelgelgel

seidai3さん

ご回答ありがとうございます。

>>Smartyで構築していて〜

>そういった情報は、最初に出して頂いた方が・・・

すいません・・。そちらにはPEARの記述を全くしていないので

あまり関係ないかと思っておりました。

PEARについてはデフォルトで使用できる用 サーバー側?で設定しているのだと思います。

>php.iniか.httpaccessファイルにinculde_pahtの設定を書いた方が手っ取り早いとは思いますが。。。

アドバイスの通り.htaccessに記述したら自分のインストールした

ファイルのみ参照できるようになりました!!

今度は業者に設定してもらった「Net_UserAgent_Mobile」が使えなくなってしまったので(笑)

そちらを設定したいと思います。

ありがとうございました。

2009/12/11 03:12:11

その他の回答(2件)

id:palo No.1

palo回答回数124ベストアンサー獲得回数142009/12/08 17:15:39

ポイント100pt

共存させることを考えるよりも、

自前でインストールしたPEARだけを参照する方が簡単なのではないでしょうか。

 

ini_set("include_path", '.:/home/xxxxx/public_html/PEAR');

 

http://pear.php.net/manual/ja/ (URLはダミーです)

id:gelgelgel

>自前でインストールしたPEARだけを参照する方が簡単なのではないでしょうか。

言葉が間違っていたと思いますがズバリその方法が知りたいのです。

頂いたコードの後に

ini_set("include_path", '.:/home/xxxxxx/public_html/PEAR');

include 'mailConfig.php';

としても同様のエラーがでます。

プリインストールのPEARを無効にするにはどうしたら良いのか、

もう少し具体的にご回答いただけますでしょうか?

宜しくお願いします。

2009/12/08 20:03:00
id:seidai3 No.2

まさひぃ回答回数12ベストアンサー獲得回数12009/12/09 00:38:59

ポイント10pt

これではどうでしょうか?

ini_set('include_path', '/home/xxxxx/public_html/PEAR');

include 'mailConfig.php';

それとも、実際はもっと長いプログラムで、上の2行よりもっと上の方で”destructors()”関数?が既に読み込まれているとか?

http://zx.jpn.org/b/20060629/14/php/how-to-instal-pear

id:gelgelgel

ご回答ありがとうございます。

>ini_set('include_path', '/home/xxxxx/public_html/PEAR');

>include 'mailConfig.php';

こちらもやってみましたが同様のエラーでした。

Fatal error: Cannot redeclare _pear_call_destructors() (previously declared in /usr/local/lib/php/PEAR.php:804) in /home/xxxxx/public_html/PEAR/PEAR.php on line 806

>それとも、実際はもっと長いプログラムで、上の2行よりもっと上の方で”destructors()”関数?が既に読み込まれているとか?

Smartyで構築していて共通の設定のファイルの中に

public function __destruct(){

$this->_db->disconnect();

}

という表記があるのが関係しているのでしょうか?

(マニュアル本のコピペなので正直あまり意味はわかっておりません)

ちなみに上記消してもエラーは変わりませんでした。

2009/12/10 14:18:45
id:seidai3 No.3

まさひぃ回答回数12ベストアンサー獲得回数12009/12/10 23:46:23ここでベストアンサー

ポイント100pt

>Smartyで構築していて〜

そういった情報は、最初に出して頂いた方が・・・

ini_set()で変更される"include_path"より前に、変更前の"include_path"が何処かで使用されてプリインストールのPEARが既に読み込まれているって事ではないでしょうか?

全てのプログラムファイルの中で一番最初に実行されるファイルの先頭でini_set(〜);を入れてから実行しても同じでしょうか?

だめなら、現実的ではありませんが、実行される全てのプログラムファイルの中でファイルがincludeされる前にini_set(〜);の一文を入れないと意味が無いかもしれません。

php.iniか.httpaccessファイルにinculde_pahtの設定を書いた方が手っ取り早いとは思いますが。。。

http://zx.jpn.org/b/20060629/14/php/how-to-instal-pear

id:gelgelgel

seidai3さん

ご回答ありがとうございます。

>>Smartyで構築していて〜

>そういった情報は、最初に出して頂いた方が・・・

すいません・・。そちらにはPEARの記述を全くしていないので

あまり関係ないかと思っておりました。

PEARについてはデフォルトで使用できる用 サーバー側?で設定しているのだと思います。

>php.iniか.httpaccessファイルにinculde_pahtの設定を書いた方が手っ取り早いとは思いますが。。。

アドバイスの通り.htaccessに記述したら自分のインストールした

ファイルのみ参照できるようになりました!!

今度は業者に設定してもらった「Net_UserAgent_Mobile」が使えなくなってしまったので(笑)

そちらを設定したいと思います。

ありがとうございました。

2009/12/11 03:12:11
  • id:palo
    ini_set("include_path", '…');
    の後で phpinfo() を呼んで、
    include_path の値を確認してはどうでしょうか。
     
    サーバーの制限があるのかもしれません。
  • id:gelgelgel
    paloさん

    コメントありがとうございます。
    上記やってみたところ

    include_path

    ■Local
    /home/to20562/public_html/PEAR

    ■Master
    .:/usr/lib/php:/usr/local/lib/php

    となっていました。
    一応正常に設定は出来ているのでしょうか?
  • id:palo
    include_path は正常にセットされていますね。
    でも下のエラーのファイルはどこでインクルードされているんでしょうか?
    →(previously declared in /opt/local/lib/php/PEAR.php:804)
  • id:gelgelgel
    paloさん

    コメントありがとうございます。

    >include_path は正常にセットされていますね。
    >でも下のエラーのファイルはどこでインクルードされているんでしょうか?
    >→(previously declared in /opt/local/lib/php/PEAR.php:804)

    これは私の方では設定しておりません。
    レンタルサーバーの方で設定しているのだと思います。

    seidai3さんのアドバイスの通り.htaccessファイルにinculde_pathしたら
    正常に動作するようになりました。

    御丁寧にありがとうございました。

この質問への反応(ブックマークコメント)

「あの人に答えてほしい」「この質問はあの人が答えられそう」というときに、回答リクエストを送ってみてましょう。

これ以上回答リクエストを送信することはできません。制限について

絞り込み :
はてなココの「ともだち」を表示します。
回答リクエストを送信したユーザーはいません