-1

这是我用来向 force_dl.php 发送 random_num 的 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 未定义?为什么下载的文件名为data.data而不是data977926.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";

这样,您将通过 GET 方法在指向 php 文件的链接中传递随机数,在您当前的代码中,您不会在第二次告诉 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 回答