2017-09-07 11 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''라는 클래스가 이미, 그리고 당신이 포함 동일한 파일에있을 필요가 없습니다이 링크를 확인하는 클래스의 이름 만에가 똑같아. 오류가 발생하는 이유는 클래스 이름이 고유해야한다는 것입니다. 모든 코드를 통해 전체 검색을 수행 할 수 있습니까? 추신 : 네임 스페이스는 클래스 이름에서 이러한 충돌을 피하기 위해 사용됩니다. –

+0

입력 한 코드 줄을 주석 처리하면 어떻게됩니까? 당신이 제공 한 코드 줄은 무엇입니까? – fyrye

+0

어떤 플러그인을 사용하고 있습니까? 일부 플러그인은 이러한 유형의 문제를 만들고 있습니다. 메일에 여러 개의 플러그인을 사용했을 수도 있습니다. –

답변

0

나는 이것이 아마 네임 스페이스보다 더 간단한 문제라고 생각합니다 : class_exists 두 번째 autoload 매개 변수를 그 디폴트는 true, 그것은 이미로드되어 있지 않은 경우 자동으로 클래스를로드하려고 시도하고에 그것을 찾을 수 있다는 것을 의미하여 include_path. 최종 결과는 해당 매개 변수를 기본값으로두면 효과적으로 두 번로드하므로 재 선언 오류가 발생합니다. 대신 다음을 시도하십시오.

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

다른 뉴스 : use composer 모든 클래스로드를 관리합니다. 사소한 스크립트에 대해서도 가치가 있습니다.

1

PHPMailer 인스턴스가 이미 wordpress에서 작업 중입니다. 라이브러리를 다시 포함 할 필요가 없습니다. 참고로 어딘가에 코드에서

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

+0

고마워요! 나는 wp-includes의 "PHPMailer"를 발견하고 업로드 한 "추가"버전 대신 해당 버전에 링크했습니다. 괜찮아. :) – arathra