>  기사  >  백엔드 개발  >  Php 7.4 업그레이드로 인한 두 가지 큰 함정

Php 7.4 업그레이드로 인한 두 가지 큰 함정

藏色散人
藏色散人앞으로
2020-02-08 13:07:145471검색

내 컴퓨터는 Archlinux의 롤링 업데이트를 사용하고 있기 때문에 예기치 않게 Php가 7.4로 업그레이드되었습니다. 이 업데이트는 큰 문제를 가져왔습니다. 먼저, Php-fpm의 새 옵션인 ProtectHome으로 인해 고전적인 파일을 찾을 수 없음 오류가 발생하고, Php 인터프리터는 널 유형의 첨자 액세스에 대해 널 유형 값의 배열 오프셋에 액세스하려고 하는 오류를 직접 보고합니다.

최근에 친구의 웹사이트 구축을 돕고 있었기 때문에 테스트를 위해 온라인 코드를 로컬 미러로 다시 가져왔습니다. 웹 애플리케이션에는 이상한 종속성이 있기 때문에 로컬 환경을 오염시키지 않기 위해 Docker에 배포하여 테스트했습니다. Docker의 기본 이미지는 지난달 말 출시된 Php7.4와 짝을 이루는 급진적인 Archlinux를 선택합니다. 그래서 오후 내내 디버그 피트에 갇혀 지냈습니다...

우선 셔틀로 환경을 설정한 후 실행하여 Php-fpm의 가장 고전적이고 불쌍한 오류 중 하나인 File not를 보고했습니다. 설립하다. Php-fpm을 구성한 사람이라면 이 오류가 일반적으로 잘못된 파일 권한이나 잘못된 파일 경로로 인해 발생한다는 것을 알고 있으며, 이 두 오류 모두 상대적으로 찾기가 어렵습니다. 그래서 다시 한 번 큰 눈과 작은 눈으로 경로 점검을 경험했는데 문제가 없었습니다. 파일 권한 확인 음, 문제 없나요? 다시 가서 경로를 확인해 봤는데 그래도 괜찮더라구요! chmod 777이 문제를 해결하지 못해 너무 답답했습니다. 제 삶에 대해 조금 의문이 생겼습니다...

온라인에서 Php-fpm의 파일을 찾을 수 없음 오류를 검색해 보았지만 결과는 이것뿐이었습니다. 두 가지 이유. 그리고 이 두 가지 이유가 하나씩 해소되면서 일이 갑자기 마법 같은 각도로 전개되더군요...

Php 버전과 관련이 있지 않을까 하는 생각이 들기까지 얼마나 시간이 걸렸는지 모르겠습니다(다른 프로그램도 실행했기 때문에) ... Php 응용 프로그램이라 처음에는 Php에 문제가 있다고 생각하지 않았습니다.) 그래서 나는 Php7.4와 Php-fpm7.4의 새 버전에서 변경 사항을 검색했고 즉시 범인을 찾았습니다:

Php7.4 Commit

(https://github.com/php/php-src) / commit/40c4d7f1820df1872a71ab07fd26da45a203e37f#diff-c0605c0e7e1db864472acf66a9812d33R22)

이 커밋에 ProtectHome 옵션이 추가되었습니다. 이름에서 알 수 있듯이, 켜져 있으면 PHP는 홈 디렉터리에 있는 파일을 실행하지 않으며 이 새로운 옵션의 기본값은 켜져 있습니다. 옵션 재정의를 추가하려면 systemctl edit php-fpm.service를 사용하십시오. 서비스를 다시 시작한 후 마침내 모든 것이 정상이고 두 번째 큰 오류가 발생합니다.

Inlcude, require 등은 다른 파일을 포함하기 위해 Php에서 자주 사용됩니다. 디버깅을 통해 특정 포함 이후 PHP가 실행을 직접 중지하고 null 유형 값에서 배열 오프셋에 액세스하는 중 오류를 보고한 것으로 나타났습니다. 그런데 온라인 코드는 아무 문제 없이 실행이 되었는데, 매우 이상했습니다. 인클루드 파일을 따라가보니 배열 요소에 접근한 곳이 있는데 배열 자체가 null인 것을 발견했습니다. 이 구문은 일반적으로 Php와 같은 약한 유형의 언어에서 지원되며 전체적으로 null을 반환하지만 Php7.4의 새 버전에서는 이 구문이 오류로 보고됩니다. PHP도 언어의 특성을 조금씩 표준화하고 있는 것 같습니다. 방법은 없고, 제가 직접 코드를 바꾸는 수밖에 없습니다. (현재는 이전 버전의 Php를 선택하고 있지만)

Php7.4가 출시된 지 얼마 되지 않아 널리 업데이트 및 사용되지 않은 것으로 추정되며, 다양한 애플리케이션의 개발자들이 테스트 및 제작을 하지 않았을 수도 있다고 추정됩니다. Php7.4에 대한 호환 수정. 바로 이러한 이유로 인터넷에서 이 정보를 검색했을 때 어떤 귀중한 제안도 찾을 수 없었습니다. 이 새로운 기능에 속은 오후 내내 기록하는 것 외에도 이 기사는 다른 사람들에게 해결 방법을 제공합니다. 비슷한 문제.

위 내용은 Php 7.4 업그레이드로 인한 두 가지 큰 함정의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!

성명:
이 기사는 sbw.so에서 복제됩니다. 침해가 있는 경우 admin@php.cn으로 문의하시기 바랍니다. 삭제