2017-01-11 3 views
0

私は継承されたサイトを持っていて、新しいホスティングサイトへの移行後に正常に動作し、新しいSmarty 2.6.3とPHP 5.6にアップグレードしています。今日、私はいくつかのユーザーの苦情の後、サイトから電子メールを受信して​​いない(メンバー登録)後にテストを行っていました。phpMailer関数の新しいSmarty()の致命的なエラー

今日このエラーが発生し始めましたFatal error: Cannot redeclare class Smarty調査の結果、システムには2つの$temp = new Smarty()ステートメントがあることがわかりました。ユーザーがログインするときに呼び出され、phpmailerを使用するクラスEmailerの2番目のステートメントがシステムにあります。

初期のSmartyセットアップ変数を参照しようとすると、エラーが発生します(call to null)。私がemailerですばらしいコードを削除しても、電子メールは呼び出されません。私が言ったように、年間のカップルのための罰金を働いて...先月のコードへの変更はありません...ここで

は、両方のモジュールでSmartyの初期化です:Smartyのための

// Setup.php 
require('../Smarty-2.6.30/libs/Smarty.class.php'); 
$_TEMP = new Smarty(); 

class Emailer {... 
require('../Smarty-2.6.30/libs/Smarty.class.php'); 
$temp = new Smarty(); 

...} 

必要電子メール機能では、電子メールの本文にSmartyテンプレートを使用します。

+0

私は、emailer関数でSmartyを使用する必要があるということは、電子メールの本文にSmartyテンプレートを使用することです。 – Ben

+0

上記のコードは1つのファイルからのものですか? –

+0

申し訳ありません。もう1つは電子メール機能(cEmailer.php)を設定する別のクラスファイルにあります。 setup.phpはindex.phpコードによって呼び出されます。 cEmailerは、電子メールを送信するさまざまなモジュールによって呼び出されます。 – Ben

答えて

0

これは簡単なことです。問題は、2つのSmartyインスタンスを作成しているのではなく、同じファイルにrequireを2回呼び出していることです。代わりにこれを行う:あなたの致命的なエラーを解決します

// Setup.php 
require_once('../Smarty-2.6.30/libs/Smarty.class.php'); 
$_TEMP = new Smarty(); 

class Emailer {... 
require_once('../Smarty-2.6.30/libs/Smarty.class.php'); 
$temp = new Smarty(); 

は、しかし、あなたは今、2つのインスタンスのあなたの創造は、あなたが必要なものではない、私の事実に関連したさまざまなエラーを有することができるが、それは別の問題です。

私はここにいますが、なぜ古代のSmarty 2.xを使用していますか? 3.xははるかに良いです。

+0

これは継承されたサイトであるため、古いSmartyを使用しています。Smartyと他のいくつかのライブラリをコードに組み込んでいます。まだアップグレードの結果に対処する準備ができていません。古いバージョンのphpとmysqlからアップグレードするのに十分な問題がありました。 – Ben

+0

そして、それは働く!どうもありがとうございました! – Ben

関連する問題