2011-04-28 95 views
5

我真的很想知道如何在PHP中上傳文件時獲取完整的文件路徑?如何在PHP中上傳文件時獲取完整的文件路徑?

這是我的問題...

我正在用PHP導入csv文件。上傳文件不是問題,但用於導入fgetcsv()的csv文件的函數需要fopen。 fopen是一個令我頭痛的問題,因爲它需要一個精確的文件路徑,這意味着該文件應該與php文件位於同一目錄中。如果用戶從不同的目錄中獲取文件,該怎麼辦?

這裏是我的代碼:

index.php

<form action="csv_to_database.php" method="POST" enctype="multipart/form-data"> 
<input type="file" name="csv_file" /> 
<input type="submit" name="upload" value="Upload" /> 
</form> 

csv_import.php

<?php 
if ($_FILES['csv_file']['error'] > 0) { 
    echo "Error: " . $_FILES['csv_file']['error'] . "<br />"; 
}else{ 

    if (($handle = fopen($_FILES['csv_file']['name'], "r")) !== FALSE) { 

    while (($data = fgetcsv($handle, 1000, ",")) !== FALSE) { 

    for ($c=0; $c < count($data) ; $c++) { 
    echo $data[$c] . " "; 
    } 
    echo "<br />"; 
    } 
    fclose($handle); 
    } 
} 
?> 

這裏的fopen只能得到這是由可變$_FILES['csv_file']['name']傳遞的文件名。我試圖得到任何函數來獲取$ _FILES的完整文件路徑在互聯網上,但找不到任何。

我對網絡開發很新,所以請耐心等待。請儘可能簡單的答案...請幫助...

+1

如果你做一個print_r($ _ FILES),你會發現還有更多您可以使用的信息。例如$ _FILES ['csv_file'] ['tmp_name'],其中包含上傳文件的完整(臨時)路徑。 'fopen'可以做這些事情。另見http://www.php.net/manual/en/features.file-upload.post-method.php – vindia 2011-04-28 09:52:36

+1

@vindia我認爲$ _FILES ['csv_file'] ['tmp_name']顯示臨時存儲的位置上傳的文件在服務器上。我問的是源的文件路徑。 – 2011-04-28 10:01:50

+0

您沒有獲取源的文件路徑。 **決不**。出於安全/隱私的原因,瀏覽器會對此進行過濾。 @ vindia指出了代碼中的功能錯誤。無論如何您都不能在服務器上使用客戶端文件路徑。這是兩個不同的文件系統,相同的路徑不起作用。 – mario 2011-04-28 10:11:15

回答

6

['name']引用用戶計算機上的原始文件名。這對你來說毫無用處,尤其是因爲它可能是空的。 (也可以包含假值,導致目錄遍歷漏洞。所以,只要避開它。)

您需要使用['tmp_name']這是可用於fopen()move_uploaded_file()/tmp/upload85728服務器絕對路徑。

0

您需要定義一個路徑到您的配置文件或任何你想使用的地方,然後該變量,無論你定義,你可以在你的項目中使用。

i.e: define('FILE_UPLOADED_PATH','folder1/folder2/so on'); 

所以把這段代碼後,您的完整文件路徑將是─

FILE_UPLOADED_PATH.$_FILES['csv_file']['name']; 

你可以使用上面的代碼爲例。

謝謝。

+0

如果用戶上載的csv文件不是來自我指定的文件路徑 – 2011-04-28 09:59:00

+0

no..no..you您實際上並不理解我的意思..每當用戶從您的站點上傳文件時,該文件將上傳到您指定的路徑只有當你需要編輯/顯示你可以很容易地得到那回...這就是我建議......感謝。 – Chandresh 2011-04-28 10:05:00

+0

用戶可以從計算機的任何位置上傳文件,但上傳後的文件只能在特定路徑上。所以它使我們的任務變得簡單。 – Chandresh 2011-04-28 10:07:56

3

我能夠成功導入csv文件並將其存儲在mysql數據庫中。

這裏是代碼(實際上它的幾乎相同,我用很大的影響的一些細微變化的問題):

index.php

<form action="csv_import.php" method="POST" enctype="multipart/form-data" > 
<input type="file" name="csv_file" /> 
<input type="submit" name="upload" value="Upload" /> 
</form> 

csv_import.php

<?php 
if ($_FILES['csv_file']['error'] > 0) { 
    echo "Error: " . $_FILES['csv_file']['error'] . "<br />"; 
}else{ 
    if (($handle = fopen($_FILES['csv_file']['tmp_name'], "r")) !== FALSE) { 

    $dbconn = mysql_connect("localhost", "root", "") or die("Couldn't connect to server!"); 
    mysql_select_db("csv_test") or die("Couldn't find database!"); 

    $ctr = 1; // used to exclude the CSV header 

    while (($data = fgetcsv($handle, 1000, ",")) !== FALSE) { 
    if ($ctr > 1) mysql_query("INSERT INTO ninja_exer (name, village, country) VALUES ('$data[1]', '$data[2]', '$data[3]')"); 
    else $ctr++; 
    } 
    fclose($handle); 
    } 
} 
?> 
相關問題