以下是我用来将random_num发送到force_dl.php的jQuery代码,其中random_num的值为977926 ...我的最终目标是强制下载data977926.data而不是在新窗口中打开。< / p>
$.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']插入到header和readfile函数中时,我得到的结果与输入data977926.data时的结果不同?提前谢谢。
答案 0 :(得分: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);
}
?>