php에서 stream_get_filters ()는 현재 시스템에서 모든 스트림 필터를 사용할 수있는 매우 유용한 기능입니다. 필터 이름이 포함 된 배열을 반환합니다.
예를 들어, 일반적으로 다음과 같은 것을 볼 수 있습니다.
print_r(stream_get_filters());
출력은 비슷합니다.
Array
(
[0] => string.rot13
[1] => string.toupper
[2] => string.tolower
[3] => convert.iconv.*
[4] => zlib.*
)
그러나 일부 개발자 가이 코드를 사용하면 반환하는 것이 빈 배열임을 알게됩니다.
Array
(
)
그렇다면 왜 이런 일이 발생합니까? 이 기사는 몇 가지 일반적인 이유와 해당 솔루션을 분석합니다.
유량 필터는 주로 Zlib , Iconv 등과 같은 확장에 의해 제공됩니다. 최소 구성으로 컴파일 된 PHP를 사용하면 많은 확장이 제거 될 수 있으므로 Stream_get_filters ()가 비어있게됩니다.
관련 확장이 현재 PHP에로드되어 있는지 확인하려면 다음 명령을 사용할 수 있습니다.
php -m
Zlib 및 Iconv 와 같은 확장이 누락 된 경우 PHP를 다시 컴파일하거나 Php.ini를 수정하여 이러한 확장을 활성화해야합니다.
일반적인 Linux 배포의 경우 다음을 사용할 수 있습니다.
sudo apt install php-zlib php-iconv
설치 후 PHP 서비스를 다시 시작하십시오.
일부 개발자는 명령 줄 (CLI)에서 stream_get_filters ()를 테스트하고 결과는 비어 있지만 브라우저에서 액세스하는 것이 정상입니다. 일반적으로 CLI 및 웹 환경에서 다른 php.ini 구성 파일을 사용하기 때문입니다.
다음 명령으로 CLI의 구성 파일 경로를 확인하십시오.
php --ini
로드 된 구성 파일을 확인하여 필요한 확장이 CLI 구성 파일에로드되어 있는지 확인하십시오.
FPM이 다른 php.ini를 사용하는 경우 확인하고 정렬해야합니다.
일부 컨테이너 기반 이미지와 같은 일부 개발 환경은 볼륨을 줄이기 위해 거의 모든 기본 확장을 제거합니다. 이 경우 PHP가 정상적으로 시작 되더라도 stream_get_filters ()가 비어있을 수 있습니다.
사용중인 PHP 이미지 또는 설치 패키지를 확인하고 정식 버전인지 확인하고 필요한 경우 표준 확장 기능이 포함 된 버전으로 변경하십시오.
공유 호스팅과 같은 엄격하게 제한된 환경에서는 Disable_Functions 또는 기타 수단을 통해 스트림 관련 기능이 비활성화 될 수 있습니다.
phpinfo () 또는 php -i 의 출력을 확인하여 관련 함수가 disabled_functions 설정에 나열되어 있는지 확인하십시오.
호스팅 제공 업체가 비활성화 한 경우 연락하거나보다 유연한 호스팅 환경으로 전환해야 할 수도 있습니다.
PHP 환경이 Zlib가 부족하다고 가정하면 다음 방식으로 동적으로로드 할 수 있습니다 (시스템에 해당 .So 또는 .dll 파일이있는 경우).
if (!extension_loaded('zlib')) {
dl('zlib.so');
}
DL () 함수는 일반적으로 CLI에서만 유효하며 웹 환경에서는 지원되지 않을 수 있습니다.
<?php
$filters = stream_get_filters();
if (empty($filters)) {
echo "현재 사용 가능한 스트림 필터가 없습니다,확장 및 구성을 확인하십시오。\n";
echo "참조:https://gitbox.net/php/extensions-setup\n";
} else {
echo "사용 가능한 유량 필터:\n";
print_r($filters);
}
?>
여기서는 https://gitbox.net/php/extensions-setup을 가리 킵니다 (도메인 이름이 대체됨).
stream_get_filters ()가 빈 배열을 반환하는 것을 발견하면 당황하지 마십시오. 일반적으로 환경 구성이 누락 된 문제 일뿐입니다. 위의 검사 단계를 통해 원인은 기본적으로 위치하여 해결할 수 있습니다.
더 특별한 문제가 발생하면 댓글 섹션이나 포럼에 게시하고 토론하거나 Gitbox.net을 직접 방문하여 더 많은 도움을 받으십시오.