header関数
戻る


[10]header関数

【HTTPヘッダ情報の操作】

header関数とは、PHPによるHTMLファイルの送信に必要な情報を出力するために使用するものです。
通常、HTTPで送受信される情報には、その送受信されるデータが何なのかを示すヘッダ情報が先に送信され、 その情報を元にブラウザはあらゆる対応を行います。
HTMLファイルの場合はContent-Type:text/htmlといった情報が先に送信され、 画像ファイルの場合はContent-Type:image/jpegなどと言った情報が送信されているのです。
詳細については「 header関数 」をご覧ください。

では実際にHTTPヘッダ情報の操作をしてみましょう。
header関数を使うには必ず<html>タグをPHPが出力する前に使用しなければなりません。
何故かというとheader関数が出力するのはHTTPヘッダ情報だからです。<html>〜</html>の中にHTTPヘッダ情報があったとしてもそれは何の意味もありませんから。
ですから、header関数を使う場合は必ず対象のデータの前に出力しおわるようにする事を覚えておいてください。

■アクセスすると、Yahoo!Japanのページへ勝手に移動してしまうプログラム
<?php
///////////////////////////////////////////
//PHPプログラムの動作テスト1
//header関数
//ジャンプ
///////////////////////////////////////////

header("Location: http://www.yahoo.co.jp");

exit;
?>

これはアクセスすると、すぐにYahoo!Japanへ移動してしまうプログラムです。
もう、有無を言わさず、直ぐに移動してしまいます。

■指定したJpegファイルをリサイズ出力するプログラム
※要GDライブラリ
<?php
///////////////////////////////////////////
//PHPプログラムの動作テスト1
//header関数
//画像リサイズ
///////////////////////////////////////////

$title="画像リサイズプログラム";
$script_php= $_SERVER['SCRIPT_NAME'];
$post_max_size=ini_get('post_max_size');

//POSTされていない場合
if (!isset($_POST["submit"])){
  echo ("
    <html>
    <head>
      <title>$title</title>
      <meta http-equiv=\"content-type\" content=\"text/html; charset=Shift_JIS\">
      </head>
      <body>
      <table cellpadding=\"2\" cellspacing=\"2\" border=\"0\" width=\"500\" align=\"center\">
      <tbody>
      <tr>
      <td valign=\"middle\" align=\"center\">
      <div style=\"font-size:20pt;\">
      $title</div>
      </td>
      </tr>
      <tr>
      <td valign=\"middle\" align=\"center\">
      <div style=\"font-size:10pt;padding:6px;\">
      JPEG画像ファイルのみリサイズできます。ファイルを指定してください。
      </div>
      <div style=\"font-size:10pt;border:solid 1px #aaccff;padding:2px;\">
      リサイズ可能サイズ: $post_max_size まで
      </div>
      <hr>
      <form name=\"objform\" action=\" $script_php \" method=\"POST\" enctype=\"multipart/form-data\">
      <select name=\"sam\">
      <option value=\"100\">横幅100px
      <option value=\"200\">横幅200px
      <option value=\"300\">横幅300px
      <option value=\"450\">横幅450px
      </select>
      <input type=\"hidden\" name=\"MAX_FILE_SIZE\" value=\"2048000\">
      <input type=\"file\" name=\"img1\" SIZE=\"40\"><br>
      <input type=\"submit\" name=\"submit\" value=\" リサイズする \">
      </form>
      </td>
      </tr>
      </tbody>
      </table>
      </body>
      </html>
  ");
}
//POSTされた場合
else{
  //表示するサムネールの幅(ピクセル)
  $sam_x = $_POST ['sam'];
  //アップロードファイルオブジェクト
  $img1 = $_FILES['img1'];
  //tmpファイル名
  $img1tmp = $_FILES['img1']['tmp_name'];
  //ローカルファイル名
  $img1name = $_FILES['img1']['name'];
  //ファイルサイズ
  $img1size = $_FILES['img1']['size'];
  //ファイルの種類
  $img1type = $_FILES['img1']['type'];
  //システムエラーメッセージ
  $error_msg = $_FILES['img1']['error'];

  //ファイルがJpegだった場合
  if ($img1type=="image/jpeg"||$img1type=="image/pjpeg"){
    //サイズを所得
    list($size_x,$size_y)=getimagesize($img1tmp);
    //サムネールサイズを決定
    $sam_y=($sam_x * $size_y) / $size_x;
    //イメージを読み込む
    $main_img=@imagecreatefromjpeg($img1tmp);
    //サムネールサイズに縮小
    $sub_img=imagecreatetruecolor($sam_x,$sam_y);
    imagecopyresized($sub_img,$main_img,0,0,0,0,$sam_x,$sam_y,$size_x,$size_y);
    //そして表示する
    header ("Content-type: image/jpeg\n\n");
    //Jpegとして表示
    imagejpeg($sub_img);
    //そして開放
    imagedestroy($sub_img);
  }
  else{
  echo("
    <html>
    <body>
    <font color=\"#ff0000\">指定された画像はJpegでないか、指定されていません!</font>
    </body>
    </html>
  ");
  }
}

exit;
?>

それではこのスクリプトはこちらで動作を確認してみてください。
※このサーバでリサイズできる画像サイズは横1024×縦768の範囲に収まるサイズです。
header関数を説明するには非常に難しそうなプログラムになってしまいましたが、ここではローカルコンピュータ(このページにアクセスしているあなたのコンピュータ)にあるJpeg画像を一旦このサーバへ送信して受け取った画像データをセレクタで選んだサイズに変換してまたローカルコンピュータへ出力すると言った事を行っています。
赤字の部分が【HTTPヘッダ情報】になります。ここにheader関数がないと出力されるファイルの特定ができずブラウザへ出力されなくなります。

header関数はこの他の【HTTPヘッダ情報】を送る事ができますが、それはご自分で調べてみてくださいね。
この項はこれで終わりです。内容は簡単でしたが難しい説明になってしまったかもしれませんね。ごめんなさい。



TOPへ