-1

これは、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 を入力した場合とでは結果が異なるのはなぜですか? 前もって感謝します。

4

1 に答える 1

2

JavaScript の変更で

data_file.href = "../scripts/force_dl.php";

これに:

data_file.href = "../scripts/force_dl.php?random_num=" + random_num;

そして、変更をダウンロードするためのphpファイルで

$file_name = "data" . $_POST['random_num'] . ".data";

これに:

$file_name = "data" . $_GET['random_num'] . ".data";

このようにして、php ファイルへのリンクで GET メソッドを介して乱数を渡します。現在のコードでは、何を取得するかを 2 回目に php ファイルに伝えていません。

これらのアクションの両方に同じ php ファイルを使用する場合は、最初に isset 関数を介して入力値を確認し、次のようにそれらに基づいて適切なアクションを実行できます。

<?php

if(isset($_POST['random_num'])){
    echo 'data'.$_POST['random_num'].'.data';
}elseif(isset($_GET['random_num'])){
    $file_name = 'data'.$_GET['random_num'].'.data';
    header('Content-disposition: attachment; filename='.$file_name);
    header('Content-type: text/plain');
    readfile('../queries/gnuplot_tmp_files/'.$file_name);   
}

?>
于 2015-09-28T23:24:06.887 に答える