./topimag900x150

www.h2caster.net

Linux&LAMP PHP&MySQL GPS&PDA BikeTrial blog Others

画像の出力など

printとecho(header()関数を使う)

 header("Content-type: image/jpeg");

としてやればjpgファイルを正しく出力することができる。(下記修正スクリプト参照)

 <?php
 //$uploadfileにアップロードしたファイルの場所と名前を記す
 $uploaddir = '/var/tmp/';
 $uploadfile = $uploaddir. $_FILES['userfile']['name'];
 //アップロードしたファイルが存在する場合処理をする
  if(!is_uploaded_file($_FILES['userfile']['tmp_name'])) 
  {
    echo "ファイルを保存できませんでした!";
    exit;
  }
  else
  {
  //PHPが作ったテンポラリファイルを$uploadfileにコピーする
  copy($_FILES['userfile']['tmp_name'],$uploadfile);
  //ファイルの内容を$contentsに書き出す
  $UPLOAD = fopen($uploadfile,"r");
  $contents = fread($UPLOAD,$_FILES['userfile']['size']);
  fclose($UPLOAD);
  header("Content-type: image/jpeg");
  echo $contents;
  }
 ?>
 Warning: Cannot modify header information - headers already sent by (output  started a.....

などというエラーが出る。たとえば、先のスクリプトの最初の部分に何気なく改行をいれると、

 (ここに改行)
 <?php
 //$uploadfileにアップロードしたファイルの場所と名前を記す
 $uploaddir =・・・

サーバーはその改行コードからまず出力しようとする。そうすると、phpのでフォルトで指定されているtext/htmlというタイプがヘッダーで送り出されるので(php.iniで変更も可)、上のスクリプトもエラーとなる。下は参考。

 Content-type: text/html … HTML
 Content-type: text/plain … プレインテキスト
 Content-type: image/gif … GIF 画像
 Content-type: image/jpeg … JPEG 画像

readfile()関数

 <?php
   header("Content-type: image/jpeg");
   // 読む・出力する
   readfile('test.jpg');
 ?>

これだけでよい。きちんと画像が出力される。柔軟性に欠けるが。。

<img> タグを使う

 <?
 imagejpeg($image,"image.jpg");
 imagedestroy($image);
 ?> 
 <img src = "image.jpg" border="0">

もちろんheader()の指定もしなくてよい。

Copyrite 2005 caster productions

www.h2caster.net