2

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

50 個の状態ディレクトリがあり、それぞれに少数の txt ファイルがあります。

各ディレクトリに足を踏み入れ、各ファイルを「読み取り」たい(次に、各ファイルのmysql挿入を実行します)

いくつかのバリエーションを試しましたが、ループして readfile または file_get_contents を使用しようとするたびに、最初のファイルの後で壊れ、リストの残りの部分でストリームを開けませんでした: エラーが発生します。

これらの関数をループで使用することの落とし穴を探しましたが、そうしない理由がたくさんあることを期待していますが、答えが得られません。

サンプルコードを追加していただきありがとうございます-回答がリストされていることがわかりましたので、それも確認します。(これは私のものではありません。ファイルリストをキャプチャする関数を見つけただけです)

    関数 listFilesInDir($start_dir)
        {

        /*
        $start_dir 内のファイルの配列を返します (再帰的ではありません)
        */

        $files = 配列();
        $dir = opendir($start_dir);
        while(($myfile = readdir($dir)) !== false)
                {
                if($myfile != '.' && $myfile != '..')
                    {
                        $files[] = $myfile;
                     }
                }
        closedir($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 に答える