人力検索はてな
モバイル版を表示しています。PC版はこちら
i-mobile

レンタルサーバーにプリインストールの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を
利用するにはどうすれば良いのでしょうか?

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

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


●質問者: gelgelgel
●カテゴリ:インターネット ウェブ制作
✍キーワード:HOME LIB ON Pear PHP
○ 状態 :終了
└ 回答数 : 3/3件

▽最新の回答へ

1 ● palo
●100ポイント

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

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

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

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

◎質問者からの返答

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

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

頂いたコードの後に

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

include 'mailConfig.php';

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

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

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

宜しくお願いします。


2 ● seidai3
●10ポイント

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

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

◎質問者からの返答

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

>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();

}

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

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

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


3 ● seidai3
●100ポイント ベストアンサー

>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

◎質問者からの返答

seidai3さん

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

>>Smartyで構築していて〜

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

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

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

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

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

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

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

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

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

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

関連質問


●質問をもっと探す●



0.人力検索はてなトップ
8.このページを友達に紹介
9.このページの先頭へ
対応機種一覧
お問い合わせ
ヘルプ/お知らせ
ログイン
無料ユーザー登録
はてなトップ