警告FEOF()预计参数1是资源(warning feof() expects parameter

2019-09-03 05:48发布

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

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);
?> 

我现在用头下载,但它吓坏了这段代码 - 之前有人问我什么都试过,我试过谷歌,但仍不能完全理解的错误消息。

Answer 1:

FOPEN失败并返回false。 假是不是一种资源,因此警告。

你注入它作为一种资源类参数前最好测试$ FP:

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


Answer 2:

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



Answer 3:

从PHP 7,你现在可以使用更有效的方法: -

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

回声 “fileRecs =” $ fileRecs .;

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



文章来源: warning feof() expects parameter 1 to be resource