php第6节文件常用操作

网站建设 Kongli 2个月前 (04-28) 41次浏览 0个评论

php对于文件的操步骤分为三步,分别为打开文件、读写文件、关闭文件

打开一个文件 fopen(); 两个参考,第一个为文件路径(支持url获取文件[只能以r读的方式读取]),第二个为打开的方式 r 为读,如果 参数为 w 则是以写的方式打开,并且如果没有这个文件则会创建,前提是以写的方式打开,如果参数为 a 则是以追加的方式打开,如果不存在也会创建文件。

1.获取文件
$files = fopen(‘c:\\file.txt’,’r’) or die(‘不能打开file.txt’);

2.读取文件内容
//fgetss 过滤所有的html标签,它跟fgets是不相同的,
while($fs=fgets($files)){
print $fs;
}

3.关闭文件
fclose($files);

使用 file_get_contents() 获取文件内容,参数为文件路径
$content = file_get-contents(‘file.txt’);
echo ‘文件大小’,strlen($content),’字节’;

使用 file() 将文件读到一个数组中
$arr = file(‘file.txt’) or die(‘打开失败’);
//使用foreach遍历读取内容
foreach($arr as $key=>$value){
    echo $key,’—-‘,$value;
}

随机显示文件数组的内容
echo $arr[array_rand($arr)]; //随机显示当前数组中一条记录
随机取多条记录
$keys = array_rand($arr,3); //随机取3条数据
//取内容
foreach($keys as $value){
    print $arr[$value];
    echo ‘<br>’;
}
目录操作
1.打开目录 opendir();
2.读取目录 readdir();
3.关闭目录 closedir();
常用操作
//获取文件目录
$dir = opendir(‘d:’) or die(‘打开失败’);
//读取目录文件并打印,将读到的文件存放到变量 $file 中,并且判断是否存在,如果是不等于 false 则可以继续进行操作
while(false !=($file=readdir($dir))){
    if($file !=”.” && $file !=”..”){  //(一个点表示的是当前目录,两个点表示的是上级目录) 所以要判断过滤掉 .
        print $file.'<br>’;
    }
}
结果:
4.目录扫描 scandir(); ,它返回的是一个数组,它比上面的函数更为简洁
$fileArr = scandir(‘d:’)
foreach($fileArr as $file){
    if($file !=”.” && $file !=”..”){  //(一个点表示的是当前目录,两个点表示的是上级目录) 所以要判断过滤掉 .
        print nl2br($file.”\n”);
    }
}
5.文件或目录相关的系统常量
1.返回当前文件的绝对路径 __FILE__ 两个 – –
echo __FILE__,'<br>’;
2.获取文件名 basename();
echo ‘文件名:’,basename(__FILE__);
3.获取目录名 dirname(),不包括当前文件的 \ ,除了 dirname() 还有一个魔术常量 __DIR__ 也是跟当前的获取方式一样的
echo ‘目录名:’,dirname(__FILE__);
4.获取文件名 pathinfo(),目录名,扩展名,并保存到一个数据中,它取值是固定的,可以使用 rpint_r($pathinfo) 进行打印查看
要获取的文件类型是哪种
$pathinfo = pathinfo(__FILE__);  //获取
echo ‘目录名:’,$pathinfo[‘dirname’],'<br>’;
echo ‘文件名:’,$pathinfo[‘basename’],'<br>’;
echo ‘扩展名:’,$pathinfo[‘extension’],'<br>’;
拼接地址示例:
使用系统常量 DIRECTORY_SEPARATOR; 自动判断操作系统中的 正反生生斜线,因为 linux 跟 mac 跟 windows的斜线有区别,所有使用 DIRECTORY_SEPARATOR 自动判断
例如:
$path = dirname(__FILE__).DIRECTORY_SEPARATOR.basename(__FILE__); 这样就会生成一个完事的绝对地址路径,跟获取 __FILE__ 得到的结果是一样的。
文件删除移动
1.删除文件 unlink(‘file.txt’) or die(‘删除失败’);
2.复制文件 copy(‘file.txt’,’c://newfile.txt’) or die(‘复制失败’);  //即复制也更改了名字
3.移动文件 rename(‘file.txt’,’c://1.txt’); //它会把当前文件剪切过去,并且移动的过程中必须是在不同的目录下面
4.创建目录 mkdir(‘upload’);
5.删除目录 rmdir(‘upload’); //要删除的前提下必须是这个目录下没有文件才可以,目录下有文件去删除目录会报错
文件上传操作
采用 html+jquery+php实现页面无刷新上传图片示例
htmlcode:
<!doctype html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <meta name="viewport"
          content="width=device-width, user-scalable=no, initial-scale=1.0, maximum-scale=1.0, minimum-scale=1.0">
    <meta http-equiv="X-UA-Compatible" content="ie=edge">
    <title>Document</title>
    <script type="text/javascript" src="http://apps.bdimg.com/libs/jquery/2.1.4/jquery.min.js"></script>
    <script type="text/javascript" src="/js/upload.js"></script>
    <style>
        .main{
            border:1px solid #CCC;
            margin: auto;
            width: 600px;
            height: 300px;
            border-radius: 20px;
        }
        .main p{
            margin-left: 10px;
        }
    </style>
</head>
<body>
<div class="main">
    <p>
        <lable>请选择要上传的文件:</lable>
        <input type="file" id="file">
    </p>
    <p>
        <button>开始上传</button>
    </p>
</div>
</body>
</html>
jscode:
$(document).ready(function () {
    //添加控制事件
    $('button:first').click(function () {


        if($('#file').val().length==0){
            $('#file').parent($('span').remove())
            $('button:first').after('<span style="color: #ff0000;">请先选择上传的文件!</span>')
        }else{
            //获取文件路径
            var files=$("#file")[0].files[0]
            // var file=files.files[0]
            console.log(files)
            //创建 formData 对象 FormData为序列化表单
            var formdata = new FormData()
            formdata.append('files',files)


            //采用 ajax 进行发送
            $.ajax({
                url:'upload.php',
                type:'POST',
                data:formdata,
                dataType:'JSON',
                processData:false,//用于对data参数进行序列化处理,这里必须false;如果是true,就会将FormData转换为String类型
                contentType:false,//一些文件上传http协议的关系,自行百度,如果上传的有文件,那么只能设置为false
                success:function (status) {
                    // console.log(status.msg)
                    $('#file').parent($('span').remove())
                    $('#file').after('
<span style="color:#008800;font-size: 14px;">'+status.msg+'</span>')
                }
            })
        }
    })
})
phpcode:
<?php if($_SERVER['REQUEST_METHOD']=="POST"){ //判断提交过来的请求是否为空,不为空则有文件上传 if(isset($_FILES['files'])){ $img_type=['image/jpg','image/jpeg','image/png']; //判断上传的图片类型是否是图片数组中的类型 if(in_array($_FILES['files']['type'], $img_type)){ //将上传的文件重命名 $date=date('Ymdhis');//得到当前时间,如;20070705163148 $fileName=$_FILES['files']['name'];//得到上传文件的名字 $name=explode('.',$fileName);//将文件名以'.'分割得到后缀名,得到一个数组 $newPath=$date.'.'.$name[1];//得到一个新的文件为'20070705163148.jpg',即新的路径 $oldPath=$_FILES['files']['tmp_name'];//临时文件夹,即以前的路径 //将用户文件保存到指定目录 if(move_uploaded_file($oldPath,"upload/{$newPath}")){ echo json_encode(['msg'=>'上传成功!新的文件名是:'.$newPath]);
            } else {
                echo json_encode(['msg'=>'上传失败']);
            }
        }else{
            echo json_encode(['msg'=>'只可以上传jpg,jpeg,png的图片']);
        }
    }else{
        echo json_encode(['msg'=>'请先上传文件']);
    }
    //上传失败的常见错误捕获
    if($_FILES['files']['error']>0){
        switch ($_FILES['files']['error']) {
            case 1:
                echo json_encode(['msg'=>'文件超过php.ini中的默认大小']);
                break;
            case 2:
                echo json_encode(['msg'=>'文件超过表单设置大小']);
                break;
            case 3:
                echo json_encode(['msg'=>'文件只有一部分上传']);
                break;
            case 4:
                echo json_encode(['msg'=>'没有文件上传']);
                break;
            case 6:
                echo json_encode(['msg'=>'没有临时文件夹']);
                break;
            case 8:
                echo json_encode(['msg'=>'上传意外终止']);
                break;
            default:
                echo json_encode(['msg'=>'未知错误']);
                break;
        }
    }


    //清空临时文件下的文件,系统也会在回话结束时清空
    if(file_exists($_FILES['files']['tmp_name'])&&is_file($_FILES['files']['tmp_name'])){
        unlink($_FILES['files']['tmp_name']);
    }
}
?>
上传结果:
注意:在使用本代码时候,如果使用的是phpstudy套件,并且上传的时候无任何结果,那么可能是这个错误!返回如下:

解决方法:
修改php.ini配置文件

在php.ini配置文件中找到: ;date.timezone = ,把前面的分号去掉在 “=”后面加上时区。

date.timezone = “Asia/Shanghai”

或者

date.timezone=”Asia/Chongqing”

修改完后,重启apache即可。


行者信息 , 版权所有丨如未注明 , 均为原创丨转载请注明原文链接:php第6节文件常用操作
喜欢 (0)
发表我的评论
取消评论
表情 贴图 加粗 删除线 居中 斜体 签到

Hi,您需要填写昵称和邮箱!

  • 昵称 (必填)
  • 邮箱 (必填)
  • 网址