Heim > Backend-Entwicklung > PHP-Tutorial > PHP文件上传的实现及其介绍 php文件是什么文件 php上传文件代码 php 文件上传大小设

PHP文件上传的实现及其介绍 php文件是什么文件 php上传文件代码 php 文件上传大小设

WBOY
Freigeben: 2016-07-29 08:54:18
Original
1071 Leute haben es durchsucht

关于实现及介绍在程序注释中。

提交文件的页面:(可以分别提交到doAction.php、doAction1.php、doAction2.php进行测试)

upload.php



    <meta charset="UTF-8">
    <title>文件上传</title>


    
Nach dem Login kopieren
请选择您要上传的文件:

doAction.php

<?php /**
 * Created by PhpStorm.
 * User: DreamBoy
 * Date: 2016/4/8
 * Time: 15:17
 */
//$_FILES:文件上传变量
/*
 * $_FILES中保存着上传文件的信息
 * name:上传文件的名称
 * type:上传文件的MIME类型
 * tmp_name:上传到服务器上的临时文件名
 * size:上传文件的大小
 * error:上传文件的错误号
 */
print_r($_FILES);
$filename = $_FILES[&#39;myFile&#39;][&#39;name&#39;];
$type = $_FILES[&#39;myFile&#39;][&#39;type&#39;];
$tmp_name = $_FILES[&#39;myFile&#39;][&#39;tmp_name&#39;];
$size = $_FILES[&#39;myFile&#39;][&#39;size&#39;];
$error = $_FILES[&#39;myFile&#39;][&#39;error&#39;];

//上传方式
//第一种方式:
//将服务器上的临时文件移动到指定目录下,移动成功返回true,否则返回false。
//move_uploaded_file($tmp_name, $destination);
//move_uploaded_file($tmp_name, &#39;uploads/&#39; . $filename);

//第二种方式:
//copy($src,$dst) :将文件拷贝到指定目录,拷贝成功返回true,否则返回false
//copy($tmp_name, &#39;uploads/&#39; . $filename);

/*
 * 文件上传配置
 * 服务器端配置:
 * file_uploads = On, 支持HTTP上传
 * upload_tmp_dir=,临时文件保存的目录
 * upload_max_filesize=2M,允许上传文件的最大值
 * max_file_uploads=20,允许一次上传的最大文件数
 * post_max_size=8M,POST方式发送数据的最大值
 *
 * max_execution_time = -1,设置了脚本被解析器终止之前允许的最大执行时间,单位为秒,
 * 放置程序写得不好而占尽服务器资源。-1代表没有限制。
 * max_input_time = 60,脚本解析输入数据允许的最大时间,单位是秒。
 * max_input_nesting_level = 64,设置输入变量的嵌套深度。
 * max_input_vars = 1000,接受多少输入的变量(限制分别应用于$_GET、$_POST和$_COOKIE
 * 超全局变量)指令的使用减轻了以哈希碰撞来进行拒绝服务攻击的可能性。
 * 如果超过指令数量的变量,将会导致E_WARNING的产生,更多的输入变量将会从请求中截断。
 * memory_limit = 128M,最大单线程的独立内存使用量。也就是一个web请求,给予线程最大的内存使用量的定义。
 */

/*
 * 错误信息说明
 * UPLOAD_ERR_OK:其值为0,没有错误发生,文件上传成功
 * UPLOAD_ERR_INT_SIZE:其值为1,上传的文件超过了php.ini中uploaded_max_filesize选项限制的值。
 * UPLOAD_ERR_FORM_SIZE:其值为2,上传文件的大小超过了HTML表单中MAX_FILE_SIZE选项指定的值。
 * UPLOAD_ERR_PARTIAL:其值为3,文件只有部分被上传。
 * UPLOAD_ERR_NO_FILE:其值为4,没有文件被上传。
 * UPLOAD_ERR_NO_TMP_DIR:其值为6,找不到临时文件夹。
 * UPLOAD_ERR_CANT_WRITE:其值为7,文件写入失败。
 * UPLOAD_ERR_EXTENSION:其值为8,上传的文件被PHP扩展程序中断。
 */
Nach dem Login kopieren

doAction1.php

<?php header(&#39;content-type:text/html;charset=utf-8&#39;);
/**
 * Created by PhpStorm.
 * User: DreamBoy
 * Date: 2016/4/8
 * Time: 16:37
 */
//1.通过$_FILES文件上传变量接收上传文件信息
$fileInfo = $_FILES[&#39;myFile&#39;];
$filename = $fileInfo[&#39;name&#39;];
$type = $fileInfo[&#39;type&#39;];
$tmp_name = $fileInfo[&#39;tmp_name&#39;];
$size = $fileInfo[&#39;size&#39;];
$error = $fileInfo[&#39;error&#39;];
//2.判断下错误号,只有为0或者是UPLOAD_ERR_OK,没有错误发生,上传成功。
if($error == UPLOAD_ERR_OK) {
    if(move_uploaded_file($tmp_name, &#39;uploads/&#39; . $filename)) {
        echo &#39;文件&#39; . $filename . &#39;上传成功&#39;;
    } else {
        echo &#39;文件&#39; . $filename . &#39;上传失败&#39;;
    }
} else {
    //匹配错误信息
    switch($error) {
        case 1:
            echo &#39;上传文件超过了PHP配置文件中upload_max_filesize选项的值&#39;;
            break;
        case 2:
            echo &#39;超过了表单MAX_FILE_SIZE限制的大小&#39;;
            break;
        case 3:
            echo &#39;文件部分被上传&#39;;
            break;
        case 4:
            echo &#39;没有选择上传文件&#39;;
            break;
        case 6:
            echo &#39;没有找到临时目录&#39;;
            break;
        case 7:
        case 8:
            echo &#39;系统错误&#39;;
            break;
    }
}

/*
 * 上传文件限制
 * 服务器端限制:
 * 限制上传文件大小
 * 限制上传文件类型
 * 检测是否为真是图片类型
 * 检测是否为HTTP POST方式上传
 */
Nach dem Login kopieren

doAction2.php

<?php /**
 * Created by PhpStorm.
 * User: DreamBoy
 * Date: 2016/4/8
 * Time: 17:45
 */

header(&#39;content-type:text/html;charset=utf-8&#39;);
$fileInfo = $_FILES[&#39;myFile&#39;];
$maxSize = 2097152; //2 * 1024 * 1024;
$allowExt = array(&#39;jpeg&#39;, &#39;jpg&#39;, &#39;png&#39;, &#39;gif&#39;, &#39;wbmp&#39;);
$flag = true; //检测是否为真实图片类型

//1.判断错误号
if($fileInfo[&#39;error&#39;] == 0) {
    //判断上传文件的大小
    if($fileInfo[&#39;size&#39;] > $maxSize) {
        exit('上传文件过大');
    }

    echo $fileInfo['type']; exit;

    //$ext = strtolower(end(explode('.', $fileInfo['name'])));
    $ext = pathinfo($fileInfo['name'],PATHINFO_EXTENSION);
    if(!in_array($ext, $allowExt)) {
        exit('非法文件类型');
    }

    //判断文件是否是通过HTTP POST方式上传来的
    if(!is_uploaded_file($fileInfo['tmp_name'])) {
        exit('文件不是通过HTTP POST方式上传来的');
    }

    //检测是否为真实的图片类型
    /*
     * getimagesize($filename):得到指定图片的信息,如果是图片返回数组
     * 如果不是图片(哪怕文件的后缀是图片的格式,实际上不是图片的话),返回false。
     */
    if($flag) {
        if(!getimagesize($fileInfo['tmp_name'])) {
            exit('不是真正的图片类型');
        }
    }

    $path = 'uploads';
    //php利用mkdir创建多级目录 http://www.daixiaorui.com/read/38.html
    /*
     * mkdir($path,0777,true);
     * 第一个参数:必须,代表要创建的多级目录的路径;
     * 第二个参数:设定目录的权限,默认是 0777,意味着最大可能的访问权;
     * 第三个参数:true表示允许创建多级目录。
     */
    /*
     * chmod() 函数改变文件模式。
     * 如果成功则返回 TRUE,否则返回 FALSE。
     */
    if(!file_exists($path)) {
        mkdir($path, 0777, true); // 0777表示可读可写可执行
        chmod($path, 0777);
    }
    //确保文件名位移,放置重名产生覆盖
    /*
     * uniqid() 函数基于以微秒计的当前时间,生成一个唯一的 ID。
     * 语法
     * uniqid(prefix,more_entropy)
     * 参数	描述
     * prefix	可选。为 ID 规定前缀。如果两个脚本恰好在相同的微秒生成 ID,该参数很有用。
     * more_entropy	可选。规定位于返回值末尾的更多的熵。
     */
    /*
     * microtime()返回当前 Unix 时间戳和微秒数。
     * PHP函数microtime()语法
     * microtime(get_as_float)
     * PHP函数microtime()参数与描述
     * get_as_float 如果给出了 get_as_float 参数并且其值等价于 TRUE,该函数将返回一个浮点数。
     * 通俗地说,带参数true表明只返回一个浮点数(即秒数),不带参数返回一个微秒+秒的字符串。
     * <?php * echo microtime();
     * echo "<br>";
     * echo microtime(true);
     * ?>
     * 结果如下:
     * 0.00000600 1283757623
     * 1283757623
     */
    $uniName = md5(uniqid(microtime(true), true)) . '.' . $ext;
    //$destination = $path . '/' . $fileInfo['name'];
    $destination = $path . '/' . $uniName;

    if(@move_uploaded_file($fileInfo['tmp_name'], $destination)) {
        echo '文件上传成功';
    } else {
        echo '文件上传失败';
    }
} else {
    //匹配错误信息
    switch($fileInfo['error']) {
        case 1:
            echo '上传文件超过了PHP配置文件中upload_max_filesize选项的值';
            break;
        case 2:
            echo '超过了表单MAX_FILE_SIZE限制的大小';
            break;
        case 3:
            echo '文件部分被上传';
            break;
        case 4:
            echo '没有选择上传文件';
            break;
        case 6:
            echo '没有找到临时目录';
            break;
        case 7:
        case 8:
            echo '系统错误';
            break;
    }
}
Nach dem Login kopieren

以上就介绍了PHP文件上传的实现及其介绍,包括了php文件,文件上传方面的内容,希望对PHP教程有兴趣的朋友有所帮助。

Verwandte Etiketten:
Quelle:php.cn
Erklärung dieser Website
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn
Beliebte Tutorials
Mehr>
Neueste Downloads
Mehr>
Web-Effekte
Quellcode der Website
Website-Materialien
Frontend-Vorlage