PHP feof()False作为第一个参数

时间:2014-05-30 02:52:55

标签: php feof

我最终“解决”其他人的代码问题,因为该网站已关闭,我们无法抓住它们,但我不使用PHP,我认为这是有效的,但不是出于正确的原因:

他们有类似的东西:

$file = ../somedir/somefile.txt;
$fh = fopen($file, 'r');
while (!feof($fh)) {
$line = fget(...

但页面没有加载。

根据日志中的错误,我最终将feof行更改为:

while (feof(False, $fh)) {

实际上似乎解决了这个问题,但在查看了feof()的文档后,我不认为我所做的是对的。

False添加为PHP的feof()函数的第一个参数会产生什么影响?

更新:日志错误为feof() expects parameter 1 to be resource, boolean given in我将布尔值设为True False,这就是我将False设置为第一个arg的原因。

1 个答案:

答案 0 :(得分:1)

  

False添加为PHP的第一个参数会产生什么影响   feof()功能?

嗯,这是feof文档所说的内容:

  

测试文件指针上的文件结尾。

由于函数中只允许一个参数,如下所示:

bool feof ( resource $handle )

您设置的False基本上是在告诉脚本:

while ([the file handle doesn’t equals false do this]) {

所以你基本上是以某种方式使逻辑短路。但是,如果没有看到完整的代码或错误消息,则100%不清楚这样做会对整体应用程序行为产生什么影响。

更新:由于您现在说错误日志显示:

feof() expects parameter 1 to be resource, boolean given in

这基本上意味着问题是您尝试打开的$file,然后创建文件句柄$fh不存在或无法读取:

$file = ../somedir/somefile.txt;
$fh = fopen($file, 'r');

现在最好的解决方案是将条件包装在另一个条件中:

$file = ../somedir/somefile.txt;
if (file_exists($filename)) {
  $fh = fopen($file, 'r');
  while (!feof($fh)) {
  $line = fget(...
}

但现在查看代码是$file = ../somedir/somefile.txt;行正确吗?不应该是:

$file = '../somedir/somefile.txt';

所以你的代码看起来像这样:

$file = '../somedir/somefile.txt';
if (file_exists($filename)) {
  $fh = fopen($file, 'r');
  while (!feof($fh)) {
  $line = fget(...
}

但是,除了其中任何一个,我会检查实际文件../somedir/somefile.txt是否存在并且您的脚本是否可读。可能是位置已更改,或者已更改连接到该文件的权限或用户。这很可能是导致feof() expects parameter 1 to be resource, boolean given in错误的根本原因。