PHP 8で500エラー!引用符1文字のミスが偶然動いていた理由

PHP 8への変更でスマートクォートが原因のWordPress 500エラーを調査するイメージ

WordPressのPHPを7.4から8.3へ変更した直後、突然500エラーになった――。このような場面では、プラグインやテーマだけでなく、wp-config.phpに紛れ込んだ「見た目ではほとんど分からない1文字」が原因になることがあります。

今回、実際の調査で見つかったのは、半角の引用符と非常によく似た「スマートクォート」でした。重要なのは、PHP 7.4で正常だったのではなく、間違ったコードを古いPHPが警告だけで偶然動かしていただけという点です。

よこやま良平
よこやま良平

20年以上ITエンジニアとして、WordPress・PHPの制作や復旧に携わっている、よこやま良平です。今回は、PHPのバージョンアップで表面化した、初心者には見分けにくい設定ファイルのミスを実例から解説します。

この記事で解決できること
  • 普通の引用符とスマートクォートの違いが分かる
  • なぜ間違ったコードがPHP 7.4で動いたのか理解できる
  • PHP 8.3で500エラーになった仕組みが分かる
  • 自分で修正してよい範囲と専門家へ依頼すべき場面を判断できる

設定ファイルは、たった1文字を間違えただけでもサイト全体を停止させます。検索で見つけたコードをそのまま貼り付けたり、Wordやメールで編集したりするのは危険です。

原因を理解しないまま「とりあえず置き換える」「エラー表示を消す」といった作業をすると、別の障害や情報漏えいにつながります。よく分からない場合は、下手に触らず、最初からWordPressとPHPを扱える専門家へ依頼してください。

【無料プレゼント】
WordPress緊急チェック50

「自分のサイトは今、安全なのか?」
自信を持って答えられますか?

WordPress緊急チェック50

こんなお悩みはありませんか?

  • ある朝、サイトを開いたら真っ白画面になっていた
  • 管理画面にログインできなくなって手が止まった
  • 身に覚えのない記事やページが勝手に増えていた
  • プラグインを更新したらサイト全体が崩れてしまった
  • 以前バックアップを取ったか自分でも覚えていない

累計1,000件以上のWordPressトラブル対応の経験から、「壊れる前に備える」ためのチェックリストを1冊にまとめました。
ログイン・本体・バックアップ・サーバー・運用の5分野を、50項目で「危険度・確認方法・対処法」まで解説しています。

セキュリティプラグイン・WordPressの教科書も含めた3大特典を、
今なら無料で受け取れます。

今すぐ無料ダウンロードする →

※登録後すぐにメールで特典をお届けします

WordPress 500エラーの原因は見分けにくい引用符だった

結論からいうと、今回の直接原因になり得る記述は、wp-config.phpに入力されたスマートクォートです。普通の半角引用符に見えますが、PHPにとってはまったく別の文字です。

問題のコードは一見すると正しく見える

今回のファイルには、投稿リビジョンを停止するため、次のような記述が入っていました。左右の引用符に注目してください。

define(‘WP_POST_REVISIONS’, false);

上記の「‘」「’」は、スマートクォート、カーブクォート、左右引用符などと呼ばれる文字です。文章としては読みやすい装飾ですが、PHPの文字列を囲む記号としては使えません。

正しくは、キーボードから入力できる半角のまっすぐなシングルクォート「’」を使います。

define('WP_POST_REVISIONS', false);
見た目が似ていても同じ文字ではありません

「’」はプログラムで使う半角引用符、「‘」「’」は文章を見やすくする装飾用の引用符です。人の目には似ていても、コンピューター内部では異なる文字コードを持っています。

スマートクォートはソフトが自動変換する

スタッフが意識して特殊文字を入力したとは限りません。Word、Pages、メール、チャット、メモアプリなどには、入力した引用符を自動的に美しい形へ変換する機能があります。

スマートクォートが混入しやすい操作
  • WordやPagesでコードを編集した
  • メールやチャットにコードを貼り付けて受け渡した
  • Web記事の表示部分からコードをコピーした
  • スマート引用符が有効なメモアプリを使った
  • 生成AIの回答を確認せず、そのまま設定ファイルへ貼り付けた

PHPファイルは、VS CodeやCotEditorなど、プログラムを扱えるテキストエディターで編集すべきです。ただし、コード向けエディターを使えば必ず安全という意味ではありません。内容を理解し、バックアップと動作確認まで行う必要があります。

PHP 7.4で動いたのは正しかったからではない

ここが今回もっとも重要です。PHP 7.4でサイトが表示されていたのは、コードが正しかったからではありません。PHP 7.4が間違いを警告しながら、文字列だと推測して処理を続けたため、偶然止まらなかっただけです。

PHPはスマートクォートを文字列の囲みとして認識しない

正しいコードでは、'WP_POST_REVISIONS'全体が文字列です。しかしスマートクォートを使うと、PHPは「引用符で囲まれた文字列」として読めません。

PHPの定数名には、英字や数字だけでなく、一定範囲のASCII以外のバイトも使用できます。そのため、スマートクォートを含む部分が「未定義の定数名」のように解釈される場合があります。

初心者向けにたとえると

PHPへ「この名前の定数を渡して」と命令したものの、その定数は登録されていませんでした。PHP 7.4は「本当は同じ名前の文字列を渡したかったのだろう」と勝手に推測して続行した、という状態です。

PHP 7.4は警告を出しながら文字列として扱った

PHP公式マニュアルでは、PHP 8.0より前の未定義定数は「bare word string」、つまり引用符のない単語を文字列として解釈していたと説明されています。PHP 7.2以降はE_WARNINGが発生しますが、処理そのものは継続しました。

ところがWordPress本番環境では、エラーや警告を画面に表示しない設定が一般的です。今回のファイルでもWP_DEBUGfalseだったため、利用者の画面には警告が見えなかったと考えられます。

define('WP_DEBUG', false);

画面に警告が出ないことと、コードが正しいことは別問題です。エラー表示が消されていたため、何年も前から存在していた間違いが見えず、「問題なく動いている」と誤認されていた可能性があります。

正常稼働ではなく偶然の延命です

PHP 7.4が間違いを修正したわけでも、安全性を保証したわけでもありません。「警告を出したが、昔の互換動作で停止しなかった」というだけです。将来壊れることが最初から決まっていた、隠れた不具合と考えるべきです。

本来のリビジョン停止設定も効いていなかった可能性がある

仮にPHP 7.4がスマートクォートを含む部分を文字列へ変換しても、それは本来のWP_POST_REVISIONSとは同じ名前ではありません。スマートクォートまで含んだ別名の定数を定義した可能性があります。

つまり「500エラーにならなかった」だけで、設定したつもりのリビジョン停止は効いていなかった可能性が高いのです。動いたように見えることと、意図どおり動作することも区別しなければなりません。

PHP 8.3で500エラーになった理由

PHP 8.3で500エラーになった理由は、PHP 8.0から未定義定数に対する古い救済動作が廃止され、致命的なErrorとして処理を停止するようになったためです。

PHP 8では「推測して続行」が廃止された

PHP 8.0の下位互換性のない変更点には、未定義の非修飾定数へアクセスした場合、それまでの「警告を出して文字列として解釈する」動作がErrorへ変更されたと明記されています。

PHP 7.4とPHP 8.3の違い
  • PHP 7.4:未定義定数を警告し、文字列と推測して処理を続行
  • PHP 8.3:未定義定数としてErrorを発生させ、処理を停止

これはPHP 8.3だけの特殊な変更ではなく、PHP 8.0から続く仕様です。PHP 7.4から8.0、8.1、8.2、8.3へ移行する際、古いコードに潜んでいた誤りが一斉に表面化することがあります。

致命的エラーがWordPressでは500エラーに見える

wp-config.phpは、WordPress本体を読み込む前の重要な設定ファイルです。ここで致命的なエラーが起きると、WordPressは管理画面も公開ページも最後まで生成できません。

サーバー側ではPHPのUndefined constantなどが記録されていても、ブラウザには詳しい内容を出さず、「500 Internal Server Error」や真っ白な画面だけを返すことがあります。

PHPを元に戻すだけでは根本解決にならない

緊急避難としてPHP 7.4へ戻すと、画面が再表示される場合があります。しかし、それは間違ったコードを再び古いPHPの救済動作で動かしているだけです。

古いPHPを使い続けると、セキュリティ更新や対応プラグインの面でも問題が残ります。PHPを戻して終わりにせず、ログとコードを確認し、PHP 8系で正常に動く状態へ修正する必要があります。

WordPress設定ファイルを自己流で触るのは危険

初心者が原因を理解しないままwp-config.phpを編集するのはおすすめしません。このファイルはデータベース接続情報や認証鍵も含み、サイト全体の起動とセキュリティに直結するからです。

検索結果のコードをそのまま貼らない

インターネットの記事には、古いPHP向けのコードや、環境によって使えない設定もあります。また、装飾されたWebページからコピーしたときに、引用符やハイフンが別の文字へ変わることもあります。

コードの意味、挿入位置、対象バージョン、元へ戻す方法が分からない場合は貼り付けないでください。「一行だけだから大丈夫」という判断が、サイト全体の500エラーを生みます。

やってはいけない対応
  • バックアップを取らずに設定ファイルを上書きする
  • Wordやメール本文でPHPファイルを編集する
  • エラーメッセージを検索し、理解せずコードを追加する
  • 本番サイトだけでPHPのバージョンを切り替える
  • 動いたという理由だけで古いPHPへ戻して放置する

データベースが原因に見えても設定ファイルを先に確認する

新規インストールでは表示され、既存データベースを適用すると500エラーになる場合、データベース内の有効プラグイン、テーマ、シリアライズされた設定値などを疑うのは合理的です。

しかし調査中にwp-config.phpの明確なPHP 8非互換記述が見つかったなら、まずそこを修正して再検証すべきです。原因候補を一つずつ排除しないと、「データベースが原因」という最初の仮説に引っ張られます。

修正前に必要な最低限の安全対策

どうしても自分で確認する場合でも、いきなり本番ファイルを編集してはいけません。最低限、次の順番を守ってください。

  1. ファイルとデータベースの完全バックアップを取得する
  2. 現在のPHP・WordPress・テーマ・プラグインのバージョンを記録する
  3. ステージング環境または複製環境で再現を確認する
  4. PHPのエラーログから、最初に発生した致命的エラーを確認する
  5. 一度に一か所だけ修正し、修正前後を比較する
  6. 公開ページ、管理画面、投稿、フォームなどを確認する

WordPress 500エラーは下手に触らず専門家へ依頼する

PHPやWordPressの設定に慣れていないなら、下手に触らず専門家へ依頼するのが正解です。500エラーは、原因と無関係な場所を変更するほど復旧が難しくなります。

「1文字だけ直す」でも周辺確認が必要

今回のスマートクォートは、正しい半角引用符へ置き換えれば直接のエラーを解消できる可能性があります。しかし、同じ方法で編集された別の行やファイルにも、同種の文字が残っているかもしれません。

また、引用符を直したあとに別のPHP 8非互換コードが続けてエラーになる場合もあります。最初のエラーが消えたことだけで復旧完了と判断せず、ログとサイト全体の動作を確認する必要があります。

専門家には原因調査から復旧確認まで依頼する

依頼時には「PHP 7.4から8.3へ変更した」「新規インストールは動く」「既存データベースを適用すると500になる」など、分かっている事実をそのまま伝えてください。自分で推測した原因だけに限定しないことが大切です。

専門家へ伝える情報
  • 変更前と変更後のPHPバージョン
  • 500エラーが発生した日時と直前の作業
  • サーバー会社と契約プラン
  • バックアップの有無と取得日時
  • すでに変更したファイルや設定
  • 可能であればPHP・Webサーバーのエラーログ

WordPressスマートクォート問題のよくある質問

スマートクォートとPHPバージョンアップについて、よくある疑問を整理します。

Q
スマートクォートはキーボードから入力したものですか?
A

意図的に入力したとは限りません。Word、Pages、メモ、メールなどが、通常の引用符を自動的にスマートクォートへ変換することがあります。

Q
PHP 7.4で表示できていたなら問題ないのでは?
A

問題があります。PHP 7.4は未定義定数を警告しながら文字列と推測する古い動作を持っていたため、偶然停止しなかっただけです。正しいコードだったわけではありません。

Q
PHPを7.4へ戻せば解決しますか?
A

一時的に表示が戻る可能性はありますが、根本解決ではありません。間違ったコードを修正し、PHP 8系でテーマやプラグインを含めて動作確認する必要があります。

Q
引用符だけ自分で置き換えても大丈夫ですか?
A

バックアップ、エラーログ、編集方法、復旧手順が分かる方なら検証できます。どれか一つでも不明なら、本番ファイルを直接触らず専門家へ依頼してください。

WordPress 500エラーは「偶然動いていた」を見逃さない

今回の500エラーは、半角引用符にそっくりなスマートクォートがwp-config.phpへ入り、PHP 8.3で未定義定数のErrorとして表面化した可能性が高い事例です。

PHP 7.4で表示されていたのは、正しかったからではありません。警告を画面に出さず、古いPHPが間違いを文字列だと推測したため、偶然動いていただけです。

今回の重要ポイント
  • スマートクォートと半角引用符は別の文字
  • PHP 7.4は誤りを警告しつつ処理を続ける場合があった
  • PHP 8では未定義定数が致命的なErrorになる
  • 古いPHPへ戻すだけでは根本解決にならない
  • 設定ファイルが分からないなら下手に触らず専門家へ依頼する

WordPressは、表面上動いていても、内部に古いコードや設定ミスを抱えていることがあります。バージョンアップは不具合を作ったのではなく、以前から隠れていた不具合を見つけるきっかけになるのです。

原因を理解できない状態でファイルやデータベースを触ると、復旧できる状態まで壊す恐れがあります。「よく分からないけれど試してみる」はやめて、現状を保ったまま専門家へ相談してください。

WordPress 500エラーが自分で直せない時は

WordPressのトラブル、マルウェア感染・即解決。ワードプレスを復旧します。即日対応。全額返金保証で安心

ワードプレスのWordPressエラートラブル解決をしたいなら
クイックレスキューが解決します。

こんなお悩みはありませんか?

・WordPressが真っ白画面
・WordPressがログインできない
・ホームページのマルウェアや乗っ取り
・サイトの表示くずれ
・エラーが表示されている

これらでお悩みなら最短30分ですぐに解決します!

いまなら期間限定で

3つの安心

・万一改善されない場合は全額返金保証で安心!
30日間動作保証で安心!
初期費・調査料 0円で安心!

\無料調査・全額返金保証付き/

今すぐ無料で相談する

この記事を書いた人

よこやま良平

こんにちは!20年以上ITエンジニアとして活動してきた
よこやま良平です。

Wordpress復旧やサイト修復、オンライン講座では
200件以上のレビューを頂いており

「すぐに復旧してくれる!」
「当日行ってくれて助かった!」など

評価は4.9/5.0と非常に高く好評です。

またWordPress、SEO、Officeなど25冊以上の書籍を出版しており、
売上ランキング1位を連続で獲得致しました。

その他これまでに3000以上のサービス・システム・サイトを作成。

多くの方の「できない」や「悩み」を解決してきました。
その観点からわかりやすく解説しています。