인증 코드가 표시되지 않는 낮은 PHP 버전에 대한 해결 방법: 1. php5-gd에 필요한 종속성을 설치합니다. 2. 프로젝트 루트 디렉터리에 clean.php 파일을 만듭니다. 3. BOM을 지웁니다.
본 글의 운영 환경: windows7 시스템, PHP5 버전, DELL G3 컴퓨터
PHP 버전이 낮을 때 인증 코드가 표시되지 않으면 어떻게 해야 하나요?
정상 설치 후에도 PHP5 인증 코드가 표시되지 않고, GD 라이브러리가 표시되지 않는 문제 해결
저는 JAVA 개발자이고, 제가 직접 인수한 PHP 프로젝트도 관리하고 있습니다. PHP에 기초가 없고 프로젝트를 수행했습니다. 서버를 마이그레이션하고 도메인 이름에 https를 추가했습니다. 최종 확인 결과 정상적으로 액세스할 수 있지만 세부 기능은 완전히 테스트되지 않았습니다.
어느날 갑자기 등록모듈의 인증코드가 정상적으로 표시되지 않는다는 불만이 있었습니다.(일시적으로 제거한 후 백엔드 관리모듈에 들어가보니 이미지 업로드 기능이 제대로 작동하지 않는 것을 발견했습니다. 아마도 문제). 그래서 간헐적으로 4일 동안 온라인에서 해결책을 찾기 시작했습니다.
실제로 일반적인 상황에 대한 해결책은 쉽게 찾을 수 있습니다. 일부 키워드는 php-gd, php-fpm(저는 nginx를 구성함), php.ini, 캐시 삭제입니다. 그런데 데비안 시스템은 상상할 수 없을 정도로 의존성이 있고, 각 버전마다 의존성 명칭이 다르다. 현재 시스템 자체가 프로덕션 환경 서버이고, 의존성 버전이 다양하다는 점은 한마디로 큰 골칫거리이다.
마지막으로 수많은 종속성 소스를 시도하고 종속성을 업데이트한 후 php5-gd에 필요한 종속성을 성공적으로 설치했습니다. 마지막으로 phpinfo에는 GD 버전 정보와 지원되는 이미지 형식도 표시되었지만 여전히 인증 코드가 표시되지 않았습니다. . . . . .
수없이 검색어를 검색해 본 결과 "php5는 gd를 설치했는데도 인증 코드가 표시되지 않습니다" 드디어 BOM 헤더를 언급한 게시물을 발견했습니다. crt를 사용하여 원격으로 서버에 로그인하여 일부 내용을 편집했기 때문입니다. 때로는 이 BOM 헤더도 표시되므로 프로젝트 루트 디렉터리에 clean.php 파일을 만들고
다음 코드를 붙여 넣습니다
<?php /*清除bom*/ if(isset($_GET['dir'])){ $basedir=$_GET['dir']; }else{ $basedir = '.'; } $auto = 1; checkdir($basedir); function checkdir($basedir){ if($dh = opendir($basedir)){ while(($file = readdir($dh)) !== false){ if($file != '.' && $file != '..'){ if(!is_dir($basedir."/".$file)){ echo "filename: $basedir/$file ".checkBOM("$basedir/$file")." <br>"; }else{ $dirname = $basedir."/".$file; checkdir($dirname); } } }//end while closedir($dh); }//end if($dh }//end function function checkBOM($filename){ global $auto; $contents = file_get_contents($filename); $charset[1] = substr($contents, 0, 1); $charset[2] = substr($contents, 1, 1); $charset[3] = substr($contents, 2, 1); if(ord($charset[1]) == 239 && ord($charset[2]) == 187 && ord($charset[3]) == 191){ if($auto == 1){ $rest = substr($contents, 3); rewrite ($filename, $rest); return "<font color=red>BOM found, automatically removed.</font>"; }else{ return ("<font color=red>BOM found.</font>"); } } else return ("BOM Not Found."); }//end function function rewrite($filename, $data){ $filenum = fopen($filename, "w"); flock($filenum, LOCK_EX); fwrite($filenum, $data); fclose($filenum); } ?>
브라우저로 https://url/clean.php에 직접 액세스
네 문제 있으면 이런 로그 많이 보시고 인증코드 페이지 다시 가보세요
정상접속~
이미지 업로드 문제는 사실 도메인 이름이 https이지만 업로드 모듈의 구성은 영향을 받지 않았습니다. 추가된 https도 정상입니다
추천 학습: "PHP 비디오 튜토리얼"
위 내용은 PHP 버전이 낮을 때 인증번호가 표시되지 않으면 어떻게 해야 하나요?의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!