【问题标题】:Warning: feof() expects parameter 1 to be resource, boolean given in /volume1/web/comment.php on line 62警告:feof() 期望参数 1 是资源,布尔值在第 62 行的 /volume1/web/comment.php 中给出
【发布时间】:2026-01-11 03:00:01
【问题描述】:

我只是在 youtube 和其他网站的帮助下才开始学习代码,而且我遇到了一个问题。这是我的代码:

<form action="" method="post" id="c">
  <label> Name: <br><input type="text" name="name" size="36"></label><br></br>
  <label> Message: <br><textarea cols="35" rows="5" name="mes"></textarea></label><br></br>
  <input type="submit" name="submit" value="Submit" class="texty" >
</form>

<?php
$post = $_POST["post"];
$name = $_POST["name"];
$text = $_POST["mes"];

if ($post) {

    #WRITE DOWN COMMENTS#

    $write = fopen("c.txt", "a+");
    fwrite($write, "<u><b> $name</b></u><br>$text<br></br>");
    fclose($write);

    #DISPLAY COMMENTS#

    $read = fopen("c.txt", "r+t");
    echo "All comments:<br>";

    while (!feof($read)) {   #this line does the error#
        echo fread($read, 1024);
    }
    fclose($read);
}
else{
    #DISPLAY COMMENTS#

    $read = fopen("c.txt", "r+t");
    echo "All comments:<br>";

    while (!feof($read)) {
        echo fread($read, 1024);
    }
    fclose($read);
}
?>

所以我有 2 个文件,一个是您输入评论并发布的文件,另一个是您输入的内容被粘贴并在页面上回显的另一个 .txt 文件。 我认为文件的权限可能有问题,因为如果我只把它放到“r”,那么它不会给我错误,但它不会保存我尝试发布的内容...... 感谢您阅读和回复。

【问题讨论】:

  • 理解错误试图告诉你什么..
  • @HawasKaPujaari 我认为这就是他问这个问题的原因。
  • 警告:feof() 期望参数 1 是资源,布尔值在第 62 行的 /volume1/web/comment.php 中给出警告:fread() 期望参数 1 是资源,布尔值在 /第 63 行的 volume1/web/comment.php 这是我得到的两个错误,但是对于编码来说是新手,它们并没有告诉我太多:/

标签: php fopen feof


【解决方案1】:

如果文件无法打开,fopen 将返回一个布尔值 (FALSE)。在尝试将其传递给feof 之前,您应该检查$read 是否为假。然后找出你无法读取文件的原因。

if ($read) {
    ...

您的文件可能由于权限而无法读取,或者如果文件本身无法找到。您指的是c.txt,但它与PHP 所在的目录是否相同?你可以通过getcwd找到PHP所在的目录。

echo getcwd()

此外,如果$_POST['post'] 有值,但您的表单中没有使用该名称(至少在所示示例中没有),您的表单处理程序才会进入写入分支。

【讨论】:

  • 我已将所有文件权限设置为 777,所以这不可能,并且知道如何检查它是否为假。我只是按照教程,在错误弹出后,确保代码是相同的。你可以在这里看到我在做什么:www.killthemall.co/test.php 一旦你在我相信的文本框中输入一些内容,帖子也会有一个值。如果我错了,请纠正我。
  • 我编辑了我的答案以解决文件模式和文件所在的位置。至于post 的值,我不知道。在您的示例中没有名为 post 的表单元素,并且您的页面将永远加载,直到我停止它,并且我永远无法到达浏览器将向我显示源代码的位置。
  • 感谢您的解释。主要问题中已经给出了来源。这就是全部:/ 是的,我不知道为什么页面会一直这样做。也许停止刷新并检查源代码。我现在要检查 $read 是否为真。
  • 如果您试图确定表单已经发布,一个常见的习惯用法是检查提交按钮,例如if ($_POST['submit']) {
【解决方案2】:

谢谢 Dan,问题出在提交命令中。一个是提交,另一个是发布,所以它不明白我在做什么。 PS:抱歉回复晚了;_;

【讨论】: