CentOS 6.5에서 현재 PHP 5.4를 실행 중입니다.
webtatic php55w 패키지를 설치 한 다음 PECL을 통해 redis 및 mongo와 함께 문제없이 PEAR + PECL을 설치했습니다.
얼마 지나지 않아 5.5가 내가 작업하고있는 프레임 워크와 호환되지 않는다는 것을 깨달았으므로 php55w를 지우고 그 자리에 php54w를 설치했습니다.
이제 pecl 명령이 전혀 작동하지 않습니다. pecl 명령을 실행할 때마다 (실제로 … 수십 번 반복되는)이 긴 문자열을 생성합니다.
Warning: Invalid argument supplied for foreach() in Command.php on line 259
Warning: Invalid argument supplied for foreach() in /usr/share/pear/PEAR/Command.php on line 259
...etc etc etc...
Notice: Undefined index: honorsbaseinstall in Role.php on line 180
Notice: Undefined index: honorsbaseinstall in Role.php on line 180
...etc etc etc...
Notice: Undefined index: installable in Role.php on line 145
Notice: Undefined index: installable in Role.php on line 145
...etc etc etc...
Notice: Undefined index: phpfile in Role.php on line 212
Notice: Undefined index: phpfile in Role.php on line 212
...etc etc etc...
Notice: Undefined index: config_vars in Role.php on line 49
Notice: Undefined index: config_vars in Role.php on line 49
...etc etc etc...
Warning: Invalid argument supplied for foreach() in PEAR/Command.php on line 259
Warning: Invalid argument supplied for foreach() in /usr/share/pear/PEAR/Command.php on line 259
...etc etc etc...
XML Extension not found
이 문제를 어떻게 해결할 수 있습니까?
답변
RedHat EL v6에서 PHP 설치를 5.5.14로 업데이트 한 후이 오류가 발생했습니다. Yum 패키지 관리자를 통해 PHP를 설치 한 다음 사용중인 일부 PHP 확장을 다시 설치해야했습니다. 이 문제를 해결하는 방법에 대한 팁을 검색 하면서이 질문을 발견했으며 이제는 해결 방법을 찾았으므로 발견 사항을 여기에 공유하려고했습니다. PECL / PEAR를 지우고 다시 설치하는 것을 포함하여 온라인에서 찾은 다른 제안은 PHP 설치 로도이 문제를 해결하지 못했습니다. 마지막으로 PECL / PEAR의 소스 코드를 자세히 조사하고 검토 한 결과 실제 원인이 발견되었습니다. 다음에 오는 것이 다른 사람들에게 도움이되기를 바랍니다.
PHP 설치에서 기본적으로 XML을 사용하도록 설정하지 않은 경우 PECL을 실행하려고 할 때이 오류가 표시 될 수 있지만 대신 XML 지원이 일반적으로 PHP 확장 모듈을 통해 PHP 설치에로드됩니다 ( ./configure --disable-xml
PHP를 빌드 할 때 플래그가 지정된 경우 발생할 수 있음) 소스에서 또는 PHP 빌드가 확장 모듈을 통해 XML을로드하도록 구성된 다양한 패키지 관리자를 통해 PHP를 설치 한 경우).
PECL의 오류 출력의 마지막 줄이 어떻게되는지 확인하십시오. XML Extension not found
이 오류가 나타나는 이유 는 PECL이 XMLParser.php 클래스를 사용하려고 할 때 XML 확장에 액세스 할 수 없어 실패하기 때문입니다 ( extension_loaded('xml')
줄을 사용하여 XML 모듈을 확인 함). XML 모듈을 사용할 수 없기 때문에 구성 / 설정 파일을 구문 분석 할 수 없으며 위에서 본 다른 모든 오류를 출력합니다.
이 문제가 발생하는 이유는 PECL이 작동하는 방식 때문입니다. PECL 명령 자체는 셸 스크립트 일뿐입니다.이 스크립트는 시스템 설치에서 PHP가 설치된 위치에서 먼저 작동 한 다음 기본 PECL PHP 스크립트 파일에 대한 경로를 제공하기 전에 여러 플래그로 명령 줄에서 PHP를 호출합니다. PECL 셸 스크립트가 사용하는 문제 플래그는 -n
옵션으로, PHP가 php.ini
파일 을 무시하도록 지시 합니다 (따라서 PHP는 php.ini
이 경우 XML을 포함 하여 파일이 지정 하는 추가 확장자를로드하지 않습니다 ).
-n
다음 두 명령을 실행하여 플래그 의 영향을 볼 수 있습니다 .
- 먼저
php -m
커맨드 라인에서 실행 해보십시오 - 그런 다음 출력을
php -n -m
-n
플래그가 PHP에 php.ini
파일 을 구문 분석하지 않도록 지시 했기 때문에 두 번째 명령을 실행할 때 XML 확장자가 표시 되지 않아야합니다 .
vi `which pecl`
명령 행에서 실행 하면 PECL 명령의 내용 (위에서 언급 한 것처럼 단지 쉘 스크립트)이 표시되고 마지막 행을 검사하면 다음과 같이 표시됩니다.
exec $PHP -C -n -q $INCARG -d date.timezone=UTC -d output_buffering=1 -d variables_order=EGPCS -d safe_mode=0 -d register_argc_argv="On" $INCDIR/peclcmd.php "$@"
및 플래그 -n
사이에 플래그가 표시 되어야 합니다. PECL 쉘 스크립트를 편집하는 경우 플래그를 생략하면 이제 문제없이 PECL을 다시 실행할 수 있습니다.-C
-q
-n
또는 소스에서 PHP를 다시 컴파일하여 런타임에 PHP 확장 모듈에서로드하지 않고 XML 모듈이 PHP 바이너리로 컴파일되도록 할 수 있습니다. PECL 셸 스크립트를 편집하여 -n
플래그 를 제거하면 PECL / PEAR가 다시 설치 될 때까지만 문제가 해결되지만 PECL / PEAR 관리자는이 수정으로 리포지토리를 업데이트 할 수 있습니다. PHP가 컴파일 된 XML 지원으로 빌드되도록하는 것은 해결책에 대한 장기적인 해결책이지만 모든 상황에 적합하지는 않습니다.
완전성을 위해 실행 vi `which pear`
하면 PECL이 사용하는 것과 매우 유사한 쉘 스크립트가 표시되지만 -n
PHP를 호출하는 명령에서 플래그가 누락되어 PEAR 명령에 동일한 문제가 적용되지 않습니다.
답변
PECL 명령을 요청할 때 우분투 에서이 문제에 직면했습니다. 나를 도와 준 유일한 것은 php-xml
패키지 를 설치하는 것입니다 . 먼저 XML 모듈이 이미 설치되어 있는지 확인하십시오.
php -m
당신이 그것을 찾지 못하면 당신은해야합니다
sudo apt-get install php-pear
php-xml 패키지를 자동으로 설치합니다. 또는 당신은 이와 같은 xml을 설치할 수 있습니다 (가지고있는 PHP의 버전에 따라)
sudo apt-get install php-xml php7.0-xml
XML을 찾으면 제거하고 다시 설치하십시오.
sudo apt-get purge php*-xml
sudo apt-get autoremove php*-xml
sudo apt-get install php-xml php7.0-xml
당신이 사용할 수있는 패키지 관리자로 RPM이있는 경우 yum install php-xml
및yum remove php-xml
답변
php5.6을 사용하고 있습니다.
많은 답변은 php-xml을 설치하는 것이 좋지만 특정 버전을 입력하면 작동하지 않습니다.
sudo apt-get install php5.6-xml
모든 것이 효과가있을 수 있습니다.
답변
“XML Extension not found”문제를 해결하려면 php-xml 패키지를 설치해야합니다
답변
PEAR RPM을 완전히 제거한 rm -rf /usr/share/pear/
다음 pear와 모든 모듈을 다시 설치하십시오.
답변
다음 단계는 저에게 효과적입니다.
1 단계 :
yum erase php-pear
2 단계 :
# rpm -Uvh http://ftp.iij.ad.jp/pub/linux/fedora/epel/6/x86_64/epel-release-6-8.noarch.rpm
# rpm -Uvh http://rpms.famillecollet.com/enterprise/remi-release-6.rpm
3 단계 :
yum install --enablerepo=remi --enablerepo=remi-php56 php-pear
답변
PHP7 / 데비안 사람들 (유사한 / 동일한 이유) :
그 이유는 위에서 언급 한 XML 확장이 누락 되었기 때문입니다. 우리에서 꼭 사용 dotdeb , 그리고이되는 것을 제거 XML이 빌드 – 별도의 패키지 인로를 :
출처 : https://www.dotdeb.org/2016/06/24/php-7-0-8-for-jessie/
bcmatch, dba, mbstring, soap, xml 및 zip에는 이제 별도의 전용 패키지가 있습니다.
즉,
php -n
PEAR 패키지 파서가 의존하는 XML을 더 이상 포함하지 않습니다 (XML 파서). 소스 pear.php.net/package/PEAR/download
PHP 확장 : xml
pecl이 시스템의 php.ini를 사용하지 않는 것이 중요하기 때문에, 모든 경우에 기능성을 보장하기 위해 (기능 장애가 pecl ..를 실행하는 이유 일지라도) -n을 사용하여 변경되지 않습니다. Arpack 패키지를 약간 테스트하지 않고도 패키지 재 포장, 구조 조정 및 이동을 중단했습니다.
출하 된 PEAR 패키지에 문제가 있습니다. 현재 PEAR 패키지로 업그레이드해야합니다. 현재 평판으로 인해 다른 것을 게시 할 수 없습니다.