これは、random_num を force_dl.php に送信するために使用している jQuery コードです。ここで、random_num の値は 977926 です... 私の最終目標は、data977926.data を新しいウィンドウで開くのではなく、強制的にダウンロードすることです。
$.post( "../scripts/force_dl.php",{
random_num: random_num
},
function( data ) {
alert( data );
var data_file = document.getElementById("data_file");
data_file.href = "../scripts/force_dl.php";
});
これが変更されたHTMLコードです
<a id="data_file">Download data file</a>
force_dl.php に以下がある場合、
<?php $file_name = "data" . $_POST['random_num'] . ".data";
echo "$file_name"; ?>
アラートにファイル名が表示されますが、
data977926.data
そして、force_dl.php で以下を実行すると
header("Content-disposition: attachment; filename=data257667.data");
header("Content-type: text/plain");
readfile("../queries/gnuplot_tmp_files/data257667.data");
ID が data_file の HTML リンクをクリックすると、必要に応じてデータ テキスト ファイルをダウンロードするよう強制されます。問題は、次を実行すると発生します。同じ data_file リンクをクリックすると、data.data という名前のファイルがダウンロードされます。
$file_name = "data" . $_POST['random_num'] . ".data";
header("Content-disposition: attachment; filename=$file_name");
header("Content-type: text/plain");
readfile("../queries/gnuplot_tmp_files/$file_name");
data.data ファイルの内容は次のとおりです。
<br />
<b>Notice</b>: Undefined index: random_num in <b>/var/www/html/msdb/scripts/force_dl.php</b> on line <b>2</b><br />
<br />
<b>Warning</b>: readfile(../queries/gnuplot_tmp_files/data.data): failed to open stream: No such file or directory in <b>/var/www/html/msdb/scripts/force_dl.php</b> on line <b>6</b><br />
$_POST['random_num'] を問題なくエコーできるのに、インデックス random_num が定義されていないのはなぜですか? ダウンロードしたファイルの名前が data977926.data ではなく data.data になっているのはなぜですか? $_POST['random_num'] をエコーすると data977926.data が表示されるのに、$_POST['random_num'] をヘッダーおよび readfile 関数に挿入した場合と、data977926.data を入力した場合とでは結果が異なるのはなぜですか? 前もって感謝します。