[PHP-users 15325]POSTとGETの違いについて
柴田俊秀
shibata.toshihide @ nttcom-hokkaido.co.jp
2003年 5月 16日 (金) 14:12:59 JST
北海道の柴田です。
過去のメールを[ POST GET header ]で検索しましたが
確認できませんでした。
POSTまたはGETで取得した画像ファイル名で、データを取得し、
画面にheader()を使用しで表示させた場合について教えて
ください。
下記のソースでPOST/GETで違いがでてきますが理由がわかり
ません。
POSTで処理するときに、header()の前に画面に何か出力され
るのでしょうか
OS:windows2000
Apache2.0.44
php4.2.3
○ 画面に表示される
× 画面に表示されない
ブラウザ POST GET
-----------------------------------
Netscape4.78 ○ ○
IE6.0.2800.1106 ○ ○
わじら1.1 × 注1 ○
Opera7.03 × 注2 ○
※注1 : 一瞬画面に表示されその後以下のメッセージが画面に
表示される
---------------------------------------------------
この画像"http://xxxxx途中略xxx/downfile.php"は
表示できませんでした。画像ファイルにエラーがあります。
---------------------------------------------------
注2 : imageの枠のみ表示される
なお、デバック時に保存される画像ファイルは元のファイルと
サイズも一致しており、表示も正常です。
※ デバック時の出力 : define ("DEBUGS", true);
(1) GETの場合
$_GET=Array ( [fname] => http://xx.xxx.xxx.xx/images/wall.gif ) =
$_POST=Array ( ) =
$fname=http://xx.xxx.xxx.xx/images/wall.gif=
$name=wall.gif=
$application=image/gif=
./wall.gif.back::$len=14104
(2) POSTの場合
$_GET=Array ( ) =
$_POST=Array ( [fname] => http://xx.xxx.xxx.xx/images/wall.gif ) =
$fname=http://xx.xxx.xxx.xx/images/wall.gif=
$name=wall.gif=
$application=image/gif=
./wall.gif.back::$len=14104
記
<?php
define ("DEBUGS", false);
define ("READMAX", 10000000); //filesize=10Mbyteまで
$fname=isset($_POST['fname']) ? $_POST['fname'] : '';
if($fname==""){
$fname=isset($_GET['fname']) ? $_GET['fname'] : '';
}
if($fname==""){
exit;
}else{
if(DEBUGS){
print("\$_GET=");print_r($_GET);print("=<br>\n");
print("\$_POST=");print_r($_POST);print("=<br>\n");
}
//拡張子で型を判断
$path_parts = pathinfo($fname);
switch ($path_parts["extension"]){
case "pdf" :
$application ="application/pdf";
break;
case "gif" :
$application ="image/gif";
break;
case "jpeg" :
$application ="image/jpeg";
break;
case "jpg" :
$application ="image/jpeg";
break;
case "txt" :
$application ="text/plain";
break;
default :
$application ="application/octet-stream";
break;
}
//ファイル名取得
$name = basename($fname);
if(DEBUGS){
print("\$fname=$fname=<br>\n");
print("\$name=$name=<br>\n");
print("\$application=$application=<br>\n");
print("<img src='$fname' /> ");
}
//ファイルリード
$fd = fopen ($fname, "rb");
$contents = fread ($fd,READMAX );
fclose ($fd);
//ファイルサイズ確認のため
$path ="./".$name .".back";
$fp = fopen( $path, 'w' );
fwrite($fp,$contents);
fclose($fp);
//画面出力
$len = filesize ($path);
if(DEBUGS){
print("$path::\$len=$len<br>\n");
}else{
header("Content-type: $application");
header("Content-Length: $len");
// header("Content-Disposition: inline; filename=$name");
header("Content-Disposition: attachment; filename=$name");
print $contents;
unlink($path); //tempファイル削除
}
}
?>
以上
PHP-users メーリングリストの案内