PHP readfile 输出错误的名称

问题描述 投票:0回答:1

我有一个 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被忽视?

javascript php ajax
1个回答
0
投票

试试这个代码

$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";
    }
© www.soinside.com 2019 - 2024. All rights reserved.