博客列表 >文件操作与目录遍历的基本函数使用以及文件的上传总结——2018年8月28日

文件操作与目录遍历的基本函数使用以及文件的上传总结——2018年8月28日

Jackson
Jackson原创
2018年09月04日 22:41:19786浏览
  1. 文件操作以及目录遍历

    * 文件操作的基本过程
    * 1.打开文件 fopen()
    * 2.操作文件:读写追加 fgets()
    * 3.关闭文件 fclose()

    案列如下:

    实例

    //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>';
    }
    运行实例 »

    点击 "运行实例" 按钮查看在线实例

    可以用file_get_contents()获取文件内容并返回该字符串,或者用file()把文件内容放到一个数组中。

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() 来移动到别的文件夹。

声明:本文内容转载自脚本之家,由网友自发贡献,版权归原作者所有,如您发现涉嫌抄袭侵权,请联系admin@php.cn 核实处理。
全部评论
文明上网理性发言,请遵守新闻评论服务协议