6

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

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

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

4

3 回答 3

7

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

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

if(($fp = fopen($file, "r"))) {
    [...]
}
于 2013-05-14T20:57:20.593 回答
0

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

于 2013-10-24T14:22:25.603 回答
0

从 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

于 2018-07-22T08:24:31.463 回答