我正在尝试压缩文件,然后发送给用户下载该文件,但它不起作用。当它执行我的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 脚本使用函数 touch 和 ZipArchive 类创建 zip 文件,并将此文件的路径作为 ajax 响应发送。在javascript中,我使用它将文件发送到客户端:
window.open(ajaxObject.response, '_blank');
一切都很完美。