2017-09-07 15 views
2

これは私が他の回答を確認して適用したので混乱しますが、この致命的なエラーは引き続き発生します。クラスPHPMailerを再宣言できません

私はワードプレスでphpmailerのを使用してこのコード持っている:

if (!class_exists('PHPMailer')) { 
    require_once(ABSPATH . 'wp-content/uploads/phpmailer/_lib/class.phpmailer.php'); 
} 

は、ページがロードされないが、しかし、私はエラーを取得:

PHP Fatal error: Cannot redeclare class PHPMailer in

(私も試してみましたでclass_existsを( 'PHPMailer'、false))でも、同じエラーが発生しました。

私が見る限り、クラスが存在しないことを確認してrequire_onceを使用すると、この問題は発生しません。

しかし、私は...

何か助けに感謝します。

+0

がPHPMailer' 'と呼ばれるクラスがすでにだし、それはあなたには、同じファイルである必要はありませんため、このリンクをチェックし、クラスの名前だけはしなければなりません同じである。エラーが発生する理由は、クラス名が一意でなければならないということです。すべてのコードを通じて完全な検索を実行できますか? PS:名前空間は、クラス名におけるこれらの衝突を避けるために使用されます。 –

+0

提供したコード行をコメントアウトするとどうなりますか?あなたが提供したコード行の下には何がありますか? – fyrye

+0

いくつかのプラグインがこのタイプの問題を作成しています。メールに複数のプラグインを使用した可能性があります。 –

答えて

0

class_existsは2番目のパラメータをデフォルトとしています。これは、デフォルトでtrueに設定されているため、クラスがまだロードされていない場合に自動的に読み込みを試み、 include_path。結果として、そのパラメタをデフォルト値のままにしておくと、効果的に2回ロードすることになり、再宣言エラーになります。代わりにこれを試してみてください:use composer:他のニュースで

if (!class_exists('PHPMailer', false)) { 
    require_once(ABSPATH . 'wp-content/uploads/phpmailer/_lib/class.phpmailer.php'); 
} 

を。あなたのクラスの読み込みをすべて管理します。それは簡単なスクリプトでさえ価値があります。

1

PHPMailerインスタンスはすでにwordpressで動作しています。再度ライブラリを組み込む必要はありません。ご参考どこかあなたのコード内の

https://codex.wordpress.org/Plugin_API/Action_Reference/phpmailer_init

+0

ありがとうございました!私はwp-includesのPHPMailerを「発見」し、アップロードした「余分な」バージョンの代わりにそのバージョンにリンクしました。すべて今良い。 :) – arathra

関連する問題