php fread() 函数不返回任何内容
Php fread() function not returning anything
当用户单击发送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)
函数完全按照它应该做的事情。我做错了什么?
您没有倒带文件:
- 您打开文件进行写入
- 你写出一些文本 - 文件指针在文件的末尾
- 您尝试从文件中读取一些文本,但指针位于文件的末尾
- 不读取任何数据,因此输出空字符串
为什么不使用更像这样的东西:
file_put_contents('preview/preview.html', $_POST['text'], FILE_APPEND);
readfile('preview/preview.html');
"看不懂文件"都很好,但所有的开/写/读业务都是多余的,可以简化为以上两行代码。
你可以
改用$filetext = file_get_contents($filename);
。我认为您在写入文件指针后将文件指针移到了末尾,因此您只能看到文件末尾字符。
您可以使用 file_get_contents($file_name)
相关文章:
- AJAX:$_GET不返回任何值
- document.styleSheets不返回任何内容
- 在解析对象.save()中;没有返回任何原因
- PhantomJs在控制台中发出http请求时不会返回任何状态
- 为什么这个array.filter总是不返回任何内容
- 是否有任何内置方法可以更改JavaScript对象'的属性设置为某个值
- 返回$http内的父函数
- IE8DOM转换XML,并且不从jQueryfind()或filter()返回任何内容
- 比较数组中的连续元素不会返回任何结果(javascript)
- WebKitBrowser.StringByEvaluatingJavaScriptFromString 不返回任何值
- Ajax 不返回任何结果
- 我的 API 调用没有返回任何内容
- Javascript函数img.onload不返回任何内容(真或假)
- 为什么我的 sinon 假服务器不返回任何内容
- beforeSave导致查询不返回任何内容
- Ajax对PHP页面的调用总是不返回任何内容,即使PHP页面有回声
- 控制器的Helper函数不返回任何内容
- 函数不返回任何内容
- Breeze.js getEntities不返回任何实体
- 自定义Angular.js过滤器在IE8中不返回任何内容,在Chrome/FF中运行良好