PHP 8로 업그레이드 시 오류 500

 
PHP 8로 업그레이드 시 오류 500

작년 11월 PHP 8을 출시했습니다. 성능, 속도 및 보안이 일부 개선되었다고 발표했습니다.

여느 땜장이처럼 7.4, 특히 현재 서버에서 실행 중인 버전인 7.4.16으로 업그레이드하기 위해 달려갔습니다.

플로프! 500 오류가 발생하여 사이트 전체가 다운됩니다. URL이 확인되지 않습니다.

저는 일반적인 테스트 를 클릭하여 모든 플러그인을 비활성화하고 기본 템플릿을 사용하세요. 오류 500이 사라지지 않습니다.

충격을 받았지만 아직 업그레이드하기에는 너무 이르다고 판단했고, 모든 플러그인 및 템플릿 작성자가 PHP 8과 호환되도록 코드를 업데이트할 때까지 기다리는 것이 최선이라는 조언에 따라 이 문제를 넘겼습니다.

거의 7개월이 지난 후 다시 시도했지만 500 오류가 여전히 발생했습니다.

오류의 원인이 이 블로그에만 있다는 첫 번째 단서는 동일한 서버에 있는 다른 두 개의 워드프레스 설치에서는 모든 것이 정상적으로 작동한다는 것입니다.

500 오류는 여러 가지 이유로 나타날 수 있습니다. 다음 논리적 단계는 오류 로그를 가져와서 무엇이 문제인지 파악하는 것입니다. 다음과 같은 일련의 경고가 나타납니다:

PHP Warning: Use of undefined constant minor – assumed ‘minor’ (this will throw an Error in a future version of PHP) in /home/xxxxxx/public_html/blog/wp-config.php on line 11

PHP 경고: 정의되지 않은 상수 마이너 사용 - '마이너'로 가정됨(향후 PHP 버전에서 오류가 발생함).

즉, 상수 주위에 쉼표가 반전되어 있어야 합니다. wp-config.php로 이동하면 다음과 같이 표시됩니다., minor 는 해당 줄에 역 쉼표 없이 표시됩니다.

define (‘WP_AUTO_UPDATE_CORE’, minor);

워드프레스 포럼을 검색해보니 많은 사람들이 플러그인이나 템플릿과의 충돌로 인해 이전 버전의 PHP로 업그레이드할 때 이와 같은 문제를 겪었다는 것을 알 수 있었습니다.

또한 내가 보낸 티켓에서 들었 듯이 문제가 깨진 WordPress 설치와 관련이있을 가능성도 배제 할 수 없습니다 LucusHost.

받은 답변 중 일부는 다음에 쉼표를 거꾸로 추가하기만 하면 문제를 해결할 수 있다고 말합니다. 'minor',그래서 시도해보는 것도 나쁘지 않다고 생각했고, 그렇게 하고 있습니다.

define (‘WP_AUTO_UPDATE_CORE’, ‘minor’);

WP_AUTO_UPDATE_CORE  를 사용하면 마이너, 메이저, 개발 버전에 대한 워드프레스 핵심 업데이트를 제어할 수 있습니다. 이 상수는 여러 가지 방법으로 정의할 수 있습니다. 이 줄을 제거하는 것은 좋은 생각이 아닙니다.

#Disables all core updates:

define( ‘WP_AUTO_UPDATE_CORE’, false );

# Enable all updates, including minor and major updates:

define( ‘WP_AUTO_UPDATE_CORE’, true );

# Enables minor updates:

define( ‘WP_AUTO_UPDATE_CORE’, ‘minor’ );

좋은 소식과 나쁜 소식.

좋은 소식은 이제 PHP 8을 실행하면 500 오류가 사라졌다는 것입니다.

플러그인과 글 모두 언뜻 보기에는 모든 것이 정상적으로 작동하는 것처럼 보입니다.

나쁜 점은 인덱스가 깨져서 다음과 같이 보인다는 것입니다.

PHP 8로 업그레이드 시 오류 500 1

저는 입력 템플릿, 다음으로 만든 Elementor Pro, 빌더가 숨겨진 정크를 남겼을 수도 있지만, 이를 검토하고 완전히 다시 실행한 후 오류의 원인이 거기서 비롯된 것임을 배제했습니다.

이제 템플릿을 계속 삭제합니다. (GeneratePress Premium) 테스트 환경에서는 어디가 고장 났는지 알 수 있지만, 대부분 문제의 핵심이라고 생각되는 워드프레스에서 오래된 코드가 기어 다니거나 필터가 기름때 등으로 막히는 등의 문제가 발생합니다.

누군가가 비슷한 문제를 겪었고 여기에 쓰여진 내용이 도움이되거나 WP에 대해 많이 알고 있고 문제를 해결하는 데 더 많은 단서를 줄 수있는 경우를 대비하여이 메모를 여기에 남겨 둡니다.

최종 수정 사항과 가능한 설명을 찾는 대로 이 게시물을 업데이트하겠습니다.

업데이트

디버그를 활성화한 후 오류 로그를 보면 GeneratePress가 어딘가에서 충돌하고 있다는 단서가 나오는데, 아마도 요소 모듈에 넣은 후크나 필터(또는 다른 것)로 인한 것일 수 있습니다.

GeneratePress 하위 템플릿을 가지고 있기 때문에 이미 길을 잃었고 여기서 어디로 가야할지 모르겠지만 몇 가지 의심이 있기 때문에 아직 임무가 실패했다고 생각하지 않습니다.

Fatal error: Uncaught TypeError: Unsupported operand types: string + int in /home/ public_html/blog/wp-content/themes/generatepress/inc/structure/post-meta.php:169 Stack trace: #0

/home/ public_html/blog/wp-content/themes/generatepress/inc/structure/post-meta.php(419): generate_do_post_meta_item() #1

/home/ public_html/blog/wp-content/themes/generatepress/inc/structure/post-meta.php(538): generate_posted_on() #2

/home/ public_html/blog/wp-includes/class-wp-hook.php(292): generate_post_meta() #3

/home/ public_html/blog/wp-includes/class-wp-hook.php(316): WP_Hook->apply_filters() #4

/blog/wp-includes/plugin.php(484): WP_Hook->do_action() #5

/blog/wp-content/themes/generatepress/content.php(48): do_action() #6

/blog/wp-includes/template.php(732): require('/home/ ...') #7

/blog/wp-includes/template.php(676): load_template() #8

/blog/wp-includes/general-template.php(204): locate_template() #9

/blog/wp-content/themes/generatepress/inc/theme-functions.php(587): get_template_part() #10

/blog/wp-content/themes/generatepress/index.php(37): generate_do_template_part() #11

/blog/wp-includes/template-loader.php(106): include('/home/ ...') #12

/blog/wp-blog-header.php(19): require_once('/home/ ...') #13

/blog/index.php(17): require('/home/ ...') #14

{main} thrown in /blog/wp-content/themes/generatepress/inc/structure/post-meta.php on line 169

수정되었습니다! 음, 거의

다행히도 첫 번째 줄이 핵심이었고, 거기서부터 긴 목록의 모든 오류가 트리거되었습니다:

Fatal error: Uncaught TypeError: Unsupported operand types: string + int in /home/ public_html/blog/wp-content/themes/generatepress/inc/structure/post-meta.php:169

PHP 8로 업그레이드 시 오류 500 2

오류의 수수께끼는 저주받은 일부 지원되지 않는 작동에 있었습니다. get_the_time.

여러 정황을 종합해보니 의심이 사실로 확인되었습니다. 이 버그는 업데이트 날짜와 시간을 날짜 메타의 확장으로 표시하는 데 사용되는 함수 스니펫으로 인해 발생했습니다.

무엇보다도, 어떻게 된 일인지는 모하지만 비활성화한 후에도 여전히 존재했습니다. 코드 조각y vaciar caché.

PHP 8로 업그레이드 시 오류 500 3

각 사이트마다 고유한 역사가 있고 잊어버리거나 WP, PHP, 템플릿 또는 플러그인을 업데이트하면 더 이상 호환되지 않을 가능성이 매우 높으므로 다른 사이트에서 잘 작동하는 기능을 사용하지 마세요.

이 스니펫을 제거하면 모든 것이 정상적으로 작동하고 홈페이지가 정상적으로 다시 나타납니다.

셋이 없으면 둘도 없고, 또 다른 실수입니다. 이제 피드지

하지만 아직 떠나지 마세요. 이제 플러그인 Feedzy (아마도) 또는 관련 뉴스 페이지가 깨집니다.

PHP 8로 업그레이드 시 오류 500 4

유료 버전이기 때문에 지원 티켓을 열어 플러그인 개발자에게 PHP 8과 100% 호환되는지(호환되지 않아서 고장난 경우) 알려주거나 힌트를 얻어야 합니다.

2021 년 02 월 07 일 - Feedly는 PHP 8을 사용하여 치명적인 오류를 복제하고 개발자에게 문제를 전달했으며 이제 문제를 해결하기 위해 새 버전의 플러그인이 출시 될 때까지 기다려야합니다.

05/07/2021- 버그에 대한 설명은 이제 해당 버그의 Github.

06/07/2021 - 아직 수정 사항이 포함된 새 버전에 대한 응답이나 릴리스를 하지 않았지만, 이 커밋에서는 이미 다음과 같이 수정되었습니다 문제를 해결하는 코드 라인. 제가 테스트해 본 결과, 철저하고 좋은 테스트가 없는 한 PHP 8은 더 이상 아무것도 깨뜨리지 않는 것 같습니다.

요약하자면 다음과 같습니다.

나쁘지 않습니다. 블로그 전체를 망가뜨렸던 500 오류가 홈 페이지에서만 발생하다가 마침내 하나의 "보조" 페이지에서 해결책을 찾아낸 것만으로도 수리에 투자한 시간에 만족할 수 있습니다.

모든 문제의 핵심은 조사에 있으며, 블로그의 다른 부분에서 소스와 원인을 찾는 데 시간을 할애하세요. 충분한 단서 없이 섣불리 해결책을 시도하면 시간을 낭비하거나 나쁜 방향으로 다른 것을 망칠 수 있습니다.


Suscríbete por email para recibir las viñetas y los artículos completos y sin publicidad

Este blog se aloja en LucusHost

LucusHost, el mejor hosting