$_POST['index'] 值回显字符串但使用 readfile 函数出现未定义错误
$_POST['index'] value echoes string but getting undefined error with readfile function
这是我用来将 random_num 发送到 force_dl.php 的 jQuery 代码,其中 random_num 的值为 977926...我的最终目标是强制下载 data977926.data 而不是在新的 window.
中打开
$.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 link,我强制下载数据文本文件,如我所愿。
当我 运行 以下时,问题就来了。当我单击相同的 data_file link 时,我下载了一个名为 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 时?提前致谢。
在你的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";
这样,您将通过 link 中的 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);
}
?>
这是我用来将 random_num 发送到 force_dl.php 的 jQuery 代码,其中 random_num 的值为 977926...我的最终目标是强制下载 data977926.data 而不是在新的 window.
中打开$.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 link,我强制下载数据文本文件,如我所愿。 当我 运行 以下时,问题就来了。当我单击相同的 data_file link 时,我下载了一个名为 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 时?提前致谢。
在你的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";
这样,您将通过 link 中的 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);
}
?>