关于2-5的问题

来源:2-7 文件读写函数封装

慕粉2209067689

2017-09-12 18:42:30

function write_file($filename,$date,$clearFlag){
   $dirname=dirname($filename);
   if(!file_exists($filename)){
       mkdir($dirname,0777,true);
   }
   if(is_file($filename)&&is_readable($filename)){
       if(filesize($filename)>0){
       $srcDate=file_get_contents($filename);
            global $srcDate;
       }
   }
   if(is_array($date)||is_object($date)){
       serialize($date);
   }
   if($clearFlag){
       if(!file_put_contents($filename,$date,$clearFlag)){
           return true;
       }else{
           return false;
       }
   }else{
       global $srcDate;
       $date=$srcDate.$date;
       if(!file_put_contents($filename,$date)){
           return true;
       }
           return false;
   }
}
var_dump(write_file('2.txt','564',false));


这个代码每次运行结果都是FALSE,而且都是覆盖写入,请问需要怎么修改才能做到由clearFlag来控制覆盖写入还是追加写

写回答

2回答

imooc的铁粉

2017-09-12

代码判断修改如下

if(file_put_contents($filename,$date,$clearFlag)){
   return true;
}else{
   return false;
}

0

imooc_澈

2017-09-12

您好,从你的代码逻辑来看,当$clearFlag值为true时,覆盖,为false时,追加,我们修改后面的判断代码如下:

  if($clearFlag){
       if(!file_put_contents($filename,$date)){
           return '写入失败';
       }else{
           return '写入成功';
       }
   }else{
       // global $srcDate;
       $date=$srcDate.$date;
       if(!file_put_contents($filename,$date)){
           return '追加失败';
       }
           return '追加成功';
   }
}

按照您的判断,if(!file_put_contents($filename,$date)),写入失败,else的话就写入成功,为了能够更清晰,小慕修改了返回提示,您也依然使用true或false作为返回。

通过参数$clearFlag判断该写入操作是覆盖还是追加,覆盖就将数据直接写入,追加的话就将新数据$date和原来的数据$srcDate连在一起再写入文件。写入是否成功可以通过返回的字符串判断。再去查看文件内容就知道了。

另外,$srcDate不用使用global设置为全局,可以在函数开始定义这个局部变量,设置为空字符串即可。$srcDate='';

如果解决了您的问题,请采纳,祝学习愉快~


1

0 学习 · 2569 问题

查看课程

相似问题