You dont have javascript enabled! Please download Google Chrome!
INIDOG
500-internal-server-error

Uncaught Error: Class ‘DOMDocument’ not found 해결

500-internal-server-error

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

 

 

참고자료

이 글에 대해 어떻게 생각하시나요?
유용한 포스트였나요? 여러분의 의견을 하단의 Vote와 댓글로 남겨주세요 🙂
유용합니다!
아쉽습니다.

여러분의 의견을 댓글로 남겨주세요.

avatar
error: 경고: 콘텐츠가 보호되고 있습니다. 복사 및 무단 사용을 금지합니다.