使 FEOF 尽快返回 true 以避免 explode() “Undefined offset” 错误 (PHP)

make FEOF return true sooner to avoid explode() "Undefined offset" error (PHP)

提问人:Marwane 提问时间:5/30/2021 最后编辑:Some programmer dudeMarwane 更新时间:5/30/2021 访问量:53

问:

我有一个简单的程序来打印文件的内容

<?php

$fp=fopen("../resources/client.txt","r"); 
$trouve=0;
$cnt=0;
while(!feof($fp)){
    $i=0;
    $cnt++;
    echo "<br>";
    $ligne=fgets($fp);
    $row=explode("|",$ligne);
    while($i<=2){
        echo $row[$i]."|";
        $i++;}
    
}

fclose($fp); ?>

它可以完成工作,但在显示后我还收到以下错误:enter image description here

这个问题有一个简单的解决方案吗? 先谢谢大家。

PHP 爆炸 Feof

评论

1赞 Déjà vu 5/30/2021
文件中的空行?顺便说一句,在达到EOF后是错误的,即fgets可能会得到一个空白输入......feof
1赞 AymDev 5/30/2021
文件的内容是什么?
1赞 Some programmer dude 5/30/2021
我的猜测? 在您已经尝试读取文件末尾之后,这不会中断循环(并且 fgets 返回 )。请改用while(!feof($fp))falsewhile ($ligne=fgets($fp))
0赞 Marwane 5/30/2021
很抱歉花时间回答,当我发布这个问题时,我正在学校
0赞 Marwane 5/30/2021
@Breakingnotsobad是的,实际上有一个,我删除了它,它确实有效,谢谢

答:

1赞 ExploitFate 5/30/2021 #1

在空行上,你既没有也没有$row[1]$row[2]

<?php

$fp=fopen("../resources/client.txt","r"); 
$trouve=0;
$cnt=0;
while(!feof($fp)){
    $i=0;
    $cnt++;
    echo "<br>";
    $ligne=fgets($fp);
    $row=explode("|",$ligne);
    if (isset($row[$i])) {
        while($i<=2){
            echo $row[$i]."|";
            $i++;
        }
    }
    
}

fclose($fp); ?>