PECL 명령은 긴 오류 목록을 생성합니다


47

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

이 문제를 어떻게 해결할 수 있습니까?

답변:


91

RedHat EL v6에서 PHP 설치를 5.5.14로 업데이트 한 후이 오류가 발생했습니다. Yum 패키지 관리자를 통해 PHP를 설치 한 다음 사용중인 일부 PHP 확장을 다시 설치해야했습니다. 이 문제를 해결하는 방법에 대한 팁을 검색 하면서이 질문을 발견했으며 이제는 해결 방법을 찾았으므로 발견 사항을 여기에 공유하려고했습니다. PECL / PEAR를 지우고 다시 설치하는 것을 포함하여 온라인에서 찾은 다른 제안은 PHP 설치 로도이 문제를 해결하지 못했습니다. 마지막으로 PECL / PEAR의 소스 코드를 자세히 조사하고 검토 한 결과 실제 원인이 발견되었습니다. 다음에 오는 것이 다른 사람들에게 도움이되기를 바랍니다.

PHP 설치에서 기본적으로 XML을 사용하도록 설정하지 않은 경우 PECL을 실행하려고 할 때이 오류가 표시 될 수 있지만 대신 XML 지원이 일반적으로 PHP 확장 모듈을 통해 PHP 설치에로드됩니다 ( ./configure --disable-xmlPHP를 빌드 할 때 플래그가 지정된 경우 발생할 수 있음) 소스에서 또는 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이 사용하는 것과 매우 유사한 쉘 스크립트가 표시되지만 -nPHP를 호출하는 명령에서 플래그가 누락되어 PEAR 명령에 동일한 문제가 적용되지 않습니다.


5
에픽 답변, pecl 스크립트 편집이 저에게 효과적이었습니다.
Alex Ross

29
당신은 ... 성도입니다. ... ... 말 그대로. 나는 모든 신문의 사망 기사를 스캔하는 스크립트를 작성하고, 당신이 세상을 떠난 즉시 바티칸에게이 답변을 지구상의 행동의 예로서 사용하여 비트 화 과정을 시작하라고 지시 할 것입니다. 멋진 답변 :)
riwalk

5
감사. TLDR; /usr/bin/pecl-n 매개 변수를 사용하지 않도록 의 마지막 행을 편집하십시오 .
dtbarne

7
실행sed -i "$ s|\-n||g" /usr/bin/pecl
AVProgrammer

6
나는 -n마지막 명령을 가지고 있지 않고 pecl긴 오류 목록이 불행히도 남아 있습니다.
백서의 백서

29

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-xmlyum remove php-xml


1
php-xml php7.0-xml이 설치되었지만 XML 모듈이 없습니다
Loenix

도움이
되었습니까

8

php5.6을 사용하고 있습니다.

많은 답변은 php-xml을 설치하는 것이 좋지만 특정 버전을 입력하면 작동하지 않습니다.

sudo apt-get install php5.6-xml

모든 것이 효과가있을 수 있습니다.


PHP 5.6에서 작동
devst3r

PHP 7.2, Ubuntu 16.04에서 나를 위해 일했습니다. 내 명령은 : sudo apt install php7.2-xml. 원하는 경우 내 명령도 포함하도록 답변을 업데이트 할 수 있습니다. :) 감사합니다
voghDev

4

"XML Extension not found"문제를 해결하려면 php-xml 패키지를 설치해야합니다


2
조금 더 설명이 여기에 유용 할 수 있습니다.
kasperd

이 질문은 거의 2 살입니다. 홈 화면이 복잡해 지므로 이전 질문에 대답하지 마십시오.
Catherine MacInnes

1
내가 대답 한 이유는 오늘이 문제가 발생 하여이 솔루션으로 문제를 해결했기 때문입니다!
kavehmb

이것은 내가 사용 php7.2하고 있고 명령을 사용하여 내 상대 버전을 설치 한 파일을 편집 하지 않은 유일한 방법입니다.sudo apt-get install php7.2-xml
Muhammad Omer Aslam

2

PEAR RPM을 완전히 제거한 rm -rf /usr/share/pear/다음 pear와 모든 모듈을 다시 설치하십시오.


그것을 따라 갔고 yum erase php-pear이제는 모든 것이 잘되었습니다! 감사! :)
eComEvo

1
재고 php-pear 패키지 대신 다시 설치할 때 php54w 버전의 php pear를 사용하십시오. 간단히 말해 1. yum erase php-pear2. rm -rf /usr/share/pear/3.yum install php54w-pear
Attila Fulop

2

다음 단계는 저에게 효과적입니다.

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

0

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 패키지로 업그레이드해야합니다. 현재 평판으로 인해 다른 것을 게시 할 수 없습니다.

당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.