文件操作
PHP中的文件操作和目录操作
file_get_countents
file_get_contents($filename); // 获取一个文件的内容或一个网络资源的内容.
读取文件和网络资源比较快捷的函数,帮助封装了打开/关闭等操作。
缺点:该函数是一次性把内容全部读出来,放在内存中.因此,如果处理上百兆的大文件,慎用此函数。
读取的文件必须要求存在,否则会警告
<?php
$fileFile = './a.txt';
$fileCoutent = file_get_contents($fileFile);
echo $fileCoutent;
echo file_get_contents('http://www.linxingzhang.com');
?>
file_put_counents
file_put_contents($filename, $data);
该函数用来把内容写入到文件,快捷函数,帮助封装打开写入的细节
<?php
file_put_contents('./b.txt', '嘻嘻哈哈');
?>
判断数据类型
isset(); 变量是否已经声明
empty(); 变量是否为空
defined(); 常量是否已经定义 define();
array_key_exists(mixed key, array serach); 检查给定的键名或索引是否存在于数组中
is_numeric(mixed var); 检测给定的键名或索引是否存在于数组中
is_bool(); 检测变量是否是布尔型
is_float(); 检测变量是否是浮点型 和 is_double()
, is_real()
都一样的用法
is_int(); 检测变量是否是整型is_integer()
一样的用法
is_string(); 检测变量是否是字符串
is_object(); 检测变量是否是一个对象
is_array(); 检测变量是否是数组
is_null(); 检测变量是否为NULL
fopen&fread&fwrite&fclose
fopen($filename, $mode)
参数1:路径
参数2:模式 如:只读模式,如:读写模式,如:追加模式
打开一个文件,返回一个句柄资源
返回值:资源。(通道的作用,沿着通道就能够操作文件。获取了修改这个文件的资格)
fread($handle, $length)
参数1: 资源标识
参数2:读取的长度
返回值:所读取的字符串
读取文件
fwrite($handle, $string);
参数1:资源标识
参数2:内容
返回值:成功字符串数,失败返回false
写入文件
fclose($handle);
关闭资源
<?php
$file = './a.txt';
// 返回获取资格的标识
$fh = fopen($file, 'r');
// 沿着上面返回的$fn资源通道来读文件
echo fread($fh, 10);
$rs = fwrite($fh, 'xixihaha');
echo $rs; // 0 // 只读,不允许写入
fclose($fh);
?>
<?php
$file = './a.txt';
// r+ 读写模式, 并把指针指向文件头
// 覆盖相等字节的字符串
$fh = fopen($file, 'r+');
$rs = fwrite($fh, 'hahahaha');
echo $rs;
echo '<hr />';
// w 写入模式(fread读取不了), 并把文件大小截为0(文件被清空了),指针停于开头处
$file = './modew.txt';
$fh = fopen($file, 'w');
fclose($fh);
echo 'ok';
// a 追加模式 能写,并把指针停止在文件的最后.
$fh = fopen('./modea.txt', 'a');
echo fwrite($fh, '嘻嘻哈哈');
fclose($fh);
?>
file
批处理名单
第一种办法:
<?php
$file = './custom.txt';
$cont = file_get_contents($file);
print_r( explode("\n", $cont) );
/**
* 各个操作系统下,换行符并不一致
* win: \r\n
* *nix: \n
* mac: \r
*/
?>
第二种办法:
<?php
// 第二种
// 打开,一点点的读取,每次读取一行.
// fgets(); 每次读取一行
$file = './custom.txt';
// $mode 可以加`b`,表示以2进制来处理,不受编码的干扰.
$fh = fopen($file, 'rb');
// feof(), end of file 的意思
// 判断指针是否已经到结尾
while ( !feof($fh) ) {
echo fgets($fh) , '<br />';
}
?>
第三种办法:
file(); 直接读取文件内容,并按行拆成数组,返回该数组.
和 file_get_contents(); 的相同之处:
一次性读入,大文件慎用.
<?php
// file();
$file = './custom.txt';
$arr = file($file);
print_r($arr);
?>
file_exists
file_exists 检查文件或目录是否存在
file_exists($filename);
<?php
// 判断文件是否存在
// 获取文件的创建时间/修改时间
$file = './custom.txt';
if ( file_exists($file) ) {
echo $file, '存在', '<br />';
echo '上次修改时间:', date('Y-m-d H:i:s', filemtime($file)), '<br />';
echo '修改时间:', date('Y-m-d H:i:s', filectime($file)), '<br />';
}
?>
excel文件导入到数据库
操作excel,有开源的phpExcel开源类.
excel并不是开放的标准,是微软自己的标准(有可能会变)
如果是简单的想导入数据库,可以先转换csv文件
csv是一种简单的用逗号隔开的文件格式.
方法: excel -> csv -> 文本处理
<?php
$file = './score.csv';
$fh = fopen($file, 'rb');
// 思路1: fgets(); 每次读取一行, 用逗号拆成数组
while ( !feof($fh) ) {
$row = fgets($fh);
print_r( explode(',', $row) );
}
?>
<?php
// 思路2: fgetcsv(); // 封装了csv文件相关规范
$file = './score.csv';
$fh = fopen($file);
while ( !feof($fh) ) {
$row = fgetcsv($fh);
print_r($row);
}
?>
批量处理文件内容
<?php
// 批量处理文件内容
/**
* 思路:
* 循环文件名
* 判断大小 filesize() < 10字节删除
* 判断是否有 fuck 单词. 如果有使用 unlink() 删除.
*/
foreach ( array('a.txt', 'b.txt') as $val ) {
$file = './' . $val;
// 判断大小
if ( filesize($file) < 10 ) {
unlink($file);
echo $file . '小于 10 字节';
continue;
}
// 判断内容
$cont = file_get_contents($file);
if ( stripos($cont, 'fuck') !== false ) {
unlink($_file);
echo $file . '文明用语';
}
}
?>
目录操作
glob(); // 匹配目录下的指定后缀文件.
返回一个获取文件的数组
<?php
// 匹配文件 glob();
var_dump(glob('*.php'));
?>
opendir 打开目录
readdir 读取目录
closedir 关闭目录句柄
is_dir 判断是否为目录
mkdir 创建目录
rmdir 删除目录
<?php
// .
// .. 是虚拟目录,分别代表 当前目录 和 上一级目录
while ( ($filename = readdir($dh)) !== false ) {
echo $filename;
if ( is_dir('./' . $filename) ) {
echo '是目录';
}
echo '<br/>';
}
?>
创建目录
<?php
// 创建目录
foreach ( array('a', 'b', 'c') as $v ) {
$path = $v;
if ( mkdir($path) ) {
echo $path . '创建成功';
} else {
echo $path . '创建失败';
}
}
// 如果创建成功,第二次执行就创建失败.
?>
<?php
foreach ( array('a', 'b', 'c') as $v ) {
$path = $v;
if ( file_exists($path) && is_dir($path) ) { // 增加判断条件:是文件或者是目录, 并且存在当前文件.
echo $path . '该目录已经存在<br/>';
continue;
}
if ( mkdir($path) ) {
echo $path . '创建成功<br/>';
} else {
echo $path . '创建失败';
}
}
?>
删除目录
<?php
// rmdir(); 只能删除非空目录.
// 如果一个目录非空,该如何删除?
// 使用递归,判断是否为空,一层层删除。
foreach( array('a', 'c', 'e') as $v ) {
$path = $v;
if ( file_exists($path) && is_dir($path) ) {
if ( rmdir($path) ) {
echo $path . '删除成功';
} else {
echo $path . '删除失败';
}
} else {
echo $path . '文件不存在';
}
};
?>
**粗体** _斜体_ [链接](http://example.com) `代码` - 列表 > 引用
。你还可以使用@
来通知其他用户。