0

在所有答案之后编辑,我更新了函数,它可以工作

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

  1. 步骤:我读取文件夹并将文件添加到数组中
  2. 步骤:我打开每个文件并尝试导入

当我无法导入文件时,当必须首先导入该行中的另一个文件时,就会发生这种情况。

示例:如果我打开一个文件“向地址发送消息”,则当地址未添加到数据库中时,无法导入该文件。但是在这个文件列表的其他一些文件中是“创建地址”文件。当它被创建时,那就很好了,当“到地址的消息”将被添加到最后的filelistarray中时。

我的代码给了我一个偏移问题:

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]);

            }
        }
    }
}

这是我的错误,当我将元素推送到文件列表数组时

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
4

2 回答 2

1

您绝对应该检查是否fopen返回另一个值而不是 FALSE,也许其中一个文件不存在或者您受到限制。

于 2014-03-05T09:07:38.893 回答
1

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

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

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

于 2014-03-05T09:07:52.533 回答