【问题标题】:warning feof() expects parameter 1 to be resource警告 feof() 期望参数 1 是资源
【发布时间】:2013-05-14 20:43:35
【问题描述】:

我的错误日志因以下两个错误而失控

warning feof() expects parameter 1 to be resource

warning fread() expects parameter 1 to be resource

负责的代码是

<?php
    $file = '../upload/files/' . $filex;
    header("Content-Disposition: attachment; filename=" . urlencode($file));
    header("Content-Type: application/force-download");
    header("Content-Type: application/octet-stream");
    header("Content-Type: application/download");
    header("Content-Description: File Transfer");
    header("Content-Length: " . filesize($file));
    flush(); // this doesn't really matter.

    $fp = fopen($file, "r");
    while (!feof($fp)) {
        echo fread($fp, 65536);
        flush(); // this is essential for large downloads
    }
    fclose($fp);
?> 

我使用此代码进行标题下载,但现在它吓坏了 - 在有人问我尝试过什么之前,我尝试了 google,但仍然不完全理解错误消息。

【问题讨论】:

  • 这对于服务器可以在没有 PHP 的情况下处理的事情来说似乎需要做很多工作。
  • fopen 出错时返回 FALSE
  • 表示文件指针无法访问文件。确保文件位于该位置,并且运行脚本的用户对其具有读取权限。我没有看到 $filex 被分配到任何地方,所以请确保它已被分配。
  • @NullUserException: 如果文件在 webroot 之外,则不会。
  • 相关的指针是:如果您正在尝试在文档根目录之外提供文件,try X-Sendfile

标签: php error-handling


【解决方案1】:

fopen 失败并返回 false。 false 不是资源,因此是警告。

您最好在将 $fp 作为类似资源的参数注入之前对其进行测试:

if(($fp = fopen($file, "r"))) {
    [...]
}

【讨论】:

  • 选择了第一名 - 有道理
  • 我认为第二个示例可能会以无限循环结束。因为!@feof(false)true。我用 PHP 5.6.4 做了一个简单的测试。
  • 没错。 feof(false) 会触发错误,但 @feof(false) 会返回 false。帖子已编辑。感谢您的警告!
【解决方案2】:

我最近遇到了这个问题。该代码在我的本地环境中完美运行。但是当它被加载到服务器时,我得到了这个线程中讨论的消息。最后,问题是服务器对文件名区分大小写,而我的本地环境不是。更正文件名后,一切都开始工作了。

【讨论】:

    【解决方案3】:

    从 PHP 7 开始,您现在可以使用效率更高的方法:-

    $fileRecs = 0;
    $file = new SplFileObject('textfile.txt, 'r');
    $file->seek(PHP_INT_MAX);
    $fileRecs = $File->key() + 1;
    

    echo "fileRecs=".$fileRecs;

    http://php.net/manual/en/class.splfileobject.php

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2011-10-30
      • 2011-08-28
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多