다음 thinkphpframework 튜토리얼 칼럼에서는 ThinkPHP 인증 코드가 표시되지 않는 문제에 대한 해결책을 소개하겠습니다. 도움이 필요한 친구들에게 도움이 되길 바랍니다!
오늘 아주 이상한 BUG를 만났습니다. 즉, 로컬에서 정상적으로 실행되는 PHP 프로그램을 작성했는데 A측 서버에 공개하면 인증코드가 표시되지 않는 BUG가 있습니다.
구체적인 증상은 Chrome 브라우저에 작은 깨진 사진 아이콘이 표시된다는 것입니다. 사진을 마우스 오른쪽 버튼으로 클릭하여 새 창에서 열면 여전히 작은 깨진 사진이며 오류 메시지가 아닙니다(켜기). xdebug 확장자 및 php 오류 메시지) 경우) 이 경우에는 인증코드 URL 라우팅 및 비즈니스 로직 코드에는 문제가 없으나, 인증코드 생성 과정에 문제가 있다는 의미입니다. 아이디어는 다음과 같습니다:
1. GD 라이브러리가 올바르게 설치되었는지 확인하십시오. Linux에서는 yum 또는 apt 또는 pecl을 사용하여 설치하는 것이 좋습니다. Windows에서는 일반적으로 사용되는 확장 기능이 통합되어 있어 간단히 열 수 있습니다. 마우스 오른쪽 버튼을 클릭합니다. (새 창에서 인증코드 이미지를 열었을 때 오류 메시지와 글자가 깨져 보이는 경우에 해당됩니다. 오류 메시지가 있는 경우 오류 메시지에 따라 디버깅해 주세요.)
2. 인증 코드에서 호출한 글꼴이 누락되었습니다. 인증 코드 구성요소에서 호출되는 일부 글꼴이 대상 컴퓨터에 설치되어 있지 않습니다. 이를 위해서는 인증 코드 모듈의 소스 코드 분석이 필요합니다. 저는 ThinkPHP의 공식 think-captcha를 사용하고 있습니다. Vendortopthinkthink-captchasrc에서 소스 코드를 찾을 수 있습니다. 이 검증 코드 플러그인은 자체 글꼴과 함께 제공되므로 ThinkPHP의 검증 코드는 기본적으로 필요하지 않습니다. 글꼴 문제, 다른 인증 코드 플러그인인 경우에도 이 곳을 확인해야 합니다.
3. 버그가 있는 인증코드 이미지와 로컬 테스트 일반 인증코드 이미지를 다운받아 메모장을 이용하여 비교해 보세요.
위 사진은 로컬 환경에서의 인증코드 이미지를 메모장으로 하여 파일 차이를 분석하고 있습니다.
그림에서 볼 수 있듯이, 잘못된 파일인 bad에는 앞에 EF BB BF와 다른 숫자가 추가된 것을 제외하고는 내용이 정확히 동일하다는 것을 발견했습니다. 이는 PHP가 렌더링할 때 이러한 추가 단어를 렌더링한다는 것을 의미합니다. image. 이유는 아마도 서버에 전문적인 코드 편집기가 없어서 운영 및 유지보수 담당자가 일반 Windows 메모장을 사용하여 PHP 코드를 수정했기 때문에 이 BOM 헤더가 추가되었기 때문일 것입니다.
세 번째 이유라면 두 가지 해결 방법이 있습니다. 하나는 인증 코드의 imagepng 출력 이미지 코드를 호출하기 전에 ob_clean을 사용하여 PHP의 출력 버퍼를 지우는 것입니다. 코드의 BOM을 일괄적으로 제거하기 위해 일부 도구를 사용하는 경우도 있습니다.
여기서는 ob_clean을 사용하는데 think-captcha의 메인 파일인 Captcha.php의 203번째 줄 앞에 ob_clean()을 추가하면 한번에 해결이 됩니다. 성능과 안정성에 대한 엄격한 요구 사항이 있는 경우 BOM을 일괄 제거하는 도구를 사용하는 것이 더 안전합니다. 동시에, 언제든지 서버에 editplus와 같은 전문 코드 편집기를 설치하는 것도 권장됩니다. 코드를 수정하기 위해 Windows 메모장을 사용하지 마십시오.
위 내용은 ThinkPHP 인증코드가 표시되지 않는 문제 해결의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!