本次作业主要了解并熟悉目录操作及遍历的两种方法(一:传统方法用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 '提交类型错误'; } ?>
运行实例 »
点击 "运行实例" 按钮查看在线实例
本地截图:
实例
<?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>"; } }
运行实例 »
点击 "运行实例" 按钮查看在线实例
本地截图:
总结:
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(目录名);