2011-05-05 76 views
7

我正在使用plupload將多個文件上傳到我的服務器。使用這個,有一個參數'url:'upload.php'。 upload.php會在收到文件時捕獲這些文件,並且如果它們被分塊,可能會重新組合這些文件。收到完整文件後,它會將回復發送回原始頁面,顯示綠色複選框圖標。爲什麼php重命名()會破壞我的文件?

我已經添加了一些代碼到這個頁面,所有的主要代碼來操縱我上傳的照片。我的計劃是爲我的全尺寸圖像創建三個副本,lg,med和small。我得到這部分工作,但後來決定首先重命名原始文件,以匹配我的命名方案。

我現在得到一個損壞的重命名文件,因此我的三個較小的圖像也被損壞。

//get the original file info 
$filepath = $_SERVER['DOCUMENT_ROOT'].'/uploads/'; 
$filepathinfo = pathinfo($filepath.$fileName);//fileName is used previously in the file 

//rename original file to a unique name 
$finding_id = 'xyz'; 
$file_name_new = uniqid($client_id . '-' . $finding_id . '-', true); //doesn't include extension 
//rename($filepath.$fileName, $filepath.$file_name_new.'.'.$ext); 
//copy($filepath.$fileName, $filepath.$file_name_new.'.'.$ext); 

原樣,我讓我的一個文件,要不我怎麼過很多上傳,字節大小匹配原裝準確和名稱保持不變(除了去除特定字符的)。

如果我只取消註釋重命名功能,我實際上得到兩個文件。字節大小合計原始照片。較大的文件在底部顯示一段灰色。較小的文件根本不顯示。

如果我取消只複製功能,讓我的原文件完全相同的重命名副本,我的原始文件,以及其他文件中,相同的尺寸和腐敗較大的文件做一個重命名。

任何想法?似乎它應該是非常簡單的。

+1

上傳文件的過程是否完成?文件描述符是否關閉?所有的緩衝區都被刷新了? – Konerak 2011-05-05 21:35:32

+0

根據該解決方案:http://stackoverflow.com/questions/3159431/php-change-file-extension,一個解決辦法是使用拷貝。不過,它不應該那樣做。 – Horus 2011-05-05 21:35:40

+0

@Horus - 我試過複製,但結果很奇怪。這個Pluploader一定會有一些事情發生,我從來沒有用過。 – Bob 2011-05-06 16:58:44

回答

2

我忘了我有組塊功能打開。必須打開它來測試一些東西。無論出於何種原因,當腳本運行時,文件的最後一部分尚未完全附加。無論如何感謝所有的輸入!

0

您是否正在自己寫入文件?如果是這樣,問題可能是您錯過了撥打fflushfclose的電話。 (文件的最後一部分沒有被寫入,當PHP開始寫它時,文件不再存在,如果你使用的是Linux或者其他一些Unix,這種情況不會發生,但我可以在Windows上設想它。)

+0

不,不要寫任何我自己的文件。只是讓plupload處理。據我可以告訴該文件正確使用fclose。 – Bob 2011-05-06 15:51:28

4
  1. 如果該文件目前正在通過HTTP POST上傳使用move_uploaded_file
  2. 如果fopen()函數的地方在此請求同一個文件確保FCLOSE調用()
相關問題