2010-01-01 62 views
0

我有一個非常標準的文件上傳形式(這也寫入到MySQL數據庫)。在我的測試中它工作得很好,然後我去測試一個用大寫字母命名的文件。該文件不會上傳。簡單的解決方案我想,只需在上傳之前用'strtolower'重命名文件,但沒有運氣。還嘗試了strtoupper,仍然沒有運氣。我想我也遇到了以數字開頭的文件。 (我做了仔細檢查,是的文件夾是可寫的。)php文件上傳大寫文件名問題

$upload_dir = "/path/to/the/upload/folder/entries/"; 
$new_filename = mysql_insert_id()."_".$filename; 
$tmp_name = $_FILES["filename"]["tmp_name"]; 
move_uploaded_file($tmp_name, $upload_dir . $new_filename); 

任何幫助是非常讚賞。

+1

在您的代碼中看不到任何問題。在我的應用程序中,人們每天都用各種奇怪的名字上傳文件。從未遇到大寫或數字問題。你確定'mysql_insert_id()'打印什麼嗎?或者有什麼機會破壞代碼?你爲'$ filename'分配了什麼? – Nirmal 2010-01-01 03:23:19

+0

$ filename是在代碼中設置的,並且等於$ _FILES [「filename」] [「name」] 我對這個問題做了一些更多的研究,看起來它可能不是大寫字母,它是實際上沒有找到我想上傳的圖像文件上的文件類型(我做了一個回聲$ _FILES [「文件名」] [「類型」],它什麼都沒有返回)。但是,當我在Finder中檢查文件的屬性時,它清楚地顯示文件類型是jpeg。我真的被困在這裏,所以謝謝你的幫助。 – jmarx34 2010-01-01 03:40:45

回答

1

需要隔離錯誤發生的步驟 - 具體來說,「文件不會上傳」是什麼意思?沒有文件到達服務器?重命名不起作用?執行插入的mysql語句是否沒有正確地形成?如果文件永遠不會到達服務器,那麼您就無法調用strtolower。

取一個已知的,可工作的,可上傳的文件,上傳它以確保它能正常工作,然後將其重命名爲大寫版本,然後重試。如果picture.jpg有效,PICTURE.JPG?或PICTURE.jpg?我想知道在你的代碼的前幾部分中是否有一些決定「.JPG」(或任何大寫擴展名)不是像「.jpg」這樣的有效上傳文件。

+0

spinn, 很好的調用重命名文件來測試。 所以這裏是我在... 基本上,它似乎有時圖像文件沒有被檢測到。我試圖測試的jpg文件(這是失敗的),直接從我的iPhone中拉出。儘管它在我的Finder中顯示爲一個jpeg類型,但當我嘗試抓取[「type」](用於寫入數據庫和一般文件上傳錯誤檢查)時,它不會返回任何內容。所以我想我需要的是一些方法來保證這些'圖像'通過。有什麼想法嗎? – jmarx34 2010-01-01 04:23:27

+0

這裏的變量太多了......我並不清楚上傳實際上失敗的位置。 $ _FILES數組中是否有任何內容,或僅僅是缺少的類型? – spinn 2010-01-01 04:46:36