PHP(ピー・エイチ・ピー)

【PHP】header()関数

こちらの記事では、PHPのheader()関数についてまとめました。

以下のサイトに記載してある通りですが、
header()関数はHTTPのヘッダ情報を送信するために使用する関数です。
PHP マニュアル > ネットワーク 関数

ブラウザの画面にページを表示させる際には、
通常、ブラウザからWEBサーバに対してページを表示するための情報を要求し、
要求を受けたWEBサーバは、そのページを表示するための情報をブラウザに返します。

それにより、私たちは何か知りたい情報があれば、ブラウザ上で検索して閲覧できるようになっています。

このブラウザからの要求を「HTTPリクエスト」と呼び、
さらに、WEBサーバからブラウザに返される情報を「HTTPレスポンス」と呼びます。

この「HTTPリクエスト」や「HTTPンレスポス」の中にはHTTPヘッダと呼ばれるヘッダ情報が含まれており、
header()関数では、このHTTPヘッダを送信することが可能です。

こちらは、「HTTPレスポス」のヘッダ情報の例です。

cache-control: no-cache, must-revalidate, max-age=0
connection: Keep-Alive
content-encoding: gzip
content-type: text/html; charset=UTF-8
date: Thu, 27 Dec 2018 03:59:48 GMT
expires: Wed, 11 Jan 1984 05:00:00 GMT
keep-alive: timeout=5, max=100
referrer-policy: strict-origin-when-cross-origin
server: Apache
transfer-encoding: chunked
vary: Accept-Encoding
x-frame-options: SAMEORIGIN

200 OK

header()関数でよく行う処理

文字コード

header("Content-type: text/html; charset=utf-8");
で、「Content-type」の文字コードの指定が可能です。

PHPで組んでいるページで文字化けが起こる場合には、
このようにheader関数で文字コードを明示的に指定すれば解決します。

Locationヘッダでリダイレクト(転送)設定

Locationを指定したリダイレクト処理を行う機会は非常に多いです。
例えば、会員サイトでのログイン処理やエラー発生時のエラーが面へリダイレクト設定などで利用します。

<?php
header("Location: http://www.example.com/");
exit(); ←重要
?>

exit()を忘れずに設定して下さい。
処理を切っておかないと、リダイレクトさせた後でも、
header("Location: http://www.example.com/~");
より後に書かれた処理は実行されてしまいます。

<?php
header("Location: /");
exit();
?>

とすれば、トップページにリダイレクトします。

301、404、500のステータスコードを指定

ステータスコードは、.htaccessで設定することが多いですが、
PHPのheader()関数で出力することも可能です。

<?php
header("HTTP/1.1 301 Moved Permanentl");
exit;
?>

<?php
//404エラーの場合
header("HTTP/1.0 404 Not Found");
exit();
?>

<?php
//500エラーの場合
header("HTTP/1.0 500 Internal Server Error");
exit();
?>

ファイルのダウンロード

ZIPやCSV、PDF、画像などのファイルをダウンロードさせる処理を実装する機会も多いです。

そのような場合には、以下のコードで対応可能です。

■ZIPファイルをダウンロードする場合のサンプルコードです

<?php
header("Content-type: application/zip");
header("Content-Disposition: attachment; filename=\"example.zip\"");
header("Content-length: " . filesize("ファイルパス"));
readfile($file);
exit;
?>

※「example.zip」は、ダウンロード時の「ファイル名」を設定。
※「ファイルパス」には、サーバ上のファイルパスを設定

■CSVファイルをダウンロードする場合のサンプルコードです

<?php
header("Content-Type: application/octet-stream");
header("Content-Disposition: attachment; filename=\"example.csv\"");
header("Content-Length: " . filesize("ファイルパス"));
readfile($file);
exit;
?>

※「example.csv」は、ダウンロード時の「ファイル名」を設定。
※「ファイルパス」には、サーバ上のファイルパスを設定

■PDFファイルをダウンロードする場合のサンプルコードです

<?php
header("Content-Type: application/pdf");
header("Content-Disposition: attachment; filename=\"example.pdf\"");
header("Content-Length: " . filesize("ファイルパス"));
readfile($file);
exit;
?>

※「example.pdf」は、ダウンロード時の「ファイル名」を設定。
※「ファイルパス」には、サーバ上のファイルパスを設定

■JPEGファイルをダウンロードする場合のサンプルコードです

<?php
header("Content-Type: application/force-download");
header("Content-Disposition: attachment; filename=\"example.jpg\"");
header("Content-Length: " . filesize("ファイルパス"));
readfile($file);
exit;
?>

※「example.jpg」は、ダウンロード時の「ファイル名」を設定。
※「ファイルパス」には、サーバ上のファイルパスを設定

この記事を書いている人
株式会社ディープ
名前足立拓也

メールアドレスadachi@deep-deep.jp

関連記事

最近の記事

  1. レンタルサーバ:おすすめの共用サーバ
  2. ホームページ(homepage)
  3. システムアップデート
  4. エックスサーバー(XSERVER)
  5. エックスサーバー(XSERVER)
  6. エックスサーバー(XSERVER)
  7. WEBサイト構築
  8. スパム(SPAM)対策
  9. サイト公開
  10. ネームサーバーの登録

Twitter

ダッチ@職業ブロガー兼プログラマー
@gatsu0000

  • ブログのプロフィールなんかで使用するキャラクター用のイラストが完成しました。プロの方に頼むとめっちゃ男前に作ってくれたから、見栄はってるみたいではずかしいけど、取りあえずこれで運用開始です。 あとは、Twitterのアイコンも現在作成して貰ってる最中やから、来週中には完成しそう!
    about 17時間 ago via Twitter Web App

アーカイブ

PAGE TOP