博客列表 >目录遍历与文件上传作业-2018年8月29日

目录遍历与文件上传作业-2018年8月29日

YHF的博客
YHF的博客原创
2018年08月29日 22:34:151113浏览

目录遍历:

实例

<?php
/**
 * 目录遍历操作:
 * 1. 传统过程函数: opendir(),readdir(),closedir()
 * 2. 目录扫描器: scandir()
 */
/**
 * 第一种方法:传同目录函数
 * 第一步:opendir('目录')打开目录,成功返回文件名,失败返回false
 * 第二步:readdir($dir)读取目录内容,成功返回文件名,失败返回false
 */
$dir=opendir('./upload') or die('打开失败');
while(false !=($file=readdir($dir))){
    if($file !="." && $file !=".."){
        print $file."<br>";
    }
}
closedir($dir);
echo '<hr>';

/**
 * 第二种方法呀
 * 将目录的内容保存到数组中进行遍历
 * 第一步:scandir($dir)将目录转数组中保存
 * 第二步:遍历目录数组
 */

$dirarr=scandir('./upload');
foreach ($dirarr as $file){
    if($file !="." && $file !=".."){
        echo "$file<br>";
    }
}

运行实例 »

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

dir.jpg

文件上传

实例

<!--
系统变量:$_FILES是一个二维数组,一维是当前文件上控件的名称,就是name属性值
二维就是它的当前属性,最重要的有以下几个:
$_FILES['file']['name']:文件原始名称
$_FILES['file']['type']:文件类型
$_FILES['file']['size']:上传的文件大小
$_FILES['file']['tmp_name']:原服务器上的临时文件夹
$_FILES['fjle']['error']:上传错误代码
-->
<!--$_SERVER['PHP_SELF']:当前php脚本-->
<!--enctype="multipart/form-data":允许通过表单上传文件-->
<!--method:请求类型必须是post-->
<!--
处理脚本的三种语法
1.最严格的写法:$_SERVER['PHP_SELF']:建议实际工作中用htmlspecialchars()进行防跨域攻击处理
2.最死板的写法:直接写上当前文件名:xxx.php
3.最懒的写法:空,即不写,默认就是提交到当前页面的php脚本处理
-->
<!doctype html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <meta name="viewport"
          content="width=device-width, user-scalable=no, initial-scale=1.0, maximum-scale=1.0, minimum-scale=1.0">
    <meta http-equiv="X-UA-Compatible" content="ie=edge">
    <title>文件上传页面</title>
</head>
<body>
<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>
        <p><strong>选择文件:</strong><input type="file" name="upload"></p>
    </fieldset>
    <p align="center"><button type="submit" name="submit">上传</button></p>
</form>
</body>
</html>
<?php
/**
 * Created by PhpStorm.
 * User: 714326675
 * Date: 2018/8/29
 * Time: 16:23
 */
    //检测请求类型是否为post,false则输出请求类型不对
    if($_SERVER['REQUEST_METHOD']=='POST'){
        //检测文件是否存在
        if(isset($_FILES['upload'])) {
            $allow=['image/jpg','image/gif','image/jpeg','image/png'];
            //检测文件是否是允许上传的类型
            if (in_array($_FILES['upload']['type'],$allow)) {
                $file=$_FILES['upload']['tmp_name'];
                $newfile=$_FILES['upload']['name'];
                //将文件移动到临时目录
                if(move_uploaded_file($file,"upload/{$newfile}")){
                    //成功
                    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($_FILES['upload']['tmp_name']) && is_file($_FILES['upload']['tmp_name'])){
                unlink($_FILES['upload']['tmp_name']);
            }
        }
    }else{
        echo '请求类型不对';
    }
?>

运行实例 »

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

up1.jpg

up2.jpg

总结:

1.文件上传

    系统变量:$_FILES是一个二维数组,一维是当前文件上控件的名称,就是name属性值
    二维就是它的当前属性,最重要的有以下几个:
    $_FILES['file']['name']:文件原始名称
    $_FILES['file']['type']:文件类型
    $_FILES['file']['size']:上传的文件大小
    $_FILES['file']['tmp_name']:原服务器上的临时文件夹
    $_FILES['fjle']['error']:上传错误代码

    $_SERVER['PHP_SELF']:当前php脚本
    enctype="multipart/form-data":允许通过表单上传文件

    method:请求类型必须是post

2.目录遍历:

* 第一种方法:传同目录函数
* 第一步:opendir('目录')打开目录,成功返回文件名,失败返回false
* 第二步:readdir($dir)读取目录内容,成功返回文件名,失败返回false

* 第二种方法呀
* 将目录的内容保存到数组中进行遍历
* 第一步:scandir($dir)将目录转数组中保存
* 第二步:遍历目录数组

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