对于学校作业,我必须用PHP编写脚本.它必须创建一个带有名称的数组,并将数组写入文件.然后它必须删除数组,读取文件中的名称并回显它们.
这不起作用:
<?php
$names = array("Name 1", "Name 2", "Name 3", "Name 4", "Name 5");
$filename = "names.txt";
$handle = fopen($filename, "wb+"); //open as read and write
$string = implode("\r\n", $names); //name on each line
fwrite($handle, $string); //write line
$names = array(); //empty array
print_r($names); //print empty array
$string = fread($handle, filesize($filename)); //read file
$names = explode("\r\n", $string); //lines to array
foreach ($names as $name) {
echo("<br>\n$name");
}
fclose($handle);
?>
Run Code Online (Sandbox Code Playgroud)
但这有效:
<?php
$names = array("Name 1", "Name 2", "Name 3", "Name 4", "Name 5");
$filename = "names.txt";
$handle = fopen($filename, "wb"); //open as write
$string = implode("\r\n", $names); //name on each line
fwrite($handle, $string); //write line
fclose($handle); //close
$handle = fopen($filename, "r"); //open as read
$names = array(); //empty array
print_r($names); //print empty array
$string = fread($handle, filesize($filename)); //read file
$names = explode("\r\n", $string); //lines to array
foreach ($names as $name) {
echo("<br>\n$name");
}
fclose($handle);
?>
Run Code Online (Sandbox Code Playgroud)
当我关闭并重新打开文件时,我不知道它为何起作用.任何帮助,将不胜感激.
您只需要重新启动文件指针,因为在使用时fwrite():
fwrite()将string的内容写入handle指向的文件流.
- 已读取长度字节
- 到达EOF(文件结尾)
- 数据包变为可用或发生套接字超时(对于网络流)
- 如果流被读缓冲并且它不表示普通文件,则最多读取一个等于块大小(通常为8192)的字节数; 取决于先前缓冲的数据,返回数据的大小可能大于块大小.
如果你看看 fread()
因此,在您打电话时,fread($handle, filesize($filename));您已经在文件的末尾,因此不会显示任何内容.
要解决此问题,只需使用fseek重新启动指针返回文件的开头即可
示例:
fseek($handle, 0);
Run Code Online (Sandbox Code Playgroud)
你不需要关闭文件..你的第一个代码将完美地工作
编辑
您也可以为您倒带从PHP DOC
将句柄的文件位置指示符设置为文件流的开头.
rewind($handle);
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
343 次 |
| 最近记录: |