循环中的PHP readfile或file_get_contents

时间:2010-01-26 21:23:17

标签: php file-get-contents readfile

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

我有50个状态目录,每个目录中都有一些txt文件。

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

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

我已经在循环中搜索了使用这些函数的缺陷,期望有很多原因,但不能得到答案。

感谢 回来添加示例代码 - 我看到有一个答案列出,所以我也会检查出来。 (这不是我的,我只是找到一个捕获文件列表的函数)


    function listFilesInDir($start_dir)
        {

        /*
        returns an array of files in $start_dir (not recursive)
        */

        $files = array();
        $dir = opendir($start_dir);
        while(($myfile = readdir($dir)) !== false)
                {
                if($myfile != '.' && $myfile != '..')
                    {
                        $files[] = $myfile;
                     }
                }
        closedir($dir);
        return $files;
        }


        $dir = 'path/to/files';
        $Docs = listFilesInDir($dir);

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

        // HERE IS WHERE I TRIED THE file_get_contents
        $content = file_get_contents($fileName);

        //even doing an echo as a test would break it after the first file
        echo $content;

        //ultimately I would just do INSERT INTO here for mysql




        }

1 个答案:

答案 0 :(得分: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
     }
  }
}