我正在構建一個接口,允許從服務器路徑收集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