2011-08-01 138 views
0

我試圖讓用戶上傳文件到我的網站,但不幸的是,他們中的一些人在閱讀時似乎變得腐敗。我已經嘗試了圖像和html文件,並且所有圖像都是通過損壞的(HTML文件通過罰款)。PHP損壞的文件上傳

要上傳我使用標準HTML表單和PHP $ _FILES數組的文件。然後我使用下面的代碼來讀取文件的內容:

$ filename = $ _FILES ['varname'] ['tmp_name'];

$處理=的fopen($文件名, 「R」);`

$內容=的fread($處理,文件大小($文件名));

fclose($ handle);

不幸的$內容的價值,現在是我上傳的文件略有不同(這裏是從文件的頂部片段):

原始文件:

ÿ· ExifII *ÏDucky<ÓAdobed¿€Ñ

新文件:

ÿ·II的Exif * I鴨子<Ó的Adobed¿€Ñ

正如你可以看到有在間距的差異。任何想法會造成這種情況?我處理文件讀取不正確的二進制文件?這似乎很奇怪,它可以上傳任何文本文件。

謝謝!

回答

0

如何打印$內容?你確定這是閱讀文件時遇到的問題嗎?

我想也許這是打印文件到輸出的問題...嘗試打印它的二進制方式。喜歡的東西:

$data = unpack("C*", $contents);  
foreach ($data as $v) 
{ 
    echo $v, ' '; 
} 

和比較,與原始文件的二進制轉儲...

+0

這產生了一個負載的數字,所以我會做一個比較。不幸的是,我並沒有真正輸出文件..變量$內容被推送到第三方系統(這對於來自其他系統的文件來說很好),因此很難調試出錯的地方! – RichW

2

我通常輸出文件是這樣的:

header("Content-Disposition: attachment; filename=\"$fileName\"");  
readfile("$HOME_DIR/uploads/$fileName"); 
exit(); 

無論如何,嘗試調試您的問題,你應該先了解哪一階段失敗。上傳或下載?要檢查,只需進入你的網絡服務器並通過FTP下載文件,然後用二進制編輯器打開它。如果它已經損壞,那麼你需要調查你的上傳階段,否則這是另一回事。