文件操作以及目录遍历
* 文件操作的基本过程
* 1.打开文件 fopen()
* 2.操作文件:读写追加 fgets()
* 3.关闭文件 fclose()案列如下:
可以用file_get_contents()获取文件内容并返回该字符串,或者用file()把文件内容放到一个数组中。实例
运行实例 »//1.创建文件或代开一个本地文件 //以r(只读)方式打开文件,不会创建文件,指针在开头 $fh = fopen('file1.txt','r') or die('打开失败'); //以w只写方式打开文件,如文件不存在则创建,指针在开头 $fh = fopen('file2.txt','w') or die('打开失败'); //以a(追加只写)方式打开文件,如文件不存在则创建,指针在末尾 $fh = fopen('file3.txt','a') or die('打开失败'); //2.打开一个远程文件 $fh = fopen('http://www.php.cn/','r'); 文件读取 fgets 3.读取文件到浏览器fgets,从文件指针读取一行并自动下移 echo '<pre>'; while($s = fgets($fh)){ echo $s; }; fclose($fh); //fgetss() 可过滤所有html标记,得到纯文本 while ($s = fgetss($fh)){ print $s; } 4.读取文件到字符串 file_get_contents($filename)返回字符串 $content = file_get_contents('http://www.php.cn/'); 将整个页面读取到一个字符串中,有利于抓取网站内容 echo '文件的大小: ',strlen($content),' 字节<br>'; if (strlen($content)>0){ echo $content; } //5. 把整个文件读入都数组,用换行符进行分割 $arr = file('file3.txt'); //foreach($arr as $key => $value){ // echo '<span style="color:greenyellow;">格言'.($key+1).': </span>'.$value.'<hr>'; //} //随机返回一条格言 //var_dump($arr); //if (shuffle($arr)){ // echo $arr[1],'<hr>'; // echo current($arr); //} echo $arr[rand(0,count($arr)-1)],'<br>'; //随机返回3条格言 //array_rand($arr,1)返回一个或多个键名 $k = array_rand($arr,'3'); foreach($k as $key =>$value){//值就是$arr 的键名 echo ($key+1).'.'.$arr[$value].'<br>'; }
点击 "运行实例" 按钮查看在线实例
2.目录的遍历操作
* 第一种方式: 传统的目录函数
* 1.opendir(目录)打开目录,成功返回资源,失败返回false
* 2.readdir($dir) 读取目录内容,成功则遍历返回文件名,失败返回false
* 3.closedir()关闭当前目录
* 第二种方式:将目录内容及保存到数组中进行遍历
* 1.scandir($dir) 将目录转为数组
* 2.遍历数组
实例
$dir = opendir('../8.27') or die('打开失败'); echo $dir,'<br>';//opendir 返回一个资源 //验证readdir是否返回false .表示当前目录 ..表示上级目录 while (false !== ($file = readdir($dir))){//只有false过不了 if ($file != '.' && $file != '..'){//去掉前面两个字符 print $file.'<br>'; } } closedir($dir); echo '<hr>'; $arr = scandir('../8.27'); foreach ($arr as $value){ if ($value != '.'&& $value!='..'){ echo $value,"<br>"; } }
运行实例 »
点击 "运行实例" 按钮查看在线实例
3.文件的上传操作
通过表单选择要上传的文件,然后用全局变量$_FILES这个二维数组来上传并获取上传文件的信息
代码如下:
实例
<form action="<?php echo htmlspecialchars($_SERVER['PHP_SELF']);?>" method="post" enctype="multipart/form-data"> <fieldset > <inpunt type="hidden" name="MAX_FILE_SIZE" value="542488"> <legend align="center">上传文件</legend> <input type="file" name="upload"> <p align="center"><button type="submit" value="上传">上传</button></p> </fieldset> </form> <?php var_dump($_FILES,$_SERVER['REQUEST_METHOD']); //判断上传方式为post if ($_SERVER['REQUEST_METHOD'] == 'POST'){ //判断是否上传了文件 $_FILES['upload']['error']=0 上传成功,>0则出错 if ($_FILES['upload']['error'] == 0){ //判断上传格式 $file_arr = ['image/jpg','image/jpeg','text/html','text/php']; if (in_array($_FILES['upload']['type'],$file_arr)){ //从临时文件夹移到指定文件夹 if (move_uploaded_file($_FILES['upload']['tmp_name'],"./upload/{$_FILES['upload']['name']}")){ echo "<script>alert('上传成功')</script>"; }else{ echo "<script>alert('上传失败')</script>"; } }else{ echo "<script>alert('上传文件的格式不对')</script>"; } }else{ echo "<script>alert('请上传文件')</script>"; } //对上传错误进行处理 if ($_FILES['upload']['error'] > 0 ){ echo '<p>错误原因是:<strong>'; switch ($_FILES['upload']['error']){ case 1: echo '文件超过了php.ini配置中设置的大小'; break; case 2: echo '文件超过了表单中常量设置的大小'; break; case 33: echo '仅有部分文件被上传'; break; case 4: echo '没有文件被上传'; break; default: echo '系统未知错误'; break; } } //删除临时文件 if (file_exists($_FILES['upload']['tmp_name']) && is_file($_FILES['upload']['tmp_name'])){ unlink($_FILES['upload']['tmp_name']); } }else{ echo '上传方式错误'; } ?>
点击 "运行实例" 按钮查看在线实例
总结:文件与目录的操作很类似,都是打开、操作读取、关闭这三个基本步骤,一些常量来可以代替函数的功能,文件会上传到一个临时文件夹,会随着脚本的关闭而消失,所以需要用move_uploaded_file() 来移动到别的文件夹。