新たに自分でインストールした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を
利用するにはどうすれば良いのでしょうか?
※ちなみに上記エラー部分を削除しても他のエラーが出て解決しませんでした。
ご教授のほど宜しくお願いします。
>Smartyで構築していて〜
そういった情報は、最初に出して頂いた方が・・・
ini_set()で変更される"include_path"より前に、変更前の"include_path"が何処かで使用されてプリインストールのPEARが既に読み込まれているって事ではないでしょうか?
全てのプログラムファイルの中で一番最初に実行されるファイルの先頭でini_set(〜);を入れてから実行しても同じでしょうか?
だめなら、現実的ではありませんが、実行される全てのプログラムファイルの中でファイルがincludeされる前にini_set(〜);の一文を入れないと意味が無いかもしれません。
php.iniか.httpaccessファイルにinculde_pahtの設定を書いた方が手っ取り早いとは思いますが。。。
共存させることを考えるよりも、
自前でインストールしたPEARだけを参照する方が簡単なのではないでしょうか。
ini_set("include_path", '.:/home/xxxxx/public_html/PEAR');
http://pear.php.net/manual/ja/ (URLはダミーです)
の後で phpinfo() を呼んで、
include_path の値を確認してはどうでしょうか。
サーバーの制限があるのかもしれません。
コメントありがとうございます。
上記やってみたところ
include_path
■Local
/home/to20562/public_html/PEAR
■Master
.:/usr/lib/php:/usr/local/lib/php
となっていました。
一応正常に設定は出来ているのでしょうか?
でも下のエラーのファイルはどこでインクルードされているんでしょうか?
→(previously declared in /opt/local/lib/php/PEAR.php:804)
コメントありがとうございます。
>include_path は正常にセットされていますね。
>でも下のエラーのファイルはどこでインクルードされているんでしょうか?
>→(previously declared in /opt/local/lib/php/PEAR.php:804)
これは私の方では設定しておりません。
レンタルサーバーの方で設定しているのだと思います。
seidai3さんのアドバイスの通り.htaccessファイルにinculde_pathしたら
正常に動作するようになりました。
御丁寧にありがとうございました。