php的问题~

来源:百度知道 编辑:UC知道 时间:2024/06/07 23:01:00
$fn=0;//行数初始化
$fp=fopen("list/temp.dat","w");//创建临时文件
fwrite($fp,$title."|".$datname."\r\n");//将新文章信息写进临时文件
$file_data=file('list/art.dat');//
while($file_data[$fn]!=0)//如果不是结束标识,则循环
{
fwrite($fp,$file_data[$fn]);//将列表中的数据一行一行地转入临时文件中
$fn++;
}
fwrite($fp,"0");//向临时文件中添加结束标识
fclose($fp);//关闭临时文件
copy('list/temp.dat','list/art.dat');//将临时文件复制到列表文件
unlink('list/temp.dat');//删除临时文件

------------------------------------------
为什么art.dat文件中就一个“0”呢?
$file_data=file('list/art.dat');//
while($file_data[$fn]!=0)//如果不是结束标识,则循环
{
fwrite($fp,$file_data[$fn]);//将列表中的数据一行一行地转入临时文件中
$fn++;
}

好像是这里的问题~

总体思路没有问题。错在这里的条件判断上。
while($file_data[$fn]!=0)

$file_data[$fn] 其值是字符型,而后面的0是整型。不同类型对比,按后面的整型对待了。相当于 (int)$file_data[$fn] != 0 。等效为 0!=0 结果为 false 。循环无法进行。。

正确写法是
while($file_data[$fn]!= "0")

因为你从文件里读出来的 0 其实是字符。

-----------------------------------------------

补充,我不知道你这样做的目的是什么,是希望最新插入的内容在第一条吗?其实你完全可以用倒序来实现。而不用建临时文件。。
<?
//写入
$fp=fopen("list/art.dat","a");
fwrite($fp,$title."|".$datname."\r\n");
fclose($fp);

//读取
$file_data=file('1.txt');
$fn=count($file_data)-1;
for($i=$fn;$i > 0;$i--) {
    echo $file_data[$i];
}
?>