当用户点击发送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)
函数完全按照预期执行。
我做错了什么?
答案 0 :(得分:1)
您没有倒回文件:
为什么不使用更像这样的东西:
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)