문제해결

Uncaught Error: Class ‘DOMDocument’ not found 해결

Uncaught Error: Class ‘DOMDocument’ not found 문제


블로그 서버워드프레스AMP를 설정하는 도중 500 Internal Server Error가 발생했습니다.

에러의 정확한 원인을 파악하기 위해 Nginx 로그를 확인한 결과 다음과 같은 에러 메세지가 나타났습니다.

2018/10/03 16:13:07 [error] 7515#0: *33598 FastCGI sent in stderr: "PHP message: PHP Fatal error:  Uncaught Error: Class 'DOMDocument' not found in /blog/path/wp-content/plugins/amp/includes/utils/class-amp-dom-utils.php:65
Stack trace:
#0 /blog/path/wp-content/plugins/amp/includes/utils/class-amp-dom-utils.php(324): AMP_DOM_Utils::get_dom('<html><head><me...')
#1 /blog/path/wp-content/plugins/amp/includes/templates/class-amp-content-sanitizer.php(27): AMP_DOM_Utils::get_dom_from_content('<h2>VBscript \xED\x8C...')
#2 /blog/path/wp-content/plugins/amp/includes/templates/class-amp-content.php(185): AMP_Content_Sanitizer::sanitize('<h2>text...', Array, Array)
#3 /blog/path/wp-content/plugins/amp/includes/templates/class-amp-content.php(118): AMP_Content->sanitize('<h2>text...')
#4 /blog/path/wp-content/plugins/amp/includes/templates/class-amp-content.php(76): AMP_Content->transform()
#5 /blog/path/wp-content/plugins/amp/includes/templates/class-" while reading response header from upstream, client: ###.###.###.###, server: ###.###.###.###, request: "GET /p/20181003000000?amp=1 HTTP/2.0", upstream: "fastcgi://unix:/var/run/php-fpm.sock:", host: "###.###.###.###"

여기서 확인해야 할 부분은 첫 부분입니다.

33598 FastCGI sent in stderr: “PHP message: PHP Fatal error: Uncaught Error: Class ‘DOMDocument’ not found in /blog/path/wp-content/plugins/amp/includes/utils/class-amp-dom-utils.php:65

 

문제가 발생한 부분을 살펴보면 DOMDocument 클래스를 찾을 수 없어 PHP 실행 에러가 발생한 것입니다.

 

 

해결 방법


이 문제는 웹 서버에 PHP DOM 확장(PHP DOM Extension)이 설치되지 않아서 발생하는 문제입니다.

 

이제 해당 DOM 확장을 설치하기 위해 웹 서버로 접속해보겠습니다. (만약 웹 호스팅 서비스를 사용하는 경우 서버에 직접적으로 접근할 수 없기 때문에 호스팅 관리업체에 문의해야 합니다.)

 

웹 서버의 원격 터미널(SSH 또는 TELNET 등의 프로토콜 이용)이나 직접 서버 장비에 접근할 수 있다면 해당 장비에서 터미널을 엽니다.

터미널에서 관리자 계정으로 패키지를 설치해야 하기 때문에 su 명령어로 root 계정으로 전환합니다.

[user@localhost ~]$ su -
Password:

 

이제 현재 설치된 PHP의 버전에 맞는 패키지를 설치해야 합니다.

현재 PHP 버전을 확인하려면 아래 명령어를 입력하여 확인할 수 있습니다.

[root@localhost ~]# php -v
PHP 7.2.10 (cli) (built: Sep 11 2018 11:22:20) ( NTS )
Copyright (c) 1997-2018 The PHP Group
Zend Engine v3.2.0, Copyright (c) 1998-2018 Zend Technologies

 

 

운영체제가 Debian 계열이거나 Ubuntu인 경우는 다음 패키지 이름으로 설치해야 합니다.

  • PHP 5.x 버전인 경우 – php5-dom 또는 php-dom
  • PHP 7.x 버전인 경우 – php7.0-xml 또는 php-xml 또는 php-dom

 

반면 운영체제가 RedHat 계열이거나 CentOS, Fedora를 사용하고 있다면 다음 패키지 이름으로 설치해야 합니다.

  • PHP 5.x 버전인 경우 – php5-xml 또는 php-xml
  • PHP 7.x 버전인 경우 – php70w-xml 또는 php-xml

 

 

PHP 패키지가 다른 패키지 저장소(repo)에서 설치되었거나 5.3 이나 7.2와 같이 마이너 버전이 붙었다면 패키지 이름에 버전을 붙이는 경우가 있으므로 주의해주세요.

  • 예를 들면 다음과 같습니다 : php53-dom / php70-xml

패키지 검색으로 해당 패키지 설치명이 존재하는지 확인하는 것을 권장합니다.

 

apt 또는 yum 등의 패키지 관리자를 사용 중이면 각자에 맞는 패키지 설치 명령어를 사용하여 DOM Extension을 설치해줍니다. 여기서는 yum을 사용한다고 가정해보겠습니다.

[root@localhost ~]# yum install php-xml

 

 

설치가 완료되었다면 웹 서비스를 재시작해야 합니다. 아래 명령어를 참고하여 서비스를 다시 시작해줍니다.

 

Apache2 (Ubuntu, Debian 계열)

[root@localhost ~]# service apache2 restart

 

HTTPD / NginX (CentOS, RedHat 계열)

[root@localhost ~]# service nginx restart
또는
[root@localhost ~]# service httpd restart

 

PHP-FPM 서비스를 사용 중인 경우 혹시모르니 이 서비스 또한 재시작해줍니다.

[root@localhost ~]# service php-fpm restart

 

 

참고자료

JooTC

안녕하세요. 테크놀로지에 관심이 많은 블로거입니다.

Recent Posts

[iOS] Xcode ‘You do not have required contracts to perform an operation’ 해결

Xcode에서 iOS 애플리케이션을 빌드(Archive)하고 App Store Connect에 앱을 업로드하는 도중, 아래와 같은 에러가 발생하면서 더…

1개월 ago

[안드로이드] INSTALL_FAILED_INSUFFICIENT_STORAGE 해결

INSTALL_FAILED_INSUFFICIENT_STORAGE 문제 안드로이드 스튜디오에서 에뮬레이터를 실행하고 개발중인 애플리케이션을 실행하려 하면 로그 창에 아래와 같이 표시되면서…

7개월 ago

Zalgo 텍스트와 이를 방지하는 방법

인터넷 커뮤니티 사이트에서 게시글이나 댓글에 간혹 장난을 목적으로 작성된 특이한 글자를 볼 수 있습니다. 위…

9개월 ago

리눅스 kill, killall 명령어 – 특정 프로세스 종료하기

리눅스 명령어 - kill, killall 리눅스 kill 명령어는 특정 프로세스를 종료해주는 명령어입니다. 백그라운드에서 실행되고 있는…

9개월 ago

JavaScript typeof null이 ‘object’인 이유

JavaScript는 역사가 긴 스크립트 프로그래밍 언어입니다. 세월이 흐르면서 많은 자바스크립트 표준이 만들어졌고, 현재는 많은 문법적…

9개월 ago

Mocha Error: Resolution method is overspecified. 해결 방법

NodeJS 테스트 프레임워크인 Mocha는 비동기 테스트를 지원합니다. 간혹 특정 테스트 스크립트를 작성하고 실행하면 아래와 같이…

9개월 ago