将文件推送到循环中的数组

时间:2014-03-05 08:53:09

标签: php arrays file-import

在所有答案之后编辑,我更新了该功能,并且它可以正常工作

我读出了一个导入文件夹。在这个文件夹中有许多不同的文件。

  1. 步骤:我读取文件夹并将文件添加到数组
  2. 步骤:我打开每个文件并尝试导入
  3. 当我无法导入文件时,如果必须先导入此行中的另一个文件,则会发生这种情况。

    示例:如果我打开文件“消息到地址”,则当地址未添加到数据库中时,无法导入。但是在这个文件列表的其他文件中是“创建地址”文件。如果创建了这个,那么当“消息到地址”将被添加到文件列表阵列时,这是好的。

    我的代码给了我一个补偿问题:

    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 个答案:

答案 0 :(得分:1)

你肯定应该检查fopen是否返回另一个值而不是FALSE,可能其中一个文件不存在或者你受到限制。

答案 1 :(得分:1)

根据您的错误,问题不在于array_push,而在于fopen()

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

如果php无法打开该文件,变量$ file将设置为false,因此feof()fgets()会给您错误。