Blogger Information
Blog 40
fans 1
comment 0
visits 31945
Popular Tutorials
More>
Latest Downloads
More>
Web Effects
Website Source Code
Website Materials
Front End Template
文件上传,目录遍历操作0828
郭稳重啊的博客
Original
1287 people have browsed it

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';
 }
?>

运行实例 »

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

S6ZN$J4CN}B4`UII3ZYFI)M.png



I91$2WB`LES~8(S))$D5FKT.png


实例

<?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>';
    }
}

运行实例 »

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

1X$U28SH8)IQQC7)[$NJE_T.png


总结:其实我不知道总结是啥,我要写点儿什么?是要写我对代码的理解还是哪里掌握的不好要反馈!!!

以下是我对文件上传的个人理解步骤:

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()将其删除

对于目录遍历:这个可以掌握,难点就是文件上传吧,文件上传仅仅是个人理解,有可能有不到位的地方


Correction status:qualified

Teacher's comments:加点自己的总结就更完美啦!
Statement of this Website
The copyright of this blog article belongs to the blogger. Please specify the address when reprinting! If there is any infringement or violation of the law, please contact admin@php.cn Report processing!
All comments Speak rationally on civilized internet, please comply with News Comment Service Agreement
0 comments
Author's latest blog post