ヒントをいただき、ありがとうございました。やはりheader("Location: を使うやり方はだめでした。
そこでkona@mさん提案のJavascriptと併用する方法で、特にセッションもクッキーも使わずに出来ました。
以下のようにやりました。(ご参考までに)
(最初にリクエストを投げるhtmlのフォーム:yygeocodingm.htm)<form name="upform" id="upform" action="http://yoneyone.my-sv.net/php/geocodingm.php"
method="post" enctype="multipart/form-data" >Geocoding サービスの選択
<select name="service[]" id="service" />
<option value="google" />google
<option value="yahoo" />yahoo
</select><br><br>
住所ファイルの選択
<input type="file" name="upfilename" id="upfilename" />
<input type="submit" name="submitbotton" id="submitbotton" value="送信" /><br>
<input type="reset" name="reset" value="クリア" />
</form>
(処理するPHP:geocodingm.php)<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
<html xmlns="http://www.w3.org/1999/xhtml" xmlns:v="urn:schemas-microsoft-com:vml">
<head>
<meta http-equiv="content-type" content="text/html; charset=EUC-JP"/>
<META http-equiv="Cache-Control" content="no-cache">
<META http-equiv="Expires" content="0">
<title>YY GeoCoding 結果</title>
<script type="text/javascript">
//<![CDATA[
function back(){
location.href="http://yoneyone.my-sv.net/yygeocodingm.htm";
}
function closing(filename){
location.href="http://yoneyone.my-sv.net/php/yygoddel.php?fname=" + filename;
}
function download(filename){
location.href="http://yoneyone.my-sv.net/php/yygodown.php?fname=" + filename;
}//]]>
</script>
<?php
if (!empty($_FILES['upfilename']["name"])){
$service=$_POST['service'][0];
if (is_uploaded_file($_FILES['upfilename']['tmp_name'])){
$fname = "../temp/" . $_FILES['upfilename']["name"];
print "<body onunload=\"closing('$fname')\">"; $fin = fopen($_FILES['upfilename']['tmp_name'],"rb");
処理本体(省略)
print "<hr><br><b>";
print " $service で $count 件の住所の検索が完了しました。<br><br>";
print "処理時間は $syori_jikan 秒でした。<br><br>";
print "<form action=# name='downform' id='downfom'>";
print "<input type='button' name='backbtn1'
value='検索結果ファイルの受信' onClick='download(\"$fname\")'>";
print "<input type='button' name='backbtn2'
value='終了' onClick='closing(\"$fname\")' />";
print "</form>"; print "<hr></b>";
print "<font color=#ff1493><b>※(注意:FireFox等のタブブラウザーでご利用の方へ)</font></b><br>";
print "<font color=#008b8b><b>!</b>ダウンロードを行なわないで終了する場合、終了ボタンで終了してください。";
print "ブラウザーの戻るボタンで終了すると、ごみが残ります。</font><br>";
}
}else{
print "<body>";
print "送信ファイルを選択して下さい。<br><br>"; print "<form>";
print "<input type='button' name='backbtn1' value='戻る' onClick='back()' />";
print "</form>";
}
?>
</body>
</html>
(ダウンロードさせるPHP:yygodown.php)<?php
$fname = "{$_REQUEST['fname']}";$faray =explode("/",$fname);
$downname = $faray[count($faray)-1];
header("Content-Disposition: attachment; filename=$downname");
header("Content-Type: application/x-csv");
header('Content-Length:'. filesize($fname));readfile($fname);
unlink($fname);
?>
(取り消しのPHP:yygoddel.php)<?php
$fname = "{$_REQUEST['fname']}";if(file_exists($fname)){
unlink($fname);
}
header("Location: http://yoneyone.my-sv.net/yygeocodingm.htm");
?>で、一応期待どうりにできました。
http://yoneyone.my-sv.net/yygeocodingm.htm で試してみてください。
問題が少々あります。
PHPが原因ではないのかもしれませんが、FireFoxのブラウザーの戻るのボタンでPHP
で出力したページから戻る時、<body>タグで指定したJavascriptの
onunload=xxx('')の関数が動きません。IE(6.0)ではブラウザーの戻るボタンで
onunloadイベントが
ちゃんと検出されているのですが....。他のブラウザーは試していません。
(以上)