PHP在目录中获取文件

时间:2015-06-29 08:01:55

标签: php mysql

首先,对于一些人来说这可能是一个愚蠢的问题,但由于我是这方面的新手,我在做事时仍在学习。所以这是我的问题:

我正在尝试将所有文​​件放在目录中,以便我可以将其内容插入到数据库中。我目前正在使用localhost。使用glob()功能,我得到了我需要的东西。但这是我遇到问题的地方。由于glob()函数返回文件名的arraylist,如何获取当前正在读取的文件名,并将其也插入数据库表中?

这是我当前使用此site获得的代码:

$dir = "MyFiles/";
$curFile = glob($dir."*.csv");


foreach ($curFile as $filename) {
   $handle = fopen($filename,"r");
   }
   //loop through the file
   do{
      if ($data[0]) {
         mysql_query (" INSERT INTO tblCoordinates (id,filename,lat,lon)
         VALUES
         ('',
          '.$filename.',
          '".addslashes($data[0])."',
          '".addslashes($data[1])."')
         ");

   } while ($data = fgetcsv ($handle,1000,",","'"));
} 

同样,我还需要将文件名插入到数据库中,但是使用我当前的代码,不会插入文件名。

2 个答案:

答案 0 :(得分:2)

我认为你不应该使用这种方法。 每次运行脚本时,您可能(并且可能会)终止数据库(特别是如果此目录中有许多文件,并且每个csv文件中有许多行)。 准备一个事务,一个带有许多值的插入,然后提交似乎更好。 这样,您也可以轻松回显查询,看看是否一切正常。

请注意,您应该检查文件名是文件还是目录(我不确定。和..但您可能还需要检查它)

另外,我建议做一些像

这样的事情
$someVar = glob($dir."*.csv");
foreach($someVar as $filename) {
    // your code here
}

答案 1 :(得分:1)

刚注意到: 在你的陈述中'.$filename.'是错误的。它应该是'$filename' ...

您应首先汇编sql命令,然后将其作为单个语句执行,如下所示:

$glob=glob($dir."*.csv");
foreach ($glob as $filename) {
  $handle = fopen($filename,"r");
  while ($da = fgetcsv ($handle,1000,",","'")) {
    if ($da[0]) $data[]="('','$filename','".JOIN("','",array_slice($da,0,2))."')";
  }
} 
$mysql="INSERT INTO tblCoordinates (id,filename,lat,lon)  VALUES\n".JOIN(",\n",$data);
// echo $mysql // --> check it first ...
mysql_query($mysql);

$dir='./' echo上运行我的数据,INSERT INTO tblCoordinates (id,filename,lat,lon) VALUES ('','./dat.csv','1','23'), ('','./dat.csv','2','27'), ('','./dat.csv','3','31'), ('','./dat.csv','4','35'), ('','./dat.csv','5','39') 给了我这个

mysql_query()

您的陈述是什么样的 - 最重要的是 - 您的错误消息?

(当然:mysqli_query()函数已弃用,请改用setInterval ...)