aviファイルのダウンロードについて - PHPプロ!Q&A掲示板
/IE8/OS windows7
お世話になっております。
ブラウザからaviファイルを選択してダウンロードしようとしています。
壊れたファイルなどをダウンロードしないように事前に回避する処理を
いれる方法がわかりません。submitやlocation.hrefでいろいろ試して
みましたがその後の挙動が変わってしまい困っています。
1)ダウンロードを実行するphp
download.php
<?php
$filepath="C:\\temp\\".$_REQUEST["filename"];
if (file_exists($filepath)==false){
return false;
}
$filesize = filesize($filepath);
if ($filesize == 0) {
return false;
}
$handle = fopen($filepath, "rb");
if ($handle==null){
return false;
}
$mime_type = mime_content_type($filepath);
header("Content-type: {$mime_type}");
header('Content-Disposition: attachment; filename="'.basename($filepath).'"');
header('Content-Type: application/octet-stream');
header('Content-Transfer-Encoding: binary');
header('Content-Length: '.$filesize);
header("Expires: -1");
header("Cache-Control: must-revalidate, post-check=0,pre-check=0");
header("Pragma: private");
while (!feof($handle)) {
echo fread($handle, 4096);
flush();
ob_flush();
}
fclose($handle);
return true;
?>
2)ブラウザ側 main.php
location.href="submit_test.php?from=download&filename=test.avi";
3)ブラウザから呼び出されるphp
sumit_test.php
<?php
if ($_REQUEST["from"]==="download"){
$filepath="C:\\temp\\".$_REQUEST["filename"];
$sts=require_once("download.php");
if ($sts==false){
$err="失敗";
}else{
$err="";
}
}else if ($_REQUEST["from"]==="other"){
}
require("main.php");
?>
これだと中断しても"main.php"には戻りますが、そもそも正常にダウンロード
した場合はrequire("main.php"); は実行されていないようです。
(正常時は "main.php"が表示されたまま、ダウンロードのダイアログが表示されます。)
正常処理だけが続けば問題ありませんが、
不正ファイルのため処理を抜けた後に、正常ファイルをダウンロードすると
require("main.php");は実行されないので
"main.php"にセットした"失敗"のエラーメッセージが消えない他、
F5キーを押してブラウザをリロードするとダウンロードを開始してブラウザは
ブランクになってしまいます。
一度も中断処理を行わなければ、リロードしても元の画面のままです。
解決方法はありませんでしょうか?
よろしくお願い致します。
この質問への意見の募集は締め切られ、ポイントは既に配分されました。
意見を投稿することはできますが、ポイントを受け取ることはできません。





ページのトップへ


SQLインジェクション対策は時と場合で使う関数が変わります。その時にあったものを使いましょう。