0828作业
<!-- 创建一个文件上传表单 --> <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 align="center">文件上传</legend> <p><strong>选择文件:</strong><input type="file" name="upload"></p> </fieldset> <p align="center"><button type="submit" name="submit" >上传</button></p> </form> <?php //检测请求类型是否POST,如果不是应该提示用户类型不对 if ($_SERVER['REQUEST_METHOD'] == 'POST') { //检测是否有文件被上传,在php目录下面创建一个upload目录文件 if (isset($_FILES['upload'])) { //设置允许上传的文件类型 $allow = ['image/jpg', 'image/jpeg', 'image/png']; //in_array() 函数搜索数组中是否存在指定的值,全局数组 $_FILES, if (in_array($_FILES['upload']['type'], $allow)) { // $_FILES["file"]["tmp_name"] - 存储在服务器的文件的临时副本的名称 $tmpFile=$_FILES['upload']['tmp_name'];//临时文件 $destFile=$_FILES['upload']['name'];//目标文件 //move_uploaded_file() 函数将上传的文件移动到新位置/临时目录。 //move_uploaded_file(file,newloc)file必需,规定要移动的文件。newloc必需,规定文件的新位置。 if (move_uploaded_file( $tmpFile, "upload/$destFile")) { //上传成功 echo "<script>alert('文件上传成功')</script>"; } } else { //提示格式不对 echo "<script>alert('仅允许上传jpg和png格式的图片')</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>'; //保险起见,最好把创建的临时文件删除,当然系统也会在结束会话时自动清空 //file_exists() 函数检查文件或目录是否存在。file_exists(path) path检查的路径。 //is_file() 函数检查指定的文件名是否是正常的文件 if (file_exists($_FILES['upload']['tmp_name']) && is_file($_FILES['upload']['tmp_name'])) { //unlink() 函数删除文件。 unlink($_FILES['upload']['tmp_name']); } } } else { echo '1'; } ?>
点击 "运行实例" 按钮查看在线实例
<?php echo '<h2>目录遍历操作: </h2>'; echo '<h4>方法1: 传统目录函数opendir(),readdir(),closedir()</h4>'; echo '<h6>(1)传统目录遍历切换到与当前父目录同级的目录</h6>'; // 1.opendir('目录')打开目录,成功返回资源,失败返回false $dir = opendir('../static') or die('打开失败'); //2.readdir($dir)读取目录内容,成功返回文件名,失败返回false while (false != ($file = readdir($dir))) { if ($file != "." && $file != "..") { print $file."<br>"; } } //3.closedir($dir)关闭当前目录 closedir($dir); echo '<hr>'; echo '<h6>(2)传统目录遍历打开到当前目录</h6>'; // 1.opendir('目录')打开目录,成功返回资源,失败返回false $dir=opendir("./") or die('打开失败');//.或./当前目录 //2.readdir($dir)读取目录成功且文件不为.或..时,输出$file while(false !=($file=readdir())){ if($file!="."&&$file!="..") { print $file.'<br>'; } } //3.closedir($dir)关闭当前目录 closedir($dir); echo '<hr>'; //第二种方式:将目录内容保存到数组中进行遍历 echo '<h4>方法2:目录扫描器: scandir()</h4>'; echo '<h6>(1)目录扫描器遍历切换到与当前父目录同级的目录</h6>'; //1.读到一个目录内容到数组中: $fileArr = scandir('../static/'); // print_r($fileArr); //2.遍历目录数组 foreach ($fileArr as $file) { if ($file != "." && $file != "..") { echo "$file.<br>"; } } echo '<h6>(2)目录扫描器遍历打开到当前目录</h6>'; $fileArr=scandir("."); foreach($fileArr as $file){ if($file!="."&&$file!=".."){ print $file.'<br>'; } }
点击 "运行实例" 按钮查看在线实例
总结:其实我不知道总结是啥,我要写点儿什么?是要写我对代码的理解还是哪里掌握的不好要反馈!!!
以下是我对文件上传的个人理解步骤:
1.首先需要建一个文件上传表单
2.检测用户类型,其实就是使用post来获取表单内容,因为表单使用的method="POST"
,所以需要使用post来获取表单内容,并且post所能够传输的数据量较大
3.我们要上传文件,需要先创建一个保存文件的临时目录upload,$_FILES是一个超全局文件数组,所以每上传一个文件,$_FILES就会有其相关的信息,文件名,文件类型,等等,通过isset检测文件能否被上传,如果可以再对文件类型进行设置,从而将我要上传的文件移动到我创建的目录里面
4对于move_uploaded_file($_FILES['upload']['tmp_name'], "upload/{$_FILES['upload']['name']}"的理解
$_FILES['upload']['tmp_name']就是我要上传的临时文件,$_FILES['upload']['name']目标文件:其实就是要上传的文件名,所以每次上传成功的文件名会不一样,是根据$_FILES里面的name的而变化
"upload/{$_FILES['upload']['name'] 文件的新位置,就是在自己创建的临时目录upload下面的一个文件名,也就是我要上传文件所需要移动的新位置
move_uploaded_file() 函数将上传的文件移动到新位置/临时目录
5.文件上传成功或者不成功,以及不成功的原因进行判断
6.对上传错误进行处理_FILES['upload']['error']再使用switch()进行判断
7.将创建的临时文件删除,当然系统也会在结束会话时自动清空,通过检查文件目录,文件名是否正常再使用unlink()将其删除
对于目录遍历:这个可以掌握,难点就是文件上传吧,文件上传仅仅是个人理解,有可能有不到位的地方