php

「404・403・500って何?」エラー番号から原因を探す方法

PHPで作ったページをサーバーにアップして、ブラウザで開いてみる。

すると突然、

404 Not Found

と表示された。

直したと思ったら、今度は、

403 Forbidden

さらに別のページでは、

500 Internal Server Error

……数字が変わった。

これ、全部同じ「エラー」なのでしょうか?

実は、かなり違います。

そしてこの数字の意味が少し分かるだけで、

「どこを調べればいいのか」

をかなり絞り込めるようになります。

AIにエラーを相談するときにも役立つので、今回は404・403・500の違いを覚えていきましょう。


事件発生:send.phpを開いたら「404」

たとえば、お問い合わせフォームを作っていたとします。

フォームの送信先は、

<form action="send.php" method="post">

送信ボタンを押したところ、

404 Not Found

と表示されました。

ここで、

「PHPのプログラムが間違っている!」

と思って、すぐにsend.phpのコードを書き直したくなるかもしれません。

でも、ちょっと待ってください。

404なら、PHPの中身より先に確認したいことがあります。

なぜなら404は、

「その場所に、要求されたものが見つからない」

という意味だからです。


404・403・500は「何が起きたか」を教えてくれる

Webサイトを開くと、ブラウザとWebサーバーの間では通信が行われています。

ものすごく簡単にすると、

ブラウザ
   ↓
「このページください」
   ↓
Webサーバー
   ↓
「はい、どうぞ」

というやり取りです。

このときWebサーバーは、

「リクエストをどう処理したのか」

を数字でも返しています。

これがHTTPステータスコードです。

普段はあまり意識しませんが、正常にページを表示できたときにもステータスコードは返されています。

有名なのが、

200 OK

です。

つまり、

200 → OK!

404 → 見つからない!

403 → 見せられない!

500 → サーバー側で問題発生!

という具合です。

最初から全部覚える必要はありません。

PHPを勉強し始めた段階なら、まずはこの違いが分かれば十分です。


404 Not Found:そこに見つからない

まずは、よく見る404です。

404 Not Found

これは、

「指定されたURLに目的のものが見つからない」

という意味です。

たとえば、

https://example.com/form/send.php

へアクセスしたのに、実際には、

/form/
    index.php

/php/
    send.php

という配置だったらどうでしょう。

formフォルダの中にsend.phpはありません。

そのため404になる可能性があります。

404が出たら、まず確認すること

  • ファイルは本当にアップロードされているか
  • ファイル名は間違っていないか
  • フォルダの場所は合っているか
  • URLは合っているか
  • 相対パスの指定を間違えていないか
  • 大文字・小文字を間違えていないか

前回扱った**「相対パス・絶対パス」**が、ここでつながってきます。

404が出たからといって、

PHPのプログラムそのものが壊れているとは限りません。

そもそも目的のPHPファイルまでたどり着けていない可能性があるわけです。


403 Forbidden:あるけれど、アクセスできない

続いて、

403 Forbidden

です。

Forbiddenは「禁止された」という意味です。

かなりざっくり言えば、

「そこにアクセスすることは許可されていません」

という状態です。

404とは違います。

イメージしてみましょう。

404は、

お店を探した
↓
その住所にお店がない

403は、

お店は見つかった
↓
でも「関係者以外立入禁止」と書いてある

という違いです。

403が出たら確認したいこと

たとえば、

  • ファイルやディレクトリの権限
  • .htaccessによるアクセス制限
  • サーバー側のセキュリティ設定
  • アクセスを禁止する設定が入っていないか

などです。

レンタルサーバーによっては、WAFなどのセキュリティ機能が関係するケースもあります。

ここで大切なのは、

403を見て、ファイルの場所ばかり探し続けないこと。

404とは調べる方向が変わります。


500 Internal Server Error:サーバー側で処理できなかった

そしてPHPで遭遇しやすいのが、

500 Internal Server Error

です。

これは、

「サーバー側で処理しようとしたけれど、正常に処理できなかった」

というエラーです。

PHPを書いていて500になった場合は、

<?php
echo "Hello"

のようなPHPの記述ミスが原因になっていることもあります。

この例なら、

echo "Hello";

の最後の;が抜けています。

ほかにも、

  • PHPの構文エラー
  • .htaccessの記述ミス
  • サーバー設定の問題
  • PHPの実行環境に関する問題

など、原因はいくつも考えられます。

500の場合は、

「ファイルがない」というより、「処理しようとして失敗した」

と考えると、404との違いが分かりやすくなります。


3つを一度整理しよう

ここまでで、今回一番覚えてほしい部分です。

エラーざっくり意味最初に疑うところ
404 Not Found見つからないURL・ファイル名・パス・配置
403 Forbiddenアクセスできない権限・アクセス制限・サーバー設定
500 Internal Server Errorサーバー側で処理失敗PHP・.htaccess・サーバー側の処理

この表を暗記する必要はありません。

エラーが出たとき、

「404だったら、まず場所だな」

「403なら、アクセスを拒否されている理由を探そう」

「500なら、PHPなどサーバー側の処理を調べよう」

くらいの判断ができればOKです。


じゃあ「200」は何?

エラー番号だけではありません。

正常にページが表示されたときによく返されるのが、

200 OK

です。

名前のとおり、

正常に処理できました

という意味です。

つまりHTTPステータスコードは、

エラー番号ではなく、Webサーバーから返ってくる「処理結果のお知らせ」

なんです。

その中に404や500といったエラーを示すものがある、と考えると分かりやすいでしょう。


先頭の数字にも意味がある

ここで少しだけレベルアップします。

HTTPステータスコードは、先頭の数字で大まかな種類が分かれています。

1xx → 処理中・情報

2xx → 成功

3xx → リダイレクトなど

4xx → リクエスト側に関係する問題

5xx → サーバー側の問題

初心者の段階で全部覚える必要はありません。

まず役立つのは、

2なら成功、4ならアクセスする側の指定などを確認、5ならサーバー側を確認

くらいです。

ただし、これはあくまで大分類です。

たとえば403にはサーバーのセキュリティ設定が関係することもあります。

「4xxだから絶対に自分だけが悪い」のように決めつけるのではなく、原因を探すための最初の方向づけとして使いましょう。


AIに聞くときも「500エラーです」まで伝えよう

ここがAI時代には特に重要です。

ChatGPTなどに、

PHPが動きません。直してください。

とだけ聞くより、

PHPファイルをサーバーにアップしました。
ブラウザからアクセスすると500 Internal Server Errorになります。

と伝えたほうが、AIも原因を絞り込みやすくなります。

404なら、

send.phpへ送信すると404 Not Foundになります。
index.phpとsend.phpは同じフォルダに置いています。

403なら、

PHPファイルへ直接アクセスすると403 Forbiddenになります。

といった具合です。

さらにコードやファイル構成、利用しているサーバーなどを伝えれば、もっと調査しやすくなります。

AIに全部任せるとしても、

「何が起きているのか」を人間側が少し理解していると、AIへ渡せる情報の質が上がります。

これが、オコジョキャンパスでPHPの基礎を学ぶ理由のひとつです。


エラーが出たら「数字を検索」していい

そして、もうひとつ大事なこと。

HTTPステータスコードを暗記しなくても大丈夫です。

たとえば、

403 Forbidden

が出たなら、

403 Forbidden 原因

と検索して構いません。

500なら、

PHP 500 Internal Server Error 原因

と調べればいい。

AIにそのままエラー文を貼って、

このエラーはどういう意味?
まず何を確認すればいい?

と聞く方法もあります。

大切なのは暗記ではなく、

「この数字には意味がある」と知っていること。

知らなければエラー画面を閉じて終わってしまいます。

知っていれば、エラー番号そのものを調査の手がかりにできます。


エラー画面は「敵」ではなくヒント

初心者のうちは、エラーが出ると、

「壊した!」

と思ってしまいがちです。

でも、エラー番号はむしろ逆です。

サーバーが、

404ですよ
403ですよ
500ですよ

と教えてくれています。

つまり、

「どの方向を調べればいいのか」というヒントを出してくれている

わけです。

エラーが出たら、すぐ画面を閉じるのではなく、

まず番号を見る。

これだけでも、Web制作のトラブル調査はかなり変わります。


今日の合格ライン

今回はHTTPステータスコードについて触れましたが、全部覚える必要はありません。

今日持ち帰ってほしいのは、この4つだけです。

200 → 成功

404 → 見つからない

403 → アクセスできない

500 → サーバー側で処理に失敗した

そしてもうひとつ。

エラー番号を見たら、その数字を手がかりに原因を探す。

ここまでできれば合格です。


ワンポイント答え合わせ

最後に問題です。

フォームの送信ボタンを押したところ、

404 Not Found

になりました。

最初にすることとして、どちらがよいでしょう?

A:send.phpのPHPコードを全部書き直す

B:send.phpの場所・ファイル名・フォームのactionを確認する

答えは、

Bです。

404は「見つからない」というヒントを出しています。

PHPの中身を直す前に、

そもそもsend.phpへ正しくたどり着けているのか?

を確認してみましょう。

エラー番号が読めるようになると、

「とりあえずコードをいじる」から「原因を考えて調べる」へ変わります。

AIにコードを書いてもらえる時代でも、この力は役に立ちます。

☆ この授業をあとで見返す

学生登録(無料)すると、お気に入りに保存できます。授業は登録しなくても読めます。

☆ この授業をあとで見返す

学生登録(無料)すると、お気に入りに保存できます。授業は登録しなくても読めます。