新たに自分でインストールした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はダミーです)
>自前でインストールしたPEARだけを参照する方が簡単なのではないでしょうか。
言葉が間違っていたと思いますがズバリその方法が知りたいのです。
頂いたコードの後に
ini_set("include_path", '.:/home/xxxxxx/public_html/PEAR');
include 'mailConfig.php';
としても同様のエラーがでます。
プリインストールのPEARを無効にするにはどうしたら良いのか、
もう少し具体的にご回答いただけますでしょうか?
宜しくお願いします。
これではどうでしょうか?
ini_set('include_path', '/home/xxxxx/public_html/PEAR');
include 'mailConfig.php';
それとも、実際はもっと長いプログラムで、上の2行よりもっと上の方で”destructors()”関数?が既に読み込まれているとか?
ご回答ありがとうございます。
>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();
}
という表記があるのが関係しているのでしょうか?
(マニュアル本のコピペなので正直あまり意味はわかっておりません)
ちなみに上記消してもエラーは変わりませんでした。
>Smartyで構築していて〜
そういった情報は、最初に出して頂いた方が・・・
ini_set()で変更される"include_path"より前に、変更前の"include_path"が何処かで使用されてプリインストールのPEARが既に読み込まれているって事ではないでしょうか?
全てのプログラムファイルの中で一番最初に実行されるファイルの先頭でini_set(〜);を入れてから実行しても同じでしょうか?
だめなら、現実的ではありませんが、実行される全てのプログラムファイルの中でファイルがincludeされる前にini_set(〜);の一文を入れないと意味が無いかもしれません。
php.iniか.httpaccessファイルにinculde_pahtの設定を書いた方が手っ取り早いとは思いますが。。。
seidai3さん
ご回答ありがとうございます。
>>Smartyで構築していて〜
>そういった情報は、最初に出して頂いた方が・・・
すいません・・。そちらにはPEARの記述を全くしていないので
あまり関係ないかと思っておりました。
PEARについてはデフォルトで使用できる用 サーバー側?で設定しているのだと思います。
>php.iniか.httpaccessファイルにinculde_pahtの設定を書いた方が手っ取り早いとは思いますが。。。
アドバイスの通り.htaccessに記述したら自分のインストールした
ファイルのみ参照できるようになりました!!
今度は業者に設定してもらった「Net_UserAgent_Mobile」が使えなくなってしまったので(笑)
そちらを設定したいと思います。
ありがとうございました。
seidai3さん
ご回答ありがとうございます。
>>Smartyで構築していて〜
>そういった情報は、最初に出して頂いた方が・・・
すいません・・。そちらにはPEARの記述を全くしていないので
あまり関係ないかと思っておりました。
PEARについてはデフォルトで使用できる用 サーバー側?で設定しているのだと思います。
>php.iniか.httpaccessファイルにinculde_pahtの設定を書いた方が手っ取り早いとは思いますが。。。
アドバイスの通り.htaccessに記述したら自分のインストールした
ファイルのみ参照できるようになりました!!
今度は業者に設定してもらった「Net_UserAgent_Mobile」が使えなくなってしまったので(笑)
そちらを設定したいと思います。
ありがとうございました。