Вставить файл в массив в цикле

РЕДАКТИРОВАТЬ после всех ответов, я обновил функцию, и она работает

Я прочитал импортную папку. В этой папке доступно много разных файлов.

  1. Шаг: я читаю папку и добавляю файлы в массив
  2. Шаг: я открываю каждый файл и пытаюсь импортировать

Когда я не могу импортировать файл, это происходит, когда другой файл в этой строке должен быть импортирован первым.

Пример: если я открою файл "сообщение по адресу", его нельзя будет импортировать, если адрес не добавлен в базу данных. Но в каком-то другом файле этого списка файлов есть файл "создать адрес". Когда это создано, тогда хорошо, когда "сообщение по адресу" будет добавлено в список файлов в конце.

Мой код дает мне проблему смещения:

function importData( $path, $db, $mail )
{
    //Get available Importfiles
    $filelist = getFilelist( $path );
    for ($i = 0; $i < count($filelist); $i++)
    {
        $filename = $path . "/" . $filelist[$i];
        $file = fopen( $filename,"r" );

        while(!feof( $file )) {
            $items = explode( ";", fgets( $file ) );

            //Get messagetyp
            if( strtolower(trim($items[0])) == "nachrichtentyp" )
            {
                $messagetyp = $items[1];
                break;
            }
        }
        fclose($file);
        if ( $messagetyp )
        {
            $f = "import" . $messagetyp;
            if( !$f($filename, $db, $mail) )
            {
                array_push($filelist, $filelist[$i]);

            }
        }
    }
}

Это моя ошибка, когда я помещаю элемент в массив filelist-array

PHP Warning:  feof() expects parameter 1 to be resource, boolean given in /var/www/symfony/importscript/import.php on line 37
PHP Warning:  fgets() expects parameter 1 to be resource, boolean given in /var/www/symfony/importscript/import.php on line 38

2 ответа

Решение

По вашим ошибкам проблема не в array_push но в fopen():

$file = fopen( $filename,"r" );

Если php не удается открыть этот файл, переменная $file будет установлена ​​в false и из-за этого feof() а также fgets() даст вам ошибки.

Вы обязательно должны проверить, если fopen возвращает значение, отличное от FALSE, возможно, один из файлов не существует или вы ограничены.

Другие вопросы по тегам