Php fread()函数没有返回任何东西

时间:2014-12-16 18:06:07

标签: javascript php ajax file fread

当用户点击发送HTML textarea文本的按钮并提醒后端的响应时,我会调用一个简单的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)函数完全按照预期执行。
我做错了什么?

3 个答案:

答案 0 :(得分:1)

您没有倒回文件:

  1. 您打开文件进行撰写
  2. 你写出一些文本 - 文件指针位于文件的结尾
  3. 您尝试从文件中读取一些文本,但指针位于文件的结尾
  4. 没有数据被读取,因此您输出一个空字符串
  5. 为什么不使用更像这样的东西:

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

    &#34>无法读取文件&#34;一切都很好,但是所有的开放/写入/读取业务都是多余的,可以简化为上面两行代码。

答案 1 :(得分:0)

您可以使用$filetext = file_get_contents($filename);代替。我认为您在写入文件时将文件指针移动到结尾,因此您只能看到文件结束符。

答案 2 :(得分:0)

您可以使用file_get_contents($ file_name)