php中函数fopen()主要用来打开文件,其有很多模式,具体参考php手册,今天主要说下r,a模式。
最近在做一个项目,打算全部用面向对象的方式写,其中就把fopen()封装了下做一个方法调用,其中可以传入模式mod参数,具体代码如下:
function getFileStream($fileName, $mod = 'r'){
$stream = '';
if($fileName){
$stream = fopen($fileName,$mod);
}
return $stream;
}
这样在读取已经存在的文件时,一点问题都没有,但是在创建一个没有存在的文件时,不管你传入的mod是什么,返回的文件流$stream都是只读的,导致新文件一直创建不成功,但是也不会报错,经过多重测试,发现如果要创建一个没有存在的文件时间,需要即fopen()即用,不能用函数封装后再返回文件流,这样永远是只读。上面的代码需要改下一下:
function getFileStream($fileName){
$stream = '';
if($fileName){
$stream = fopen($fileName,'r');
}
return $stream;
}
function createFile($fileName, $fileContext){
if($fileName){
$stream = fopen($fileName,'a');
fwrite($stream.$fileContext);
fclose($stream);
}
}