こんにちは、Webプログラマの篠田です。
大阪にも、最凶寒波が押し寄せてきています。
暖房が効いているはずのオフィス内でも、寒さを感じるのは私が冷え性だからというわけではないと信じたいです。
本日は、PHPで簡単に「404 Not Found」を調べる方法をご紹介します。
この記事の目次
今さら聞けない「404 Not Found」とは
Webサイトを見ていると、たまに「404 Not Found」と画面に表示され、Webサイトがみられないという経験があると思います。
これは、指定されたURLに該当するWebページが、サーバーに存在しない時に表示されるエラーの1つです。
※「リンク切れ」ともいいます。
Webサイトを作る側としては、品質問題になるため絶対に潰しておきたいエラーでもあります。
「404 Not Found」の見つけ方
もっとも、シンプルな方法はリンクをクリックするということで、見つけることができます。
ただ、中規模以上のWebサイトとなると、クリックするリンクの数も3桁を超えることも、ザラにあります。
それを、1つ1つ調べるのは非常に大変です。
そこで、PHPを使って自動でWebページのリンクが正しいのかを調べる方法をご紹介します。
自動でURLにアクセスしてみる
PHPの関数の中に、「Webサイトを取得する」という「file_get_contents」関数があります。
これを利用することで、指定したURLが存在するかどうかを確認することができます。
使い方は下記のとおりです。
1 2 3 4 5 6 |
<?php if ( file_get_contents("https://alaki.co.jp") !== false) { echo "ページがあります。"; } else { echo "ページがありませんでした。"; } |
問題なく、「ページがあります。」と表示されます。
では、次のように変更をしてみます。
1 2 3 4 5 6 |
<?php if ( file_get_contents("https://alaki.co.jp/2wsx1234") !== false) { echo "ページがあります。"; } else { echo "ページがありませんでした。"; } |
実行すると「
Warning: file_get_contents(https://alaki.co.jp/2wsx1234): failed to open stream: HTTP request failed! HTTP/1.1 404 Not Found 」と「ページがありませんでした。」の2種類のメッセージが表示されます。
存在しないWebページを「file_get_contents」関数に渡すことで、「404 Not Found」を見つけることができました。
同時に「Warning: file_get_contents(…」というPHPのエラーも一緒に表示されてしまいます。
これでは、プログラムとしては利用することができません。
PHPのエラーをうまく抑制する
今回取得したい「404 Not Found」は、エラーではありますがその状態を知りたいという意味では、エラーではありません。
では、このエラーメッセージを出さずに結果だけを利用することはできないでしょうか。
そこで利用するのが「エラー制御演算子」と呼ばれる記号です。
実際に、先程のプログラムに利用してみましょう。
1 2 3 4 5 6 |
<?php if ( @file_get_contents("https://alaki.co.jp/2wsx1234") !== false) { echo "ページがあります。"; } else { echo "ページがありませんでした。"; } |
「file_get_contents」関数の頭に「@」が付きました。
この「@」が、PHPの「エラー制御演算子」です。
「エラー制御演算子」を利用することで、本来表示されるエラーを無視して、プログラムを動かすことができるようになります。
これで、「404 Not Found」の時に「ページがありませんでした。」と表示させることができます。
「エラー制御演算子」乱用絶対ダメ!
非常に便利な「エラー制御演算子」ですが、利用には注意が必要です。
「エラー制御演算子」は、本来表示されるべきPHPのエラーを無視して動かすという仕様のため、乱用すると致命的なバグを生み出すことにもつながります。
基本は、エラーがでないプログラムを作るということが前提で、仕様的に無視させる必要がある時だけ「エラー制御演算子」を利用するようにします。
まとめ
PHPを使って「404 Not Found」を見つけられるようになりましたが、このプログラムは非常に使う場面が限られてきます。
次回以降に、「file_get_contents」関数を応用して、ページのエラーチェックができる仕組みをご紹介します。
現場の業務フローに寄り添ったWebシステムをお求めなら、私たちALAKIにご相談ください。
ALAKIは経営者様が感じている問題点と、実際にWebシステムを利用される現場スタッフ様が直面している課題を、弊社システムエンジニアが丁寧に聞き取り、お客様と共にシステムを作り上げていきます。
業務改善が実現できるWebシステムをお求めの方は、是非ALAKIにご相談ください。