PHP : HTTP 응답 코드를 보내는 방법?
PHPPHP : HTTP 응답 코드를 보내는 방법?
HTTP 200 OK 또는 일부 4XX 또는 5XX 코드와 같은 HTTP 응답 코드 (상태 코드)를 사용하여 응답해야하는 PHP 스크립트가 있습니다.
어떻게하면 PHP에서이 작업을 수행 할 수 있습니까?
해결법
-
==============================
1.방금이 질문을 발견하고보다 포괄적 인 대답이 필요하다고 생각했습니다.
방금이 질문을 발견하고보다 포괄적 인 대답이 필요하다고 생각했습니다.
PHP 5.4에서이 작업을 수행하는 세 가지 방법이 있습니다.
header () 함수는 HTTP 응답 라인을 탐지하고이를 사용자 정의 할 수있는 특별한 유스 케이스를 가지고있다.
header("HTTP/1.1 200 OK");
그러나, 이것은 (빠른) CGI PHP를위한 특별한 치료가 필요합니다 :
$sapi_type = php_sapi_name(); if (substr($sapi_type, 0, 3) == 'cgi') header("Status: 404 Not Found"); else header("HTTP/1.1 404 Not Found");
참고 : HTTP RFC에 따르면 이유 구문은 표준을 따르는 사용자 지정 문자열이 될 수 있지만 클라이언트 호환성을 위해 임의의 문자열을 배치하지 않는 것이 좋습니다.
참고 : php_sapi_name ()에는 PHP 4.0.1이 필요합니다.
첫 번째 변종을 사용할 때 분명히 몇 가지 문제가 있습니다. 내가 생각하기에 가장 큰 부분은 PHP 나 웹 서버에 의해 부분적으로 파싱되어 문서화가 잘되어 있지 않다는 것입니다.
4.3부터 헤더 함수는 응답 코드를 다소 편하게 설정할 수있는 세 번째 인수를 갖지만 첫 번째 인수는 비어 있지 않은 문자열이어야합니다. 다음 두 가지 옵션이 있습니다.
header(':', true, 404); header('X-PHP-Response-Code: 404', true, 404);
나는 2 번째를 추천한다. 첫 번째는 테스트 한 모든 브라우저에서 작동하지만 일부 브라우저 또는 웹 크롤러는 콜론 만 포함 된 헤더 행에 문제가있을 수 있습니다. 2 번째의 헤더 필드 명 변형은 물론 어떤 방식 으로든 표준화되지 않고 수정 될 수 있습니다. 단지 설명이 포함 된 이름을 선택했습니다.
http_response_code () 함수는 PHP 5.4에서 처음 소개되었으므로 훨씬 쉽게 작업 할 수있었습니다.
http_response_code(404);
그게 다야.
다음은 5.4 아래의 호환성이 필요할 때 작성했지만 "새로운"http_response_code 함수의 기능을 원했던 함수입니다. 필자는 PHP 4.3이 하위 호환성보다 충분하다고 생각하지만 결코 알지 못합니다.
// For 4.3.0 <= PHP <= 5.4.0 if (!function_exists('http_response_code')) { function http_response_code($newcode = NULL) { static $code = 200; if($newcode !== NULL) { header('X-PHP-Response-Code: '.$newcode, true, $newcode); if(!headers_sent()) $code = $newcode; } return $code; } }
-
==============================
2.불행히도 @dualed에서 제공하는 솔루션은 여러 가지 결함이 있음을 발견했습니다.
불행히도 @dualed에서 제공하는 솔루션은 여러 가지 결함이 있음을 발견했습니다.
참고로 여기에 HTTP 응답 상태 코드의 전체 목록이 있습니다 (이 목록에는 IETF 인터넷 표준 및 다른 IETF RFC의 코드가 포함되어 있으며 그 중 많은 수가 현재 PHP http_response_code 함수에서 지원되지 않습니다) : http : //en.wikipedia .org / wiki / List_of_HTTP_status_codes
다음을 호출하여이 버그를 쉽게 테스트 할 수 있습니다.
http_response_code(521);
예를 들어 사용자 정의 클라이언트 응용 프로그램에서 서버를 호출하고 추가 HTTP 코드가 필요할 경우 서버는 "500 Internal Server Error"HTTP 응답 코드를 보내 예상치 못한 오류가 발생합니다.
내 솔루션 (모든 PHP 버전 4.1.0 이후) :
$httpStatusCode = 521; $httpStatusMsg = 'Web server is down'; $phpSapiName = substr(php_sapi_name(), 0, 3); if ($phpSapiName == 'cgi' || $phpSapiName == 'fpm') { header('Status: '.$httpStatusCode.' '.$httpStatusMsg); } else { $protocol = isset($_SERVER['SERVER_PROTOCOL']) ? $_SERVER['SERVER_PROTOCOL'] : 'HTTP/1.0'; header($protocol.' '.$httpStatusCode.' '.$httpStatusMsg); }
결론
http_response_code () 구현은 모든 HTTP 응답 코드를 지원하지 않으며 지정된 HTTP 응답 코드를 동일한 그룹의 다른 응답 코드로 덮어 쓸 수 있습니다.
새로운 http_response_code () 함수는 관련된 모든 문제를 해결하지 못하지만 새로운 버그를 도입하는 것을 악화시킵니다.
@dualed에서 제공하는 "호환성"솔루션은 적어도 PHP-FPM에서는 예상대로 작동하지 않습니다.
@dualed가 제공하는 다른 솔루션에는 다양한 버그가 있습니다. 빠른 CGI 탐지는 PHP-FPM을 처리하지 않습니다. 현재 프로토콜을 감지해야합니다.
모든 테스트와 의견을 보내 주시면 감사하겠습니다.
-
==============================
3.출력 버퍼링을 사용하지 않는 경우 본문의 출력 전에이 행을 추가하십시오.
출력 버퍼링을 사용하지 않는 경우 본문의 출력 전에이 행을 추가하십시오.
header("HTTP/1.1 200 OK");
메시지 부분 ( 'OK')을 적절한 메시지로 바꾸고 코드와 함께 상태 코드를 적절하게 바꿉니다 (404, 501 등)
-
==============================
4.PHP 5.4 이후에 http_response_code ()를 사용하여 헤더 상태 코드를 가져오고 설정할 수 있습니다.
PHP 5.4 이후에 http_response_code ()를 사용하여 헤더 상태 코드를 가져오고 설정할 수 있습니다.
여기 예제 :
<?php // Get the current response code and set a new one var_dump(http_response_code(404)); // Get the new response code var_dump(http_response_code()); ?>
여기 php.net에서이 함수의 문서가있다.
http_response_code
-
==============================
5.헤더 기능. 첫 번째 매개 변수에 대한 섹션의 예제가 있습니다.
헤더 기능. 첫 번째 매개 변수에 대한 섹션의 예제가 있습니다.
-
==============================
6.환경을로드 할 때 Wordpress에서 404를 제공하기 때문에 여기에 계시다면 문제가 해결됩니다.
환경을로드 할 때 Wordpress에서 404를 제공하기 때문에 여기에 계시다면 문제가 해결됩니다.
define('WP_USE_THEMES', false); require('../wp-blog-header.php'); status_header( 200 ); //$wp_query->is_404=false; // if necessary
문제는 상태 : 404 찾을 수 없음 헤더를 보내는 것이 원인입니다. 당신은 그것을 오버라이드해야합니다. 이것은 또한 작동합니다 :
define('WP_USE_THEMES', false); require('../wp-blog-header.php'); header("HTTP/1.1 200 OK"); header("Status: 200 All rosy");
-
==============================
7.
header("HTTP/1.1 200 OK"); http_response_code(201);
http_response_code (200); 테스트 경고 404 때문에 작동하지 않습니다. https://developers.google.com/speed/pagespeed/insights/
from https://stackoverflow.com/questions/3258634/php-how-to-send-http-response-code by cc-by-sa and MIT license
'PHP' 카테고리의 다른 글
PHP 날짜 시간 이후로 경과 된 시간을 찾는 방법은 무엇입니까? [복제] (0) | 2018.09.10 |
---|---|
이 날짜의 마지막 날을 찾는 방법은 무엇입니까? (0) | 2018.09.10 |
경고 : mysql_connect () : [2002] (unix : ///tmp/mysql.sock를 통해 연결을 시도하는) 그러한 파일이나 디렉토리가 없습니다. (0) | 2018.09.10 |
경고 : mysqli_query ()는 적어도 2 개의 매개 변수를 필요로한다. 뭐? (0) | 2018.09.10 |
동적 테이블 이름으로 SQL 주입을 방지하는 방법은 무엇입니까? (0) | 2018.09.10 |