PHPでページのキャッシュを無効にする方法を現役エンジニアが解説【初心者向け】

初心者向けにPHPでページのキャッシュを無効にする方法について解説しています。CSSを変更したのになかなか反映されずに困ったことはないでしょうか。原因はブラウザによってページがキャッシュされているからです。

TechAcademyマガジンはオンラインのプログラミングスクールTechAcademy [テックアカデミー]が運営する教育×テクノロジーのWebメディアです。初心者でもすぐ勉強できる記事が2,000以上あります。

PHPでページのキャッシュを無効にする方法について解説します。実際のコードをもとに解説していきますので、理解を深めていきましょう。

 

なお本記事は、TechAcademyのPHP/Laravel講座の内容をもとに紹介しています。

 

 

田島悠介

今回は、PHPに関する内容だね!

大石ゆかり

どういう内容でしょうか?

田島悠介

PHPでページのキャッシュを無効にする方法について詳しく説明していくね!

大石ゆかり

お願いします!

 

ページのキャッシュとは

キャッシュ機能は、頻繁にアクセスする可能性のあるデータをすぐに読み出せる場所に保存して実際のデータを取得せずに済ませて高速化を図る手法です。ページとは、Webページのことを指します。

つまりWebページをWebサーバーから取得しないでどこかに保存しておいたHTMLを利用する仕組みです。

保存する場所は、ブラウザがローカルPCに保存する場合もあれば、Webサーバーへの経路の途中にキャッシュ サーバーを設置してあることもあります。

このためWebサーバーで内容に変更が有っても即時にブラウザに反映しないことがしばしば発生します。リアルタイム変更内容を反映するために、直接Webサーバーからデータを取得したい場合があります。

そのような場合、キャッシュが無効になる方法を使用します。

 

ページのキャッシュを無効にする書き方

ページがキャッシュされる理由は毎回取得しなくてもレスポンス内容が変わらないと推定しているからです。キャッシュを無効にするには、レスポンス内容が違う可能性があることをブラウザに推定させれば良いことになります。

WebページにはURLがありますが、URLが毎回違っていれば内容が違う可能性が出てきます。
そのためにクエリパラメータを利用します。

クエリパラメータとは、URLのエンドポイント(ドメイン/パス)の後ろ ? で区切って書く文字列です。

通常は Web サーバへ追加のデータを送るために使われます。このパラメータは余分に付けても無視することができますので、乱数を付けて毎回違うURLを指定すれば同一のエンドポイントでもキャッシュが効かなくなります。

[PR] PHPのプログラミングで挫折しない学習方法を動画で公開中

実際に書いてみよう

今回はuniqid()関数を利用してURLの後ろに重複しないパラメータを付加しています。重複しなければ乱数を利用しても大丈夫です。

<!DOCTYPE html>
<html lang="ja">
<head>
    <meta charset="UTF-8">
    <title>ホーム</title>
</head>
<body>
    <img src="saru.png"><!-- キャシュされる -->
    <img src="inu.png?<?= uniqid() ?>"><!-- キャッシュ無効 -->
</body>
</html>

 

実行結果

ページキャッシュ無効

ブラウザで再読み込みした後にデベロッパーで確認します。

saru.pngはサイズ列に(from memory cache)と表示されていてキャッシュされていることが確認できます。

inu.pngは再読み込みするとtime列が変化しますので毎回ダウンロードしているのが確認できます。

この記事を監修してくれた方

大網 清和(おおあみきよかず )
現在は派遣スタッフとして Laravel で大手ポータルサイトの開発業務をしています。

プログラム歴は長く中学生の頃から始めて35年くらいになります。古くは BASIC、C、COBOLなどを経験し SQL を集中的に使っていた時期もあります。
Web の開発はまだ2年位とあまり長くは無いですが、プログラミングの楽しさを伝えられたら良いなと思っています。

 

大石ゆかり

内容分かりやすくて良かったです!

田島悠介

ゆかりちゃんも分からないことがあったら質問してね!

大石ゆかり

分かりました。ありがとうございます!

オンラインのプログラミングスクールTechAcademyではオンラインブートキャンプPHP/Laravelコースを提供しています。

PHPやフレームワークのLaravelを使ってWebアプリケーションの開発を学ぶことができます。

現役エンジニアがパーソナルメンターとして受講生に1人ずつつき、マンツーマンのメンタリングで学習をサポートし、最短4週間で習得することが可能です。

また、現役エンジニアから学べる無料のプログラミング体験会も実施しているので、ぜひ参加してみてください。