2

可能还有其他方法可以做到这一点,但我正在寻找一种相当简单的设置,因为它基本上是一个一次性的过程。

我有 50 个状态目录,每个目录中有几个 txt 文件。

我想进入每个目录,“读取”每个文件(然后对每个文件进行 mysql 插入)

我尝试了一些变体,但是每次我尝试循环并使用 readfile 或 file_get_contents 时,它都会在第一个文件之后中断,并且我无法打开流:列表其余部分的错误。

我已经搜索了在循环中使用这些函数的陷阱,期待许多不这样做的原因,但没有得到答案。

谢谢回来添加示例代码 - 我看到列出了一个答案,所以我也会检查一下。(这些都不是我的,我只是随便找了个抓文件列表的函数)

    函数 listFilesInDir($start_dir)
        {

        /*
        返回 $start_dir 中的文件数组(非递归)
        */

        $files = 数组();
        $dir = opendir($start_dir);
        而(($myfile = readdir($dir)) !== false)
                {
                if($myfile != '.' && $myfile != '..')
                    {
                        $文件[] = $我的文件;
                     }
                }
        关闭($dir);
        返回$文件;
        }


        $dir = '路径/到/文件';
        $Docs = listFilesInDir($dir);

        foreach($Docs as $key => $fileName)
        {

        // 这里是我尝试使用 file_get_contents 的地方
        $content = file_get_contents($fileName);

        //即使做一个回显作为测试也会在第一个文件之后破坏它
        回声$内容;

        //最终我会在这里为mysql做INSERT INTO




        }

4

1 回答 1

3

下面的一些变体是我会使用的。YMMV 取决于你在做什么。如果您发布代码,我们可以解决您的具体实现,而不仅仅是提供替代解决方案:-)

$dir = new DirectoryIterator('/path/to/states');
foreach($dir as $file)
{
  if(!$file->isDot() && $file->isFile() && strpos($file->getFilename(), '.txt') !== false)
  {
     $content = file_get_contents($file->getPathname());
     if($content)
     {
        // do your insert code
     }
  }
}
于 2010-01-26T21:31:05.350 回答