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

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

Feb 08, 2020 pm 01:07 PM
PHP 7.4

내 컴퓨터는 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 중국어 웹사이트의 기타 관련 기사를 참조하세요!

본 웹사이트의 성명
본 글의 내용은 네티즌들의 자발적인 기여로 작성되었으며, 저작권은 원저작자에게 있습니다. 본 사이트는 이에 상응하는 법적 책임을 지지 않습니다. 표절이나 침해가 의심되는 콘텐츠를 발견한 경우 admin@php.cn으로 문의하세요.

핫 AI 도구

Undresser.AI Undress

Undresser.AI Undress

사실적인 누드 사진을 만들기 위한 AI 기반 앱

AI Clothes Remover

AI Clothes Remover

사진에서 옷을 제거하는 온라인 AI 도구입니다.

Undress AI Tool

Undress AI Tool

무료로 이미지를 벗다

Clothoff.io

Clothoff.io

AI 옷 제거제

Video Face Swap

Video Face Swap

완전히 무료인 AI 얼굴 교환 도구를 사용하여 모든 비디오의 얼굴을 쉽게 바꾸세요!

뜨거운 도구

메모장++7.3.1

메모장++7.3.1

사용하기 쉬운 무료 코드 편집기

SublimeText3 중국어 버전

SublimeText3 중국어 버전

중국어 버전, 사용하기 매우 쉽습니다.

스튜디오 13.0.1 보내기

스튜디오 13.0.1 보내기

강력한 PHP 통합 개발 환경

드림위버 CS6

드림위버 CS6

시각적 웹 개발 도구

SublimeText3 Mac 버전

SublimeText3 Mac 버전

신 수준의 코드 편집 소프트웨어(SublimeText3)