PHP feof($file) 对空文件返回 false

har*_*814 3 php

有php代码:

\n\n
#!/usr/bin/php\n<?php\nif ($file = fopen("file.txt", "r")) {\n        while(!feof($file)) {\n                $line = fgets($file);\n                echo "----" , $line , "----";\n            }\n        fclose($file);\n}\n?>\n
Run Code Online (Sandbox Code Playgroud)\n\n

和空文件“file.txt”

\n\n
[root@localhost]# ls -l  file.txt \n-rw-r--r-- 1 root root 0 \xd0\x90\xd0\xbf\xd1\x80 21 10:14 file.txt\n[root@localhost]# file file.txt \nfile.txt: empty\n
Run Code Online (Sandbox Code Playgroud)\n\n

为什么我得到?feof 在第一个循环中应该是 true 还是我错了?

\n\n
[root@localhost ]# php -f  test2.php\n--------\n\n[root@localhost ]# \n
Run Code Online (Sandbox Code Playgroud)\n

Jes*_*era 5

是的,那是因为文件已经是空的,但 PHP 直到执行该fgets()方法才知道它。

为了避免 PHP 读取第一个空行,您必须检查它fgets不是false. 为了实现这一目标应该做类似的事情:

if ($file = fopen("file.txt", "r")) {
    while (($line = fgets($file)) !== false) {
        echo "----" , $line , "----";
    }
    fclose($file);
}
Run Code Online (Sandbox Code Playgroud)