文件读取/写入
//将整个文件读入一个字符串
file_get_contents(string $filename , bool $use_include_path = false , resource $context = ? , int $offset = -1 , int $maxlen = ?):string
filename 要读取的文件的名称
use_include_path
context 使用stream_context_create()创建的有效上下文资源
offset 读取从原始流开始的偏移量。远程文件不支持查找(偏移量)。尝试在非本地文件上查找可能只需要很小的偏移量,但这是不可预测的,因为它只在缓冲流上工作
maxlen 读取数据的最大长度。默认值是读取,直到到达文件的末尾。注意,此参数应用于过滤器处理的流。
//将一个字符串写入文件
file_put_contents(string $filename , mixed $data , int $flags = 0 , resource $context = ?):int
filename 要被写入数据的文件名
data 要写入的数据。类型可以是 string,array 或者是 stream 资源,如果 data 指定为 stream 资源,这里 stream 中所保存的缓存数据将被写入到指定文件中,这种用法就相似于使用 stream_copy_to_stream() 函数。参数 data 可以是数组(但不能为多维数组)
flags 使用 OR (|) 运算符进行的组合
FILE_USE_INCLUDE_PATH 在 include 目录里搜索 filename
FILE_APPEND 如果文件 filename 已经存在,追加数据而不是覆盖
LOCK_EX 在写入时获得一个独占锁
context 一个 context 资源。
文件读取
// 将filename指定的名字资源绑定到一个流上。
$fp = fopen($filename, $mode);
// 判断文件指针是否读取到文件结束的位置,未到时一直读取
while (!feof($fp)) {
// 读取$length字节的数据
$data1 = fread($fp, $length);
// 读取一行(碰到换行符或EOF)或$length(默认1K)字节的数据
$data2 = fgets($fp, $length);
// 读取一行(碰到换行符或EOF)或$length(默认1K)字节的数据,去掉数据中的HTML和PHP标记($allowable_tags指定不需要去除的标记)
$data3 = fgets($fp, $length, $allowable_tags);
}
// 关闭文件流
fclose($fp);
// $mode = [
// 'r' 只读方式打开,将文件指针指向文件头。
// 'r+' 读写方式打开,将文件指针指向文件头。
// 'w+' 读写方式打开,将文件指针指向文件头并将文件大小截为零。如果文件不存在则尝试创建之。
// 'a+' 读写方式打开,将文件指针指向文件末尾。如果文件不存在则尝试创建之。
// 'x+' 创建并以读写方式打开,将文件指针指向文件头。如果文件已存在,将返回false,如果文件不存在则尝试创建之。
// 'c+' 打开文件进行读写,文件指针位于文件的开头。如果文件不存在,则创建该文件。如果它存在,它既不会被截断(相对于'w'),也不会调用这个函数失败(就像'x'一样)。
// ];
文件写入
// $mode = [
// 'r+' 读写方式打开,将文件指针指向文件头。
// 'w' 写入方式打开,将文件指针指向文件头并将文件大小截为零。如果文件不存在则尝试创建之。
// 'w+' 读写方式打开,将文件指针指向文件头并将文件大小截为零。如果文件不存在则尝试创建之。
// 'a' 写入方式打开,将文件指针指向文件末尾。如果文件不存在则尝试创建之。
// 'a+' 读写方式打开,将文件指针指向文件末尾。如果文件不存在则尝试创建之。
// 'x' 创建并以写入方式打开,将文件指针指向文件头。如果文件已存在,将返回false,如果文件不存在则尝试创建之。
// 'x+' 创建并以读写方式打开,将文件指针指向文件头。如果文件已存在,将返回false,如果文件不存在则尝试创建之。
// 'c' 打开文件仅用于写入。如果文件不存在,则创建该文件。如果它存在,它既不会被截断(相对于'w'),也不会调用这个函数失败(就像'x'一样)。文件指针位于文件的开头。
// 'c+' 打开文件进行读写,如果文件不存在,则创建该文件。如果它存在,它既不会被截断(相对于'w'),也不会调用这个函数失败(就像'x'一样)。文件指针位于文件的开头。
// ];
// 将filename指定的名字资源绑定到一个流上。
$fp = fopen($filename, $mode);
// 在文件指针$fp处写入数据$string(fputs和fwrite相同),如果指定$length那么直写入$length长度的$string,剩余部分不写入
fputs($fp, $string, $length);
fwrite($fp, $string, $length);
// 关闭文件流
fclose($fp);
文件锁定
// 将filename指定的名字资源绑定到一个流上。
$fp = fopen($filename, $mode);
// $operation = [
// LOCK_SH | LOCK_NB 取得共享锁定(读取的程序)且不阻塞,可以不指定LOCK_NB。
// LOCK_EX | LOCK_NB 取得独占锁定(写入的程序)且不阻塞,可以不指定LOCK_NB。
// LOCK_NB 锁定时不阻塞(windows不支持)
// ];
// $wouldblock 如果锁定会堵塞的话(EWOULDBLOCK 错误码情况下),可选的第三个参数会被设置为 true。(windows不支持)
// 文件加锁,成功返回true,失败返回false
flock($fp, $operation, $wouldblock);
// 解锁
flock($fp, LOCK_UN, $wouldblock);
// 关闭文件流
fclose($fp);
文件指针
// 将filename指定的名字资源绑定到一个流上。
$fp = fopen($filename, $mode);
// $whence = [
// SEEK_SET 设定位置等于offset字节。
// SEEK_CUR 设定位置为当前位置加上offset。
// SEEK_END 设定位置为文件尾加上offset
// ];
// 指定文件指针位置,位置是$whence()和$offset(字节数)
fseek($fp, $offset, $whence);
// 获取当前文件指针的位置(文件流中的偏移量(字节))
var_dump(ftell($fp));
// 将文件指针指向开头,成功true,失败false
rewind($fp);
// 获取文件信息数组
fstat($fp);
// 将文件截取为指定大小(字节)
ftruncate($handle, $size);
// 关闭文件流
fclose($fp);
csv读写
// 将filename指定的名字资源绑定到一个流上。
$fp = fopen($filename, $mode);
// $delimiter是字段间的分界符(只允许一个字符,默认:,)
// $enclosure是每个字段的环绕符(只允许一个字符,默认:")
// $escape是转义字符(只允许一个字符,默认:\)
// 读取csv文件返回包含CSV格式字段的数组,$length必须大于CVS文件内最长的一行字节,
while ($csv = fgetcsv($fp, $length, $delimiter = ',', $enclosure = '"', $escape = '\\')) {
// csv中有中文时需要转编码
iconv('gbk', 'utf-8', $csv[1]);
}
// 写入csv文件,$fields代表一行数据的索引数组
fputcsv($fp, $fields, $delimiter = ',', $enclosure = '"');
// 写入中文时需要转编码
iconv('utf-8', 'gbk', $value);
// 关闭文件流
fclose($fp);