문제 배경
game.37.com 비즈니스의 smarty 템플릿을 업데이트한 후 서버에 여러 항목이 나타납니다. 500오류 기록입니다. PHP오류 로그에 보고된 오류는 다음과 같습니다.
[16-May-2016 15:46:01 Asia/Shanghai] PHP Fatal 오류: 67행의 /*/template_c/6aede77242b285842c628673e93d8bf1bd4bc6b0.file.server_list.htm.php에서 정의되지 않은 함수 content_57397470478e99_59376883() 호출
현상: 템플릿을 업데이트한 후 첫 번째 액세스 보고서는 5 00 오류, 접속이 다시 정상화되었습니다.
문제 해결
smarty의 일반적인 사용 경험에 따르면, 템플릿 업데이트 후 가 발생하지 않습니다. PHP가 500 오류를 보고했습니다. 따라서 서버의 환경적인 문제일 수 있다고 추측되며, 문제 해결을 위해 특별한 구성 환경이 나열되어 있습니다.
사전 출시 환경에서는 먼저 eAccelerator 가속기를 확인하세요. eAccelerator 가속기는 PHP의 opcode를 캐시하기 때문에 다음이 발생할 수 있습니다. 문제 .
테스트 환경에서 테스트디버그 페이지: http://game.37.com/server_list_275.html
디버그 템플릿: main.htm
생성 smarty컴파일 파일:/*/template_c/6aede77242b285842c628673e93d8bf1bd4bc6b0.file.server_list.htm.php
marty 확인 🎜 > 템플릿을 업데이트한 후
의 컴파일된 파일과 2개 편집된 파일을 비교한 결과, PHP오류가 발생하는 이유는 이전 템플릿의 함수가 호출되었기 때문입니다. PHP의 예외 오류 메시지
PHP 치명적인 오류: /*/template_c/6aede77242b285842c628673e93d8bf1 bd4bc6b에서 정의되지 않은 함수 content_573a944d7a2608_39051073()에 대한 호출 0.file.server_list.htm.php 온라인 67smarty
작동 원리 다이어그램:
template , smarty가 새로운 컴파일된 파일을 생성했지만 이전 파일의 내용은 템플릿 파일에서 호출된 함수의 이름을 포함하는 가속기에 의해 여전히 캐시됩니다. 액셀러레이터의 히트 로그를 열면 관련 기록을 볼 수 있습니다.
솔루션
filter
매개변수, smarty의 컴파일된 파일은 캐시되지 않습니다. eaccelerator.filter="!/*/template_c/*.php" 그러나 성능을 평가해야 합니다. 영향
2) 가속기
APC
로 변경 이유: 현재 사용되는 eaccelerator는 정식 출시 버전이 아닌 1.0-dev
버전입니다. . APC는 공식 소스에서 제공되며 stable 버전으로 다운로드할 수 있습니다.
위 내용을 포함하여 스마트 업데이트 템플릿 500 오류를 일으키는 eaccelerator PHP54를 소개합니다. PHP 튜토리얼에 관심이 있는 친구들에게 도움이 되길 바랍니다.