gpt4 book ai didi

PHP 强制下载不起作用?

转载 作者:太空狗 更新时间:2023-10-29 13:43:11 26 4
gpt4 key购买 nike

在我的 HTML 页面上,我已经向应该强制下载的 php 脚本发出了 JQuery ajax 请求,但没有任何反应?

在我的 html 页面上(在链接的点击事件处理程序中)...

var file = "uploads/test.css";
$.ajax(
{
type : "POST",
url : "utils/Download_File.php",
data : {"file":file}
})

Download_File.php 脚本如下所示

<?php

Download_File::download();

class Download_File
{
public static function download()
{
$file = $_POST['file'];

header('Content-Type: application/octet-stream');
header('Content-Disposition: attachment');
readfile('http://localhost/myapp/' . $file);
exit;
}
}
?>

但是由于某种原因没有发生任何事情?我查看了 Firebug 中的响应 header ,看不到任何问题。我正在使用 Xampp。非常感谢任何帮助。

谢谢!

最佳答案

您应该指定Content-Transfer-Encoding。此外,您应该在 Content-Disposition 上指定 filename

header('Content-Type: application/octet-stream');
header('Content-Transfer-Encoding: binary');
header('Content-Disposition: attachment; filename="'.$file.'"');
readfile('http://localhost/myapp/'.$file);
exit;

filename 周围包含双引号很重要,因为 RFC 2231 要求这样做.众所周知,如果 filename 不在引号中,Firefox 在下载文件名中包含空格的文件时会出现问题。

此外,请检查以确保在关闭 ?> 后没有空格。即使在结束 PHP 标记之后存在空格, header 也不会发送到浏览器。

附带说明一下,如果您要提供多种常见文件类型供下载,您可以考虑指定这些 MIME 类型。这为最终用户提供了更好的体验。例如,您可以这样做:

//Handles the MIME type of common files
$extension = explode('.', $file);
$extension = $extension[count($extension)-1];
SWITCH($extension) {
case 'dmg':
header('Content-Type: application/octet-stream');
break;
case 'exe':
header('Content-Type: application/exe');
break;
case 'pdf':
header('Content-Type: application/pdf');
break;
case 'sit':
header('Content-Type: application/x-stuffit');
break;
case 'zip':
header('Content-Type: application/zip');
break;
default:
header('Content-Type: application/force-download');
break;
}

关于PHP 强制下载不起作用?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4809988/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com