我正在构建一个接口,允许从服务器路径收集PDF文件以立即下载它们,大部分时间工作正常。现在,一些PDF文件无法正常工作,这意味着如果zip包含一个非工作文件,则整个下载将不会执行。邮编PDF文件下载不起作用
现在我试着很多文件大小不同。我可以告诉大多数大于10MB的文件无法正常工作,但有一个文件(15MB)正在工作,所以它不能是导致此错误的文件大小 - 对吗?
发生了什么是根本没有下载。另外尝试阅读“$ zip-> addFile”和“$ zip-> close”的结果,但它都是真实的,即使下载不会执行。任何可能导致这个错误的想法,或者至少有一些关于如何发现这个错误的提示?
(x)过程中变量的调试检查在其工作时间和不工作时间之间没有差异。只有差异是文件和-paths。
下面是我使用建ZIP代码:
public function downloadFiles() {
$myFiles = $this->Session->read('Files.MyFiles');
if(count($myFiles)) {
// build zip
$zipname = 'amaz_photos_' . time() . '.zip';
$zip = new ZipArchive();
$zip->open($zipname, ZipArchive::CREATE);
foreach($myFiles as $file) {
if($file['type'] == 'directory') {
$dirName = str_replace('/', '', substr($file['path'], strrpos($file['path'], '/'), (strlen($file['path']) - strrpos($file['path'], '/'))));
$zip->addEmptyDir($dirName);
$this->addFolderToZip($file['path'] . '/', $zip, $dirName . '/');
} else {
$zip->addFile($file['path'], str_replace('/', '', substr($file['path'], strrpos($file['path'], '/'), (strlen($file['path']) - strrpos($file['path'], '/')))));
}
}
$zip->close();
// get(send) zip
header('Content-Type: application/zip');
header('Content-disposition: attachment; filename=' . $zipname);
header('Content-Length: ' . filesize($zipname));
readfile($zipname);
ignore_user_abort(true);
unlink($zipname);
}
// clear "myFiles"
//$this->Session->write('Files.MyFiles', array());
$this->redirect(array(
'controller' => 'pages',
'action' => 'display'
));
}
所有我试图与几个PDF阅读器,包括Adobe的原有以确定其破裂打开受感染的文件后,但其IT似乎不是。
这将发生在可打开的zip文件中,但下载无法启动。我发现,在下载无法启动的特殊情况下,与其工作时间相比,在网络帧上没有设置响应头(“application/zip”)。
我发现了什么: 可以说我有一个文件夹中有20个文件,这不是下载。我尝试选择文件1-10:下载,然后我尝试下载文件11-20:下载,然后我试图下载文件1-20:不下载,然后我尝试了两次混合模式,首先是偶数文件2,4 ,6,8 ..(1-20),之后的奇数文件1,3,5,7,..(1-20):每个都不下载。 这说明t 他错误不属于特定文件。
任何建议如何确定此错误的触发器?
更新:
我能够下载生成的压缩文件做下列步骤操作:
触发 '创建&下载zip文件'
它创建一个zip文件但不下载它
在代码中输入生成的zip文件的文件名以在下一个过程中下载(例如, G。 “$ zipname =‘generatedOnStep1.zip’)。
- 触发‘创建&下载zip文件’再次
- 它不下载(最近)生成的文件,但我在步骤1中生成的文件。所以它似乎是:生成Zip文件正在工作,并下载相同的zip文件正在工作,但不是一次,只有在一些未知的组合。
...
更新2:
因为我无法确定问题,也没有解决这个问题,我结束了重新设计的全过程,重定向到产生zip文件而不是“readfile”它。一些功能必须被发现,但无论如何它都以这种方式工作。
你有没有试过检查zip内的pdf文件的大小?他们有一个尺寸?与原始文件相比,大小是多少?你也没有给我们addFolderToZip的代码。 – user254948 2014-11-24 15:51:08
由于添加了单个文件,因此在这种情况下不使用addFolderToZip()。请记住。无论如何,你给我的想法是在下载文件后不要删除文件。可以看到PDF的尺寸比未压缩的大2MB。所以看起来一切正常,但下载无法启动。我有可以下载的大型视频文件,所以我很确定它不涉及任何内存限制。 HDD空间也很空(足够)。 – 2014-11-24 16:06:09
只需要清楚:ZIP生成正确,可以运行并可以查看PDF。但是下载并不仅仅以特定的PDF开始。 – 2014-11-24 16:06:57