博客列表 >文件常用操作—2018年8月28日23时45分

文件常用操作—2018年8月28日23时45分

感恩的心的博客
感恩的心的博客原创
2018年09月02日 10:06:53658浏览

本节课学习了文件常用操作

1、编程: 文件上传与检测

课后老师总结摘录如下:

系统变量: $_FILES是一个二维数组, 一维是当前的文件上件控件的名称, 就是name属性值
  二维是它的当前属性, 最重要的有以下几个:
  $_FILES['file']['name']: 文件原始名称
  $_FILES['file']['type']: 文件类型
  $_FILES['file']['size']: 上传的文件大小
  $_FILES['file']['tmp_name']: 服务器上的临时文件夹
  $_FILES['file']['error']: 上传错误代码

  $_SERVER['PHP_SELF']:当前php脚本 
  enctype = "multipart/form-data" :允许通过表单上传文件
  method:请求类型必须是POST
  
  处理脚本的三种语法:
  (1)最严格的写法:$_SERVER['PHP_SELF']:建议实际工作中用htmlspecialchars()进行防跨域攻击处理
  (2)最死板的写法, 直接写上当前文件名: demo6.php
  (3)最懒的写法: 空, 啥与不写, 默认就是提交到当前页面的php脚本处理

实例

<!--//感恩
//认真的人该变了自己,坚持的人改变了命运!
//日行一善,改变命运!


<form action="<?php echo htmlspecialchars($_SERVER['PHP_SELF']); ?>" method="POST" enctype="multipart/form-data">
    <fieldset>
        <legend>文件上传</legend>
        <p>选择文件:<input type="file" name="upload"></input></p>

    </fieldset>
    <p><button type="submit" name="submit">提交</button></p>
</form>
<?php
//检测类型是否为POST
if ('POST' == $_SERVER['REQUEST_METHOD']) {
    if (!isset($_FILES['upload'])) {
        if ($_FILES['upload']['error'] > 0) {
            echo "<p>错误原因是:{$_FILES['upload']['error']}<strong>";
            }
            return;
        }

        $allow = ['image/jpg', 'image/jpeg', 'image/png'];
        $fileType = $_FILES['upload']['type'];
        if (!in_array($fileType, $allow)){
            echo "<script>alert('仅允许上传jpg和png图片');</script>";
            return;}

        $tmpDir = $_FILES['upload']['tmp_name'];
        $uploadPathAndName = $_FILES['upload']['name'];
        if (!move_uploaded_file($tmpDir, $uploadPathAndName)) {
            echo "<script>alert('上传失败');</script>";
            return;
        }
        echo "<script>alert('上传成功!');</script>";
}
?>

运行实例 »

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

2、编程: 目录遍历

老师讲义如下:


 第一种方式: 传统目录函数

 第1步: opendir('目录')打开目录,成功返回资源,失败返回false
 第2步: readdir($dir)读取目录内容,世功返回文件名,失败返回false
 第3步: closedir($dir)关闭当前目录


 第二种方式:将目录内容保存到数组中进行遍历
 第1步:scandir($dir)将目录转数组中保存
 第2步:遍历目录数组

实例

<?php

//感恩
//认真的人该变了自己,坚持的人改变了命运!
//日行一善,改变命运!

/**
 * 目录遍历操作: 
 * 1. 传统过程函数: opendir(),readdir(),closedir()
 * 2. 目录扫描器: scandir()
 */


//读到一个目录内容到数组中: 
$fileArr= scandir('../0827');
foreach($fileArr as $file){
    if($file!="."&&$file!=".."){
        echo "$file <br>";
    }
}

运行实例 »

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

3、课堂总结

(1)文件操作的基本过程
 * 打开文件;
 * 操作文件:读写追加等;
 * 关闭文件。

a)创建或打开一个本地文件
以r(只读)方式打开文件,不会创建新文件, 类似: r+(读写),指针在开头
$fh = fopen('file1.txt', 'r') or die("不能打开file1.txt文件");

以w(只写)方式打开文件,如文件不存在则创建, 类似: w+(读写),指针在开头
$fh = fopen('file2.txt', 'w') or die("不能打开file2.txt文件");

以a(追加只写)方式打开文件,如文件不存在则创建, 类似: a+(追加读写),指针在未尾
$fh = fopen('file3.txt', 'a') or die("不能打开file3.txt文件");

在windows机器上建议读写模式符添加b,以增强对二进制文件的兼容性,如rb,wb...

b)打开一个远程文件
$fh = fopen('http://www.php.cn/course/801.html', 'r');


c)读取文件到浏览器
从文件指针处读取一行并自动下移
 while ($s = fgets($fh)) { 
 print $s;
 }

d)fgetss()可过滤掉所有的html标签

e). 读取文件到字符串:
file_get_contens($filename)返回字符串

将整个页面读入到一个字符串,这在抓取其它网站内容时很有用,配合过滤正则

实例

<?php

$content = file_get_contents('file.txt');
$content = file_get_contents('http://www.php.cn');
echo '文件大小: '.strlen($content).' 字节', '<br>';
 if (strlen($content) > 0) {
 echo  $content;
 }

运行实例 »

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

 

 

f). 把整个文件读入到数组中,用换行符进行分割

实例

<?php
$arr = file('maxim.txt');
 foreach ($arr as $key => $value) {
 echo '<span style="color:red">格言'.($key+1).': </span>'.$value.'<hr>';
 }

运行实例 »

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

g)文件读写完成后,应该及时关闭
fclose($fh);

h)关闭脚本后,文件也会自动关闭,但还是强烈推荐手工显示式关闭,这是一个好习惯。

(2)//系统常量__FILE__

a.获取文件名
echo '文件名: '.basename(__FILE__).'<br>';

b.获取目录名
echo '目录名: '.dirname(__FILE__).'<br>';
//php5.3+推荐使用常量__DIR__代替dirname()
echo __DIR__, '<br>';

c.pathinfo():将目录名,文件名,扩展或解析到一个数组中
$pathinfo = pathinfo(__FILE__);
echo '目录名:', $pathinfo['dirname'],'<br>';
echo '文件名:', $pathinfo['basename'],'<br>';
echo '扩展名:', $pathinfo['extension'],'<br>';

d.php中没有提供将这三个部分组成一个完整文件名的函数
//因为windows与unix上的目录分隔符不同
//windows是正斜线:/ , unix/linux上的是反斜线\
//所以系统提供一个常量:DIRECTORY_SEPARATOR,可以根据系统自动确定路径分隔符类型

$path = dirname(__FILE__).DIRECTORY_SEPARATOR.basename(__FILE__);
echo $path,'<br>';

var_dump($path==__FILE__);  //, $path与__FILE__完全相同

(3)文件操作

删除文件:unlink(file)

复制copy(old, new)

更名:rename(old,new):二个参数在同一目录下

移动:rename(old,new):二个参数在不同的目录下

创建目录: mkdir(dirname)

删除目录
先清空目录
unlink('admin/file.txt');
rmdir('admin');


 

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