Вставить файл в массив в цикле
РЕДАКТИРОВАТЬ после всех ответов, я обновил функцию, и она работает
Я прочитал импортную папку. В этой папке доступно много разных файлов.
- Шаг: я читаю папку и добавляю файлы в массив
- Шаг: я открываю каждый файл и пытаюсь импортировать
Когда я не могу импортировать файл, это происходит, когда другой файл в этой строке должен быть импортирован первым.
Пример: если я открою файл "сообщение по адресу", его нельзя будет импортировать, если адрес не добавлен в базу данных. Но в каком-то другом файле этого списка файлов есть файл "создать адрес". Когда это создано, тогда хорошо, когда "сообщение по адресу" будет добавлено в список файлов в конце.
Мой код дает мне проблему смещения:
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, возможно, один из файлов не существует или вы ограничены.