javascript - Php fread() 函数不返回任何内容

标签 javascript php ajax file fread

我有一个简单的 AJAX 函数,当用户单击发送 HTML 文本区域文本的按钮并提醒来自后端的响应时调用:

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

“无法读取文件”是没问题的,但是所有的打开/写入/读取业务都是多余的,可以减少到上面两行代码。

关于javascript - Php fread() 函数不返回任何内容,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27511088/

相关文章:

PHP Math 函数返回错误结果

php - fatal error : Call to a member function execute() on a non-object. ..PDO

php - 如何加载MediaWiki的WikiEditor?

mysql - jsp, 拖放, mysql, treeview

javascript - Rails 表单通过 ajax post 提交,不调用成功或错误回调函数

javascript - 未为动态生成的输入定义 onclick 函数

javascript - 如何将指向所有图像的链接包装在一个 div 中?

javascript - 我的函数参数有问题还是其他什么问题?

带有 html 的 javascript node.js 服务器

javascript - 使用javascript函数调用ajax更新MYSQL结果