批改状态:合格
                        老师批语:
                    
                            一、简介
本节课一共三个问题:文件名和目录的遍历和文件上传的实现。
二、作业
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文件时候从最开始就是系统位置错误。不会进入检测环节。
                Copyright 2014-2025 https://www.php.cn/ All Rights Reserved | php.cn | 湘ICP备2023035733号