Zip PDF-Files download not working
我正在构建一个接口,它允许从服务器路径收集PDF文件,并立即下载压缩文件,这在大多数情况下都可以正常工作。现在,一些PDF文件不工作,意味着如果zip包含一个不工作的文件,整个下载将不会执行。
现在我尝试了许多不同大小的文件。我可以看出,大多数大于10MB的文件都不工作,但一个文件(15MB)正在工作,所以它不能是导致此错误的文件大小-对吗?
发生的是根本没有下载。此外,还尝试读取"$zip->addfile"和"$zip->close"的结果,但这都是正确的,即使不会执行下载。任何可能导致这个错误的想法,或者至少一些关于如何发现这个问题的提示?
过程中变量的(x)调试检查在工作时间和不工作时间之间没有区别。唯一的区别是文件大小和路径。
下面是我用来构建zip的代码:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 | 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' )); } |
毕竟,我尝试用包括Adobe原版在内的几个PDF阅读器打开受影响的文件,以确定它是否已损坏,但是?我?t?S?似乎没有。
这将发生在可打开的zip文件中,但下载不会以任何方式启动。我发现,在没有开始下载的特殊情况下,与工作时间相比,网络框架上没有设置响应头("application/zip")。
我还发现了:假设我有一个文件夹,里面有20个文件,但没有下载。我尝试选择文件1-10:下载,然后我尝试下载文件11-20:下载,然后我尝试下载文件1-20:不下载,然后我尝试了两次混合模式,首先是偶数文件2、4、6、8。(1-20),之后是奇数文件1、3、5、7、。(1-20):每个都没有下载。这说明错误不属于特定文件。
对于如何确定此错误的触发器有什么建议吗?
Update:
I was able to download the generated zip-file doing these steps:
Trigger 'create & download zip-file'
It creates a zip-file but not download it
Type the generated zip-files filename in the code to download it on the next procedure (e. g."$zipname ="generatedOnStep1.zip").
Trigger 'create & download zip-file' again It does not download the (recently) generated file, but the file i generated in step 1. So it seems that: Generating Zip-Files is working AND downloading that same zip-File is working, but not at once and only in some unknown combinations.
…
Update 2:
Since I was not able to determine the issue nor fix it, I ended up redesigning the whole process, to redirect to the generated zip-file instead of"readfile" it. Some features had to be sourced out but anyways it works this way.
试试这个…取下
1 2 3 4 5 6 7 8 9 10 11 |
希望这有帮助。