>编辑 在所有答案之后,我更新了函数,它可以工作
我读出了一个导入文件夹。此文件夹中有许多不同的文件可用。
- 步骤:我读取文件夹并将文件添加到数组中
- 步骤:我打开每个文件并尝试导入
当必须首先导入此行中的另一个文件时,就会发生这种情况。
示例:如果我打开一个文件"发送到地址的消息",则当地址未添加到数据库中时,无法导入该文件。但是在这个文件列表的其他文件中是"创建地址"文件。当它被创建时,那么它很好,当"发送到地址的消息"将被添加到最后的文件列表数组中时。
我的代码给了我一个偏移问题:
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
根据您的错误,问题不在于array_push
,而在于fopen()
:
$file = fopen( $filename,"r" );
如果 php 无法打开该文件,变量 $file 将设置为 false
,因此feof()
和fgets()
会给你错误。
您绝对应该检查fopen
是否返回 FALSE 以外的其他值,也许其中一个文件不存在或您受到限制。