PHP Force文件下载

时间:2012-08-06 21:50:01

标签: php download

我正在尝试使用PHP强制在客户端计算机上下载(使用文件对话框 - 没有任何恶意)。我发现很多页面建议我使用header()函数来控制PHP脚本的响应,但我没有运气。我的代码如下:

$file = $_POST['fname'];

if(!($baseDir . '\\AgcommandPortal\\agcommand\\php\\utils\\ISOxml\\' . $file)) {
    die('File not found.');
} else {
    header('Pragma: public');
    header('Content-disposition: attachment; filename="tasks.zip"');
    header('Content-type: application/force-download');
    header('Content-Length: ' . filesize($file));
    header('Content-Description: File Transfer');
    header('Content-Transfer-Encoding: binary');
    header('Connection: close');
    ob_end_clean();
    readfile($baseDir . '\\AgcommandPortal\\agcommand\\php\\utils\\ISOxml\\' . $file);
}

我使用此JavaScript调用它:

        $.ajax({
            url: url,
            success: function(text) {
                var req = new XMLHttpRequest();
                req.open("POST", 'php/utils/getXMLfile.php', true);
                req.setRequestHeader("Content-type", "application/x-www-form-urlencoded");
                req.send('fname=' + encodeURIComponent(text));
            }
        });

这将文件的内容作为文本返回,但不会触发下载对话框。有没有人有任何建议?

4 个答案:

答案 0 :(得分:6)

只需将浏览器重定向到相关的URL,而不是使用AJAX。当它收到content-disposition:attachment标题时,它将下载文件。

答案 1 :(得分:1)

很少有建议:

1

if(!($baseDir . '\\AgcommandPortal\\agcommand\\php\\utils\\ISOxml\\' . $file)) {

相反:

if(!file_exists($baseDir ....)){

2.不需要大小。

3.试试这个:

 header('Content-Description: File Transfer');
    header('Content-Type: application/octet-stream');
    header('Content-Disposition: attachment; filename='.basename($fullpath));
    header('Content-Transfer-Encoding: binary');
    header('Expires: 0');
    header('Cache-Control: must-revalidate, post-check=0, pre-check=0');
    header('Pragma: public');
    ob_clean();
    flush();
    readfile($fullpath);
    exit;

答案 2 :(得分:0)

我会尝试从这样的PHP发送标头,以替换您的application/force-download标头:

header("Content-type: application/octet-stream");

答案 3 :(得分:0)

Kolink的答案对我有用(将窗口位置更改为php文件),但由于我想发送POST变量和请求,我最终使用了隐藏的表单。我使用的代码如下:

                var url = 'php/utils/getXMLfile.php';
                var form = $('<form action="' + url + '" method="post" style="display: none;">' +
                    '<input type="text" name="fname" value="' + text + '" />' +
                    '</form>');
                $('body').append(form);
                $(form).submit();

感谢所有答案!