문제해결

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

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

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

4주 ago

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

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

4주 ago

JavaScript typeof null이 ‘object’인 이유

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

1개월 ago

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

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

1개월 ago

윈도우 11 설치 시 Microsoft 계정 로그인 없이 로컬 계정 만들기

언제부턴가 윈도우 11을 처음 설치할 때 마이크로소프트(Microsoft) 계정 로그인을 강제로 요구하게 되었습니다. 물론 마이크로소프트 계정이…

6개월 ago

에어팟 프로 2 케이스 스피커 소리를 완전히 끄는 방법

애플 에어팟 프로 2 (AirPods Pro 2) 케이스에는 스피커가 내장되어 있습니다. 그런데 간혹 아무 것도…

9개월 ago