Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/joomla/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
在PHP中上载文件时如何获取完整的文件路径?_Php_Csv_Fopen_Filepath_Fgetcsv - Fatal编程技术网

在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

我真的很想知道,当我用PHP上传文件时,如何获得完整的文件路径

这是我的问题

我正在用PHP导入一个csv文件。上载文件不是问题,但用于导入csv文件(即fgetcsv()的函数需要fopen。fopen让我头疼,因为它需要一个精确的文件路径,这意味着该文件应该与php文件位于同一目录中。如果用户从另一个目录获取文件,该怎么办

这是我的密码:

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);
  }
 }
?>