PHP函数readfile()只将文件内容输出到firebug而不是下载

时间:2017-01-13 11:56:34

标签: php readfile

我正在尝试压缩文件,然后发送给用户下载该文件,但它无法正常工作。当它执行我的php函数时,它只将文件内容输出到firebug中,如果firebug没有打开,它什么都不做。我试图发送的文件是2,9MB,但我试图只发送一个带有单个短语的txt文件,但是没有用。我已经检查过,文件已经创建并且文件添加正确。

$zipname = path . "arquivos/" . $file . ".zip";

touch($zipname);

$zip = new ZipArchive();
$result = $zip->open($zipname, ZipArchive::CREATE);
if ($result === true) {
    foreach ($Variable->Dados as $key => $value) {
        $zip->addFile(path . "arquivos/articulador_avaliacao/" . $value->arquivo, $value->arquivo_nome);
    }
    $zip->close();


    header('Content-Type: application/zip');
    header('Content-Description: File Transfer');
    header('Content-Disposition: attachment; filename="' . basename($zipname) . '"');
    header('Content-Transfer-Encoding: binary');
    header('Expires: 0');
    header('Cache-Control: must_revalidate, post-check=0, pre-check=0');
    header('Pragma: public');
    header('Content-Length: ' . filesize($zipname));
    ob_clean();
    flush();
    readfile($zipname);
}
unlink($zipname);

这通过某个过程执行:用户点击html标签,执行javascript函数的onclick函数,这个javascript函数使用ajax将变量发送到php文件,然后执行此代码。

2 个答案:

答案 0 :(得分:0)

我运行你的代码,它工作了:)也许浏览器解释标题有问题?尝试使用不同的浏览器并检查您的浏览器配置。

答案 1 :(得分:0)

由于我使用javascript和AJAX,我做了一些研究,CBroe告诉我,我找到了解决方案。我的PHP脚本中没有这些标题,也没有readfile函数。

当客户端点击按钮时,javascript函数执行并通过AJAX将数据发送到PHP脚本。此PHP脚本使用函数触摸 ZipArchive 类创建zip文件,并将此文件的路径作为ajax响应发送。在javascript中,我使用它将文件发送到客户端:

window.open(ajaxObject.response, '_blank');

这一切都很完美。