我有一个 download.php 页面,用户可以在其中下载 XML 文件。根据下拉列表选择文件并获得不同的名称。我使用 AJAX 将名称发送到 download.php,因此
$_POST
返回一个包含来自 js 的指定数据的数组。然而,当我使用 readfile
下载文件时,在保存文件对话框中,来自 $_POST
的字符串被忽略。这是我的代码:
JS:
let formData = {
shop: shop.val()
}
$.ajax({
type: 'POST',
url: './inc/download.php',
data: formData,
error: function(error) {
console.log(error);
}
});
PHP:
$shop_name = $_POST['shop'];
$dir = dirname(__DIR__, 1) . "/xml/"; // Full Path
$file = "$shop_name-orders.xml";
print_r('dir:' . $dir); // dir:/my-site/xml/
print_r('file:' . $file); // file:shopname-orders.xml
print_r("dirfile: $dir$file"); // dirfile: /my-site/xml/shopname-orders.xml
// Set the content type and file headers
header('Expires: 0');
header('Cache-Control: must-revalidate');
header('Content-Type: application/xml');
header('Content-Disposition: attachment; filename="'. $file .'"');
// Read and output the file content
if (file_exists("$dir$file")) {
readfile("$dir$file");
} else {
echo "Error: $file not found";
}
exit;
在打开的保存文件对话框中,文件名只是“-orders”。 $_POST 不是空的,它确实包含我正在寻找的字符串,尝试使用 isset($_POST['shop']).. 我需要文件名是 'shopname-orders'.. 为什么 $_POST被忽视?
试试这个代码
$shop_name = $_POST['shop'];
if(!empty($shop_name)){
$dir = dirname(__DIR__, 1) . "/xml/";
$file = $shop_name."-orders.xml";
header('Expires: 0');
header('Cache-Control: must-revalidate');
header('Content-Type: application/xml');
header('Content-Disposition: attachment; filename="'. $file .'"');
if (file_exists($dir.$file)) {
readfile($dir.$file);
} else {
echo "Error: ".$file." not found";
}
}else{
echo "Error: Post is empty not found";
}