현재 위치: > 최신 기사 목록> 일반적인 오류 : stream_get_filters가 빈 배열을 반환하는 이유와 솔루션

일반적인 오류 : stream_get_filters가 빈 배열을 반환하는 이유와 솔루션

gitbox 2025-05-28

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
(
)

그렇다면 왜 이런 일이 발생합니까? 이 기사는 몇 가지 일반적인 이유와 해당 솔루션을 분석합니다.

공통 원인 1 : PHP 컴파일 중에 필요한 확장이 활성화되지 않습니다.

유량 필터는 주로 Zlib , Iconv 등과 같은 확장에 의해 제공됩니다. 최소 구성으로 컴파일 된 PHP를 사용하면 많은 확장이 제거 될 수 있으므로 Stream_get_filters ()가 비어있게됩니다.

해결책

관련 확장이 현재 PHP에로드되어 있는지 확인하려면 다음 명령을 사용할 수 있습니다.

 php -m

ZlibIconv 와 같은 확장이 누락 된 경우 PHP를 다시 컴파일하거나 Php.ini를 수정하여 이러한 확장을 활성화해야합니다.

일반적인 Linux 배포의 경우 다음을 사용할 수 있습니다.

 sudo apt install php-zlib php-iconv

설치 후 PHP 서비스를 다시 시작하십시오.

일반적인 원인 2 : PHP 환경에 문제가 있습니다 (예 : CLI 및 FPM 구성 불일치)

일부 개발자는 명령 줄 (CLI)에서 stream_get_filters ()를 테스트하고 결과는 비어 있지만 브라우저에서 액세스하는 것이 정상입니다. 일반적으로 CLI 및 웹 환경에서 다른 php.ini 구성 파일을 사용하기 때문입니다.

해결책

다음 명령으로 CLI의 구성 파일 경로를 확인하십시오.

 php --ini

로드 된 구성 파일을 확인하여 필요한 확장이 CLI 구성 파일에로드되어 있는지 확인하십시오.

FPM이 다른 php.ini를 사용하는 경우 확인하고 정렬해야합니다.

일반적인 이유 3 : 사용자 정의 또는 최소 단순화 된 PHP 분포를 사용했습니다.

일부 컨테이너 기반 이미지와 같은 일부 개발 환경은 볼륨을 줄이기 위해 거의 모든 기본 확장을 제거합니다. 이 경우 PHP가 정상적으로 시작 되더라도 stream_get_filters ()가 비어있을 수 있습니다.

해결책

사용중인 PHP 이미지 또는 설치 패키지를 확인하고 정식 버전인지 확인하고 필요한 경우 표준 확장 기능이 포함 된 버전으로 변경하십시오.

일반적인 원인 4 : 특정 기능 또는 모듈에 대해 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을 직접 방문하여 더 많은 도움을 받으십시오.