PHP readfile или file_get_contents в цикле - PullRequest
2 голосов
/ 27 января 2010

могут быть другие способы сделать это, но я ищу довольно простую настройку, потому что это в основном одноразовый процесс.

У меня есть 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 Ответ

3 голосов
/ 27 января 2010

Я бы использовал несколько вариантов ниже. 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
     }
  }
}
...