一、简介
本节课一共三个问题:文件名和目录的遍历和文件上传的实现。
二、作业
1、目录的遍历
实例
<?php echo '<h3>目录的遍历</h3>','<hr color="red">'; $dir = opendir('../0827') or die('打开失败'); while (false != ($file = readdir($dir))){ // print $file; //print nl2br($file."\n"); if ($file != "." && $file != ".."){ print nl2br($file."\n"); } } closedir($dir); echo '<hr color="red">'; $fileArray = scandir('../0827/'); //print_r($fileArray); foreach ($fileArray as $file) { if ($file != "." && $file != "..") { print nl2br($file . "\n"); } }
运行实例 »
点击 "运行实例" 按钮查看在线实例
2、文件的上传实践
实例
<form action="<?php echo htmlspecialchars($_SERVER['PHP_SELF']);?>" method="post" enctype="multipart/form-data"> <input type="hidden" name="MAX_FILE_SIZA" value="1KB"> <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 if ($_SERVER['REQUEST_METHOD'] == 'POST'){ if (isset($_FILES['upload']) && $_FILES['upload']['name'] != ""){ $allow = ['image/jpg','image/jpeg','image/png']; if (in_array($_FILES['upload']['type'],$allow)){ if (move_uploaded_file($_FILES['upload']['tmp_name'],"upload/{$_FILES['upload']['name']}")){ echo "<script> alert('文件上传成功')</script> "; } }else { echo "<script> alert('文件格式仅为jpg,jpeg,png')</script>"; } }else { 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($_FILES['upload']['tmp_name']) && is_file($_FILES['upload']['tmp_name'])) { unlink($_FILES['upload']['tmp_name']); } } ?>
运行实例 »
点击 "运行实例" 按钮查看在线实例
三、总结
文件上传部分存在问题和发现:
1、html部分限制的文件大小没有起作用。
2、业务逻辑中,$_FILES['upload']['error']是在post以后产生的。
3、$_FILES['upload'] 用 isset检测是一般一直存在,所以要加入name是否为空的检测。
4、上传MP3文件时候从最开始就是系统位置错误。不会进入检测环节。