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



我正在尝试压缩文件,然后发送给用户下载该文件,但它不起作用。当它执行我的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标签,onclick函数执行javascript函数,这个javascript函数使用ajax将变量发送到php文件,然后执行这个代码。

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

由于我使用javascript和AJAX,我按照CBroe告诉我做了一些研究,我找到了我的解决方案。我的 php 脚本中不需要这些标头,也不需要 readfile 函数。

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

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

一切都很完美。

最新更新