워드프레스 사이트를 만들고 있었는데, 설치 직후 정상적으로 접근할 수 있는 증상을 발견했는데, 로그인 페이지에서 접속하자 화면이 비어 들어갈 수 없어서 해결 방법에 대한 메모를 남기려고 했습니다.
위 사례 연구는 Codex에 게시되었지만, 이에 상응하는 원인이나 해결책이 없어서 오류 로그를 확인했습니다.
[code light="true"] PHP 치명적 오류: 32번 라인의 /var/www/html/wp-admin/admin.php에서 정의되지 않은 함수 get_option()를 호출, 참조 http://***/wp-login.php[/code]. 오류는 get_option 함수가 관리자 화면의 본문 admin.php에 정의되어 있지 않다고 나옵니다. 참고로, 제가 설치한 워드프레스 버전은 3.4.1(2012년 8월 29일 기준 최신 버전)입니다.
이번에는 매뉴얼 사이트에서 해당 기능을 확인해보니 get_option()가 wp-includes/functions.php에 정의되어 있었습니다. 그래서 wp-admin/admin.php의 소스를 따라가보니, 30줄에서 wp-load.php_once가 required\ 되어 있었습니다. wp-load.php에서는 48번째 라인에서 load.php_once require\로 나오고, 이어서 wp_load_translations_early()가 호출되었습니다.
load.php의 668행에 정의된 wp_load_translations_early 함수에서는 해당 functions.php가 필요_once이므로 처리를 포함하기 전에 반환되었을 가능성이 있습니다... 조사해 보았습니다.
하지만 변수를 아무리 해석해도 이해가 안 돼_dump... 흠, 곤란해졌네.
──그래서 비슷한 증상이 있는지 인터넷에서 찾아봤더니 찾았어.
원래 영어 버전의 워드프레스 포럼에는 같은 오류에 중독된 사람들을 위한 해결책이 있었습니다.
처음부터 온라인에서 찾았다면 어렵지 않았을 텐데...
wordpress.org/support/topic/wp-301-apc-314-php-533-white-wp-adnmin-page
APC(Alternative PHP Cache)라는 PHP 가속기가 잘 안 되고 있는 것 같습니다.
APC 자체는 컴파일된 PHP 파일을 캐시하여 PHP를 더 빠르게 실행하는 가속기 모듈이며, 기본 설치 상태에서도 속도 차이가 느껴질 정도로 뛰어난 것 같습니다. 우선, 문제는 APC가 나쁘다는 것이 아니라 APC 설정이 워드프레스에 최적화되어 있지 않다는 점인 것 같습니다.
그래서 빌드 서버(CentOS 5)를 확인했을 때, APC가 실제로 설치되어 있었습니다. APC 정보를 확인하려면,
[code lang="shell" light="true"]ln -s /usr/share/pear/apc.php /var/www/html/apc.php[/code] ... 문서 루트에서 심볼 링크를 생성하고 접근하면, APC 버전은 3.1.9입니다(참고로 PHP 버전은 5.3.16).
**이제 해결 방법을 알려드릴게요. **
- 먼저 APC 구성 파일(/etc/php.d/apc.ini)을 열고 apc.include_once_override 설정을 끕니다.
[코드 lang="php" light="true"]apc.include_once_override=0[/code] - 위의 설정 파일이 php.d에 없으면,
[code lang="shell" light="true"]echo "extension=apc.so" > /etc/php.d/apc.ini[/code] 그리고 1에 설정을 추가하세요. - 아파치 재시작.
[코드 lang="shell" light="true"]apachectl graceful[/code] 또는 [code lang="shell" light="true"]service httpd restart[/code]
이제 워드프레스 관리자에 성공적으로 로그인할 수 있습니다.
워드프레스 동작은 설치된 환경에 따라 달라집니다... 이 사례는 저에게 다시 한 번 느끼게 해주었습니다.
다음에 비슷한 상황에 처한다면, 먼저 APC 설치 상태를 확인해야 합니다...