2017-01-11 7 views
0

상속 된 사이트가 있으며 새 호스팅 사이트로 마이그레이션 한 후 잘 작동했으며 최신 Smarty 2.6.3 및 PHP 5.6으로 업그레이드했습니다. 오늘 나는 일부 사용자 불만들 후에 사이트에서 이메일을받지 못했다 (회원 등록).phpMailer 함수의 새로운 Smarty()에 치명적인 오류가 발생했습니다.

오늘이 오류가 발생하기 시작했습니다. Fatal error: Cannot redeclare class Smarty 조사 결과 시스템에 두 개의 $temp = new Smarty() 문이 있음을 알 수 있습니다. 사용자가 로그인 할 때 호출되는 스크립트와 phpmailer을 사용하는 Emailer 클래스의 두 번째 문이 있습니다.

초기 Smarty 설정 변수를 참조하려고하면 call to null 오류가 발생합니다. emailer에서 멋진 코드를 제거하면 전자 메일이 호출되지 않습니다. 내가 말했듯이, 몇 년 잘 작동하고 ... 지난 달의 코드에 변경 사항이 없습니다 ... 여기

이 두 모듈의 유식 초기화이다 : 스마티에 대한

// 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

현실로 이메일 작성자 기능에서 Smarty의 필요성은 이메일 본문에 Smarty 템플릿을 사용한다는 것입니다. – Ben

+0

위의 코드는 하나의 파일에서 가져온 것입니까? –

+0

죄송합니다 - 아니요. 두 번째 파일은 전자 메일 기능 (cEmailer.php)을 설정하는 별도의 클래스 파일에 있습니다. setup.php는 index.php 코드에 의해 호출됩니다. cEmailer는 이메일을 보내는 다양한 모듈에 의해 호출됩니다. – Ben

답변

0

이것은 간단합니다. 문제는 두 개의 Smarty 인스턴스를 만드는 것이 아니라 동일한 파일에서 두 번에 require을 호출하는 것입니다. 대신이 작업을 수행합니다 : 당신의 치명적인 오류를 해결할

// 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(); 

은, 그러나, 당신은 지금 두 개의 인스턴스의 당신의 창조는 당신이 필요로 할 나의 사실에 관련된 다른 오류가있을 수 있지만, 별도의 질문입니다 .

내가 여기에있는 동안 고대 Smarty 2.x를 사용하고 계십니까? 3.x는 훨씬 좋습니다.

+0

상속받은 사이트이기 때문에 예전의 smarty를 사용하고 있으며, Smarty 및 코드에 포함 된 다른 라이브러리를 배우고 있습니다. 아직 업그레이드 결과를 처리 할 준비가되지 않았습니다. 이전 버전의 php와 mysql에서 업그레이드 할 때 문제가 발생했습니다. – Ben

+0

그리고, 그것은 작동합니다! 고마워요! – Ben