만족
[Apache] Uncaught Error: Call to undefined function apache_request_headers() 본문
[Apache] Uncaught Error: Call to undefined function apache_request_headers()
Backend/기타 Satisfaction 2022. 9. 25. 21:44apache mpm을 prefork에서 event로 변경하면서 php 모듈도 변경했는데 해당 작업 이후 발생한 문제이다.
Uncaught Error: Call to undefined function apache_request_headers() ...
원인
기존의 apache php 모듈을 제거하고
php-fpm을 대신 활성화해서 apache_request_headers() 함수가 지원되지 않는다.
apache-php 연결 모듈에 따라 지원 여부가 갈린다.
+ 이것도 좀 웃긴게 php 공식 문서에서도 어떤 페이지는 모듈 연결 방식에 상관없이 모두 된다고 하고
또다른 페이지에서는 안된다고 나온다.
+ 정확한 것은 php_info()를 호출해서 지원되는 환경 변수들을 체크해보면 알 수 있다.
당연하게도 apache_request_headers()는 모듈 지원 방식에 따라 지원 여부가 다르다는 것을 알 수 있다...
해결
https://www.php.net/manual/en/function.apache-request-headers.php
없으면 만들어주면 된다.
<?php
if( !function_exists('apache_request_headers') ) {
///
function apache_request_headers() {
$arh = array();
$rx_http = '/\AHTTP_/';
foreach($_SERVER as $key => $val) {
if( preg_match($rx_http, $key) ) {
$arh_key = preg_replace($rx_http, '', $key);
$rx_matches = array();
// do some nasty string manipulations to restore the original letter case
// this should work in most cases
$rx_matches = explode('_', $arh_key);
if( count($rx_matches) > 0 and strlen($arh_key) > 2 ) {
foreach($rx_matches as $ak_key => $ak_val) $rx_matches[$ak_key] = ucfirst($ak_val);
$arh_key = implode('-', $rx_matches);
}
$arh[$arh_key] = $val;
}
}
return( $arh );
}
///
}
///
?>
apache_request_header는 헤더 내용을 읽어 array로 리턴해주는 것이므로 (특정 모드에서만 국한된 기능이 아님)
apache_request_header를 새로 구현해주기만 하면 된다.
위 내용을 php 코드 상단부에 추가한다.
주의할 점은 헤더의 키값이 모두 대문자로 바뀐다는 것이다.
예를 들어 기존에 header의 Authorization키값을 가져오는 코드가 있다면
$header= apache_request_headers();
$header['Authorization']
을
$header['AUTHORIZATION'] 처럼 변경해주어야 한다.
'Backend > 기타' 카테고리의 다른 글
[Apache] prefork에서 event 기반 mpm으로 변경하기 (0) | 2022.10.30 |
---|---|
[Apache] https 프로토콜 사용 강제하기 (HTST) (0) | 2022.02.26 |
[Apache] Letsencrypt로 ssl 인증서 발급 및 등록하기와 인증서 갱신 문제 (0) | 2021.11.08 |