PHP

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」は、ダウンロード時の「ファイル名」を設定。
※「ファイルパス」には、サーバ上のファイルパスを設定

関連記事

  1. PHP

    PHP

    CakePHPのtinyintでハマった!!

    CakePHPでデータベースを作成する時には注意しないといけない点があ…

  2. xampp07

    PHP

    【新PCの設定④】XAMPPの設定

    続いて、XAMPPのインストールです。http…

  3. PHP

    PHP

    Smartyで日時を扱う方法

    {$smarty.now}で日時を取得Smartyで日時を…

  4. MySQL

    PHP

    プレースホルダ(プリペアド・ステートメント)

    私が入社する前に外注先に組んで貰ったかなり古いプログラムになるのですが…

  5. PHP

    PHP

    【PHP】金額をカンマで3桁区切りにフォーマット

    PHPを使って、数字(金額)を3桁区切りにフォーマットする方法…

  6. PHP

    PHP

    APIを使って天気情報を表示させてみました。

    ページの端っこの方に天気を表示させる機会があったので、その方法を記…

最近の記事

  1. PHP
  2. PHP
  3. 風邪予防
  4. WordPress(WP)
  5. PHP
  6. 宅建
  7. アンチWP
  8. 日本語ドメイン
  9. WordPress(WP)
  10. SSL(HTTPS通信)
PAGE TOP