php fread() 函数不返回任何内容

Php fread() function not returning anything

本文关键字:返回 任何内 函数 fread php      更新时间:2023-09-26

当用户单击发送HTML文本区域文本并从后端发出响应警报的按钮时,我调用了一个简单的AJAX函数:

send_button.onclick = function ()
{
    var ajax = new XMLHttpRequest();
    var text = text_input.value;
    ajax.onreadystatechange = function ()
    {
        if (ajax.readyState == 4 && ajax.status == 200) alert(ajax.responseText);
    };
    ajax.open("POST", "write.php", true);
    ajax.setRequestHeader('Content-Type', 'application/x-www-form-urlencoded');
    ajax.send("text=" + text);
};

以及后端的PHP脚本,该脚本应该将接收到的文本写入文件并回显文件的内容:

<?php
    $filename = "preview/preview.html";
    $text = (isset($_POST["text"]) ? $_POST["text"] : "");
    try
    {
        $fh = fopen($filename, "w+");
        if (!$fh) throw new Exception("File open error");
        fwrite($fh, $text);
        $filetext = (filesize($filename) > 0 ? fread($fh, filesize($filename)) : "");
        echo $filetext;
        fclose($fh);
    }
   catch (Exception $e)
   {
        header("Location: error.php");
   }
?>

但每次响应都是空的。我尝试回显硬编码的字符串而不是fread()它有效,我也尝试回显filesize($filename)也工作得很好。AJAX 函数发送的 POST 数据也会通过,fwrite($fh, $text)函数完全按照它应该做的事情。我做错了什么?

您没有倒带文件:

  1. 您打开文件进行写入
  2. 你写出一些文本 - 文件指针在文件的末尾
  3. 您尝试从文件中读取一些文本,但指针位于文件的末尾
  4. 不读取任何数据,因此输出空字符串

为什么不使用更像这样的东西:

file_put_contents('preview/preview.html', $_POST['text'], FILE_APPEND);
readfile('preview/preview.html');

"看不懂文件"都很好,但所有的开/写/读业务都是多余的,可以简化为以上两行代码。

你可以

改用$filetext = file_get_contents($filename);。我认为您在写入文件指针后将文件指针移到了末尾,因此您只能看到文件末尾字符。

您可以使用 file_get_contents($file_name)