2011-04-28 178 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); 
    } 
} 
?> 
相关问题