在PHP中上载文件时如何获取完整的文件路径?
我真的很想知道,当我用PHP上传文件时,如何获得完整的文件路径 这是我的问题 我正在用PHP导入一个csv文件。上载文件不是问题,但用于导入csv文件(即fgetcsv()的函数需要fopen。fopen让我头疼,因为它需要一个精确的文件路径,这意味着该文件应该与php文件位于同一目录中。如果用户从另一个目录获取文件,该怎么办 这是我的密码:在PHP中上载文件时如何获取完整的文件路径?,php,csv,fopen,filepath,fgetcsv,Php,Csv,Fopen,Filepath,Fgetcsv,我真的很想知道,当我用PHP上传文件时,如何获得完整的文件路径 这是我的问题 我正在用PHP导入一个csv文件。上载文件不是问题,但用于导入csv文件(即fgetcsv()的函数需要fopen。fopen让我头疼,因为它需要一个精确的文件路径,这意味着该文件应该与php文件位于同一目录中。如果用户从另一个目录获取文件,该怎么办 这是我的密码: index.php: fopen在此只能获取变量$\u FILES['csv\u file']['name']传递的文件名。我试图获取任何函数来获取int
index.php
:
fopen在此只能获取变量$\u FILES['csv\u file']['name']
传递的文件名。我试图获取任何函数来获取internet上$\u文件的完整文件路径,但找不到任何函数
我对网络开发非常陌生,所以请耐心等待。请尽可能简单地回答。。。请帮助…您需要在配置文件中定义一个路径,或者在您想使用的任何地方定义一个路径,然后该变量无论您定义什么,都可以在您的项目中使用
i.e: define('FILE_UPLOADED_PATH','folder1/folder2/so on');
因此,在输入此代码后,您的完整文件路径将为-
FILE_UPLOADED_PATH.$_FILES['csv_file']['name'];
您可以使用上面的代码作为示例
谢谢。该
['name']
指的是用户计算机上的原始文件名。这对你没有用,尤其是因为它可能是空的。(或者它可能包含假值,导致目录遍历攻击。因此,请避免它。)
您需要使用
['tmp_name']
这是一个类似/tmp/upload85728
的服务器绝对路径,可用于fopen()
或move_uploadu file()
我成功导入了csv文件并将其存储在mysql数据库中
以下是代码(实际上与我的问题几乎相同,只是有一些细微的变化,效果非常好):
index.php
:
如果用户上传的csv文件不是我指定的文件路径怎么办不..不..你实际上不明白我的意思。。每当用户从您的站点上载文件时,该文件将仅上载到您指定的路径。因此,在您需要编辑/显示时,您可以轻松地将其取回…这就是我的建议..谢谢。用户可以从计算机中的任何位置上载文件,但上载后的文件将仅位于特定路径。因此,让我们的任务变得简单。首先,请提供此.CSV文件所在的目录路径以及此编码文件所在的位置。如果您进行打印($文件),您将看到您可以使用更多的信息。例如$\u FILES['csv\u file']['tmp\u name'],其中包含上载文件的完整(临时)路径
fopen
可以用它做一些事情。另请参见@vindia我认为$_FILES['csv_file']['tmp_name']显示了在服务器中临时存储上传文件的位置。我要问的是源的文件路径。你没有得到源的文件路径。从未。出于安全/隐私考虑,浏览器会将其过滤掉@vindia指出了代码中的功能缺陷。无论如何,您都不能使用服务器上的客户端文件路径。这是两个不同的文件系统,相同的路径不起作用
i.e: define('FILE_UPLOADED_PATH','folder1/folder2/so on');
FILE_UPLOADED_PATH.$_FILES['csv_file']['name'];
<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>
<?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);
}
}
?>