2012-12-14 73 views
0
<?php 
    require '../config.php'; 
    // Edit upload location here 
    $result = 0; 
    $name = mysql_real_escape_string($_FILES['myfile']['name']); 
    $path = csv; 
    $ext = 'csv'; 
    $md5 = md5($name); 
    $target_path = $path . '\\' . $md5 . '.' . $ext; 

    if(move_uploaded_file($_FILES['myfile']['tmp_name'], $target_path)) { 
     $result = 1; 
    } 

    sleep(1); 


?> 

它不會上傳任何文件,如與包含括號中的文件名等在PHP中上傳csv文件。當這裏是在代碼中的錯誤

+0

要顯示錯誤信息,使用'的error_reporting(E_ALL);' –

回答

1

錯誤很可能是:

$path = csv; 

這裏PHP正在尋找一個名稱爲csv的常量,除非您已經定義了它,它將返回null,因此您的$target_path未正確構建。

+0

嗨,CSV被定義爲具有正確權限的目錄。另外,我怎樣才能讓它顯示任何錯誤消息。它甚至沒有顯示任何錯誤消息。 – Vish

+0

爲什麼在$ target_path定義中使用'\\'。檢查以確保您已將'error_reporting'和'display_errors'設置爲正確的位置,以查看PHP錯誤。 –

+0

我也不知道你爲什麼在這裏使用'mysql_real_escape_string'。你並沒有將文件名插入到mysql中,所以我不知道你從中得到了什麼,儘管我不認爲這是你的問題,除非你沒有打開數據庫連接,在這種情況下它會失敗。 –

2

不要做:

$name = mysql_real_escape_string($_FILES['myfile']['name']); 

務必:

$name = $_FILES['myfile']['name']; 

你得到$的MD5的名稱,因此沒有理由去清理它,因爲它會產生一個32字符的十六進制字符串,其將不會包含任何特殊字符。如果文件名包含特殊字符,並且使用上述命令進行轉義,則MD5將完全更改。

+0

感謝您的意見。 – Vish

0

還有一件事是嘗試使用預先定義的DIRECTORY_SEPERATOR不變,同時建立你的$的目標路徑,以便...

$target_path = $path . DIRECTORY_SEPERATOR . $md5 . '.' . $ext; 
+0

仍然無法正常工作。我可以上傳沒有任何特殊字符的文件,名字爲 – Vish

+0

你能給我舉一個你試圖上傳的例子嗎? – Rob

+0

聽起來像是髮梢是你需要從文件名中刪除任何特殊字符,這在保存文件時是不允許的。爲此,長而安全的方法是創建一個函數,並在該函數內定義一個不允許的字符數組,然後返回str_replace($ badchars,'',$ target_path。 – Rob