2


0

ループ内のPHP readfileまたはfile_get_contents

これを行う方法は他にもありますが、基本的には1回限りのプロセスなので、かなり簡単なセットアップを探しています。

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 Answer


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
     }
  }
}