PHP 8.4가 11월에 출시되었으며 귀하와 귀하의 팀은 의심의 여지가 없습니다. 새로운 기능과 지원 중단 사항을 이해하기 위해 열심히 노력했습니다. 이 최신 언어 반복에 수반되는 변경 사항입니다. 이것 POST가 아닌 HTTP 동사에 대한 변경 사항이 포함되어 있습니다.
이 블로그에서 저는 PHP의 HTTP 동사의 배경을 통해 HTTP가 왜 사용되는지 설명합니다. PHP 8.4의 동사 변경 사항이 중요합니다. 그런 다음 개발자를 위한 가이드를 제공합니다. 코드 내에서 이러한 변경 사항을 구현할 때 참조할 수 있습니다.
PHP 웹을 염두에 두고 개발되었으며 웹에서 양식 처리를 지원했습니다. 초기. 원래 HTTP에는 기본적으로 두 가지만 있었습니다. 브라우저가 웹페이지를 요청할 수 있는 방법: GET 또는 POST를 통해. HTML 양식은 여전히 이 두 가지 방법만 지원하지만, JavaScript에는 모든 HTTP 메서드를 사용하여 HTTP 요청을 보내는 기능이 있습니다. 그리고 여러 툴킷(예: HTMX)이 개발자를 위해 이를 원활하게 처리할 수도 있습니다.
GET 요청은 URL의 쿼리 문자열을 통해 양식 데이터를 전달합니다. 즉, 양식 결과를 북마크에 추가하고, 반복하고, 심지어는 캐시되었습니다. 이 때문에 GET 요청은 일반적으로 작업에만 사용됩니다. 상태를 변경하지 않고 상태를 요청하는 경우: 검색, 결과 정렬, 결과 필터링, 페이지 매김 등
을 수행하고 싶다면 애플리케이션 내에서 변경을 수행할 수 있는 작업(예: 장바구니 처리, 지원 메시지 보내기, 업로드 이미지 등 — POST HTTP 메서드를 사용합니다. POST 요청은 비멱등성(non-idempotent)으로 간주됩니다. 즉, 캐시할 수 없고 캐시해서는 안 됩니다. 부작용이 있기 때문에 반복하세요. 이러한 효과는 데이터베이스, 파일 시스템 작업, 웹 요청 또는 기타 항목의 삽입, 변경 또는 삭제를 의미할 수 있습니다.
In 양식 데이터 처리를 자동화하기 위해 PHP는 여러 가지 기능을 제공합니다. 들어오는 요청에서 채우는 초전역 변수입니다. $_GET은 URL 쿼리 문자열 인수로 채워지며 모든 요청 메서드에서 채워질 수 있습니다. 그러나 $_POST는 다음과 같은 콘텐츠 유형 application/x-www-form-urlencoded를 사용하여 생성된 POST 요청의 본문에서만 채워집니다.
title=HTTP Verbs Changes in PHP 8.4&url=https://example.org/blog/php-8.4-http-verbs&author=Just Some Guy&tags[0]=php&tags[1]=http
PHP는 이를 가져와 $_POST 슈퍼전역을 다음과 같이 채웁니다.
<?php $_POST = [ 'title' => 'HTTP Verbs Changes in PHP 8.4', 'url' => 'https://example.org/blog/php-8.4-http-verbs', 'author' => 'Just Some Guy', 'tags' => ['php', 'http'], ];
PHP는 이 작업을 뒤에서 수행하는 것은 PHP를 배우고 시작하기 쉽게 만드는 이유 중 하나입니다.
또한 브라우저가 양식 데이터를 제공하는 것 외에 파일을 업로드할 수 있도록 하는 콘텐츠 유형 multipart/form-data도 처리할 수 있습니다. 그렇게 하면 추가로 $_FILES가 채워집니다. 업로드된 파일에 대한 정보를 제공하는 superglobal; 그런 다음 개발자는 해당 파일을 저장하기 전에 검증하고 사전 처리할 수 있습니다. 영구적인 위치에 있습니다.
다음이 있습니다. GET 및 POST보다 훨씬 더 많은 HTTP 메소드와 웹 개발자 종종 내용에 대한 맥락을 제공하기 위해 다른 방법을 선택하기를 원할 것입니다.
브라우저는 (아직!) 기본적으로 이를 지원하지 않지만 많은 JavaScript 프레임워크와 라이브러리는 지원합니다.
그러나 문제가 있습니다: PHP는 이러한 요청을 자동으로 처리하지 않습니다. ~ 안에 사실, 이러한 구문 분석은 전적으로 사용자가 직접 처리해야 합니다. 파일 업로드를 다음과 같이 처리하기 시작하면 큰 문제가 될 수 있습니다. 양식 데이터도 마찬가지입니다. (직접 파서를 굴리지 마세요!)
PHP 8.4에서는 request_parse_body() 메서드를 도입합니다.
title=HTTP Verbs Changes in PHP 8.4&url=https://example.org/blog/php-8.4-http-verbs&author=Just Some Guy&tags[0]=php&tags[1]=http
함수는 항상 그랬던 것과 같은 방식으로 들어오는 요청을 구문 분석합니다.
POST 요청의 경우 대체 변수를 지정할 수 있습니다.
양식 데이터 및 파일 업로드를 저장하거나 슈퍼 전역을 덮어씁니다.
원하는 경우). 아래에서 자세히 설명하는 $options 인수를 통해 파서의 동작을 변경할 수도 있습니다.
일반적인 패턴은 다음과 같습니다.
<?php $_POST = [ 'title' => 'HTTP Verbs Changes in PHP 8.4', 'url' => 'https://example.org/blog/php-8.4-http-verbs', 'author' => 'Just Some Guy', 'tags' => ['php', 'http'], ];
(하지만 프레임워크를 사용하고 있다면 프레임워크가 해당 세부 사항을 처리해 줄 것이라고 기대하세요.)
그렇습니다. 말 그대로 기능 전체입니다. 제공하는 간단한 기능 PHP 개발자로서 이미 익숙한 턴키 동작입니다. 그것 이보다 더 좋을 수는 없습니다!
지금 PHP 8.4의 HTTP 동사 변경 사항에 대해 이야기했습니다. 이를 사용하고 적용하는 방법에 대한 몇 가지 예를 살펴보십시오. 코드 업데이트.
POST 요청과 마찬가지로 request_parse_body()는 다음 콘텐츠가 포함된 요청만 구문 분석합니다. 유형:
application/x-www-의 경우 form-urlencoded, $_FILES와 동일 배열(반환된 배열의 인덱스 1)은 비어 있습니다. 내용이라면 유형이 지원되지 않으면 함수에서 InvalidArgumentException이 발생합니다.
PHP를 사용하면 php://input 스트림을 통해 원시 요청 콘텐츠를 검사할 수 있습니다. 이는 (PHP 7.4 기준) 여러 번 읽을 수 있는 버퍼링된 스트림입니다. 그러나 multipart/form-data를 수신하는 경우 내용을 보면 PHP는 약간 파괴적입니다. 그 이유는 바로 버퍼링입니다. 파일로 인해 파일 내용이 디스크에 두 번 기록될 수 있습니다. 더 많은 메모리, 저장 공간 및 I/O 사용량이 발생합니다.
따라서 request_parse_body()는 php://input을 파괴적으로 소비하므로 두 번 호출하면 안 됩니다.
request_parse_body()에 대한 $options 매개변수를 사용하면 다음 매개변수에 의존하는 대신 런타임 시 동작을 변경할 수 있습니다. 하드 코딩된 php.ini 구성.
위 내용은 PHP 8.4의 HTTP 동사 변경 사항의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!