博客列表 >简单文件上传功能与检测以及目录遍历两种方法演示 20180828课后作业

简单文件上传功能与检测以及目录遍历两种方法演示 20180828课后作业

一点蓝的博客
一点蓝的博客原创
2018年08月30日 15:36:22719浏览

本次作业主要了解并熟悉目录操作及遍历的两种方法(一:传统方法用opendir()打开目录,再用readdir()读取目录内容;二:用目录扫描器,scandir()将目录内容返回到一组数组中,然后用foreach循环遍历);以及通过简单实例实现文件上传与检测的功能(需要前端创建一个上传文件的表单,然后通过制定php脚本来执行长传操作并检测)

文件上传与检测实例

<h3>文件上传--制作一个文件上传表单</h3>
<form action="<?php echo htmlspecialchars($_SERVER['PHP_SELF']); ?>" method="POST" enctype="multipart/form-data">
    <input type="hidden" name="MAX_FILE_SIZE" value="542488">//隐藏域限定上传文件大小
    <fieldset>
        <legend>文件上传</legend>
        <input type="file" name="upload">
        <input type="submit" name="submit">
    </fieldset>
</form>
<hr><h3>文件上传--执行脚本</h3>
<h6>1表单提交后检测提交类型(为post执行以下逻辑,不是则提示错误)</h6>
<h6>2如果类型为POST方式,判断提交上传的内容是否存在(存在即继续执行以下逻辑,不存在则纳入错误提示)</h6>
<h6>3设置上传文件格式类型</h6>
<h6>4判断文件上传类型(正确则上传成功,错误则提示格式不对)</h6>
<?php
if ($_SERVER['REQUEST_METHOD'] == 'POST'){//提交类型
    if(isset($_FILES['upload'])){//判断上传文件是否存在
        $allow = ['image/jpg','image/jpeg', 'image/png','image/gif'];//以数组方式设置允许的上传格式
        if(in_array($_FILES['upload']['type'],$allow)){//判断上传格式是否存在于该条件数组中
            $tmpFiles = $_FILES['upload']['tmp_name'];//临时文件名
            $dname = $_FILES['upload']['name'];//目标文件名
            if (move_uploaded_file($tmpFiles, "upload/{$dname}")){//如果格式存在,将文件移动到临时目录
                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 3:
                echo '仅有部分文件被上传';
                break;
            case 4:
                echo '没有文件被上传';
                break;
            case 6:
                echo '没有可用的临时文件夹';
                break;
            case 7:
                echo '磁盘已满,写入失败';
                break;
            case 8:
                echo '上传意外中止';
                break;

            default:
                echo '系统未知错误';
                break;
        }
        echo '</strong></p>';
        //保险起见,最好把创建的临时文件删除,当然系统也会在结束会话时自动清空
        if (file_exists($tmpFiles) && is_file($tmpFiles)) {//file_exists()检查临时文件是否存在,is_file()该文件是否为常规文件
            unlink($tmpFiles);//是的话删除该文件
        }
    }
} else {//不是post类型情况
    echo '提交类型错误';
}
?>

运行实例 »

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

本地截图:082801.jpg

082802.jpg

实例

<?php
echo '<h3>目录遍历操作</h3>';
echo '<h6>传统目录操作:1,opendir(目录)(打开目录,成功则打开目录,失败返回false),2readdir(目录路径)(读取目录内容,成功则返回文件名失败返回false)</h6>';
$dir = opendir('../0822') or die('打开目录失败');//打开目录
while (false != ($files = readdir($dir))){//打开目录成功
   // print $files.'<br>';
    if ($files != "." && $files != "..") {//去掉./..
        print $files."<br>";
    }
}
closedir($dir);//关闭目录

echo '<hr><h6>将目录内容保存到数组中然后遍历:1用scandir()将目录保存到一组数组中,2用foreach循环遍历数组</h6>';
$fileArr = scandir('../0822');
echo '<pre>',var_export($fileArr),'<br><hr>';//查看
foreach ($fileArr as $file){//$file为循环的变量元素
    if ($file != "." && $file != "..") {//去掉./..
        print $file."<br>";
    }
}

运行实例 »

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

本地截图:

082803.jpg

总结:

1了解文件上传基本步骤(创建上传表单,写执行脚本进行相关内容条件检测判断:设计知识点是前端表单与php系统变量与文件、数组、判断语句等的结合。a前端表单<form>标签属性action执行脚本文件method提交类型,enctype="multipart/form-data" :允许通过表单上传文件,表单域b标签<fieldset>,input类型 file ;b执行文件有$_SERVER['REQUEST_METHOD]提交类型,isset()文件是否存在,in_array(查询值,数组)数组中是否有该值,if..else..判断,move_uploaded_file(临时文件名,目标文件名(路径)),$_FILES[值][属性]系统变量是一个二维数组,一维是属性值二维是属性,switch判断等知识点)

2目录操作opendir()打开目录,打开成功会返回要打开的资源,失败提示;readdir(路径)读取内容,scandir(路径)返回一个数组,用foreach循环来配合遍历目录很方便;

3文件或目录相关的常量:_FILE_,当前文件所在的目录全路径(包括文件扩展名),用法:basename(_FILE_)获取文件名带后缀,dirname(_FILE_)获取目录名(魔术常量_DIR_效果等同),pathinfo(_FILE_)将文件名目录名扩展名解析到一组数组中;

4相关操作课堂知识点:删除操作unlink(),复制操作copy(old,new),移动操作rename(old,new),创建目录mkdir(目录名)删除目录(必须为空目录)rmdir(目录名);

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