zoukankan      html  css  js  c++  java
  • php 上传图片

    PHP 主要是同过POST方法上传文件,文件上传后,会被存储到服务器段的临时目录中(默认的是系统临时文件目录,可以通过修改PHP文件中的 upload_tmp_dir 选项来改变临时目录),然后需要用 PHP 中的 move_upload_file() 函数将其移动到指定位置。

    上传文件的所有信息被包含在一个全局二维数组$_FLFS种。该数组共5个元素,元素的第一个下标表示表单的文件上传元素名,第二个下标是下面5个预定下标之一,分别描述了上传文件的属性(upload-name 是表单中上传文件标记的名称)。

    1. $_FILSH['upload-name'] ['name']:从客户端向服务器上传文件的文件名。
    2. $_FILSH['upload-name] ['type']:上传的文件MIME类型。这个变量是否赋值取决于浏览器的功能。
    3. $_FILSH['upload-name] ['size']:上传的文件大小。
    4. $_FILSH['upload-name] ['tmp-name']:上传之后,将此文件移动到最终位置之前赋予的临时文件。
    5. $_FILSH['upload-name] ['error']:上传文件状态码,有7种可能取值。

    7种可能的上传的状态码如下:

    • UPLOAD_ERR_OK:文件上传成功;
    • UPLOAD_ERR_INI_SIZE:文件大小超出 upload_max_filesize 所指定的最大值,该值在PHP配置文件中设置;
    • UPLOAD_ERR_FROM_SIZE:文件大小超出 MAX_FILE_SIZE 隐藏表单域参数(可选);
    • UPLOAD_ERR_PARTLAL:文件至上传了一部分;
    • UPLOAD_ERR_NO_FILE:上传表单中没有制定文件;
    • UPLOAD_ERR_NO_TMO_DIR:找不到临时文件;
    • UPLOAD_ERR_CANT_WRITE:文件写入失败。

    move_upload_file()函数的用法如下:

    bool move_uploaded_file ( string $filename , string $destination);
    

      其中 $filename 为上传的文件名, $destination 为上传文件的最终目的的地址。如果 $filename 不适合法的上传文件或者由于某些原因无法移动文件,则 move_uploaded_file() 将返回FALSH,并输出警告信息。

    例如:

    1 <form action="<?=$_SERVER['PHP_SELE'?>" method="post" enctype="multipart/form-data">
    2         <label for="file">文件名:</label>
    3         <input type="file" name="file" id="file"><br>
    4         <input type="submit" name="submit" value="提交">
     1 <?php
     2 $allowedExts = array("gif", "jpeg", "jpg", "png");
     3         $temp = explode(".", $_FILES["file"]["name"]);
     4         echo $_FILES["file"]["size"];
     5         $extension = end($temp); // 获取文件后缀名
     6         if ((($_FILES["file"]["type"] == "image/gif") || ($_FILES["file"]["type"] == "image/jpeg") || ($_FILES["file"]["type"] == "image/jpg") || ($_FILES["file"]["type"] == "image/pjpeg") || ($_FILES["file"]["type"] == "image/x-png") || ($_FILES["file"]["type"] == "image/png")) && ($_FILES["file"]["size"] < 204800) && in_array($extension, $allowedExts)){
     7             if ($_FILES["file"]["error"] > 0){
     8                 echo "错误:: " . $_FILES["file"]["error"] . "<br>";
     9             }else{
    10                 echo "上传文件名: " . $_FILES["file"]["name"] . "<br>";
    11                 echo "文件类型: " . $_FILES["file"]["type"] . "<br>";
    12                 if (file_exists("/home/liuyu/www/upload/upload/" . $_FILES["file"]["name"])){
    13                     echo $_FILES["file"]["name"] . " 文件已经存在。 ";
    14                 }else{
    15                     $str = move_uploaded_file($_FILES["file"]["tmp_name"], "/home/liuyu/www/upload/upload/" . $_FILES["file"]["name"]);
    16                     echo md5($str);
    17                     //echo "文件存储在: " . "/home/liuyu/www/upload/upload/" . $_FILES["file"]["name"];
    18                 }
    19             }
    20         }else{
    21             echo "非法的文件格式";
    22         }

    上传文件的表单中, <from>的属性必须设置为 enctype="multipart/form-data" , <input> 标签的类型 type 必须是 file ,用来在浏览器断限制上传文件大小的隐藏域的名称必须为MAS_FILE_SIZE,其值的单位为字节。

    运行结果:

    如果上传失败,有可能是PHP配置文件纵某项配置不能满足上传该文件的需要。首先,打开PHP配置文件中的 file_uploads 选择必须打开,然后检查 upload_max_filesize 选项值,它被用来设置上传文件大小的上限,如果上传文件的大小超过这个限制将不会被服务器接受,同时表单MAX_FILE_SIZE 也被用来限制文件的大小,但它的值不能大于 upload_max_filesize 的值。此外,内存限制 memory_limit、脚本执行时间的限制 max_execution_time、脚本接收输入时间限制 max_input_time、POST 大小限制 post_max_size等,都会影响上传文件,可以适合当增大这些值来保证文件的成功上传。

    上传文件或图片进行重命名是我们在php上传中会碰到的一个问题了,在重命名无非就是对你上传的文件生成一个随机的字符串了,包括有Md5,随机,或按时间日期来重命名了,下面我来给介绍一下。

     1 <?php
     2 $date = date("ymdhis");
     3         if ((($_FILES["file"]["type"] == "image/gif") || ($_FILES["file"]["type"] == "image/jpeg") || ($_FILES["file"]["type"] == "image/pjpeg")) && ($_FILES["file"]["size"] < 2000000)){
     4             if ($_FILES["file"]["error"] > 0){
     5                 echo "错误: " . $_FILES["file"]["error"] . "<br />";
     6             }else{
     7                     echo "上传文件名: " . $_FILES["file"]["name"] . "<br />";
     8                     echo "文件类型: " . $_FILES["file"]["type"] . "<br />";
     9                     echo "上传大小: " . ($_FILES["file"]["size"] / 1024) . " Kb<br />";
    10                     echo "临时上传文件: " . $_FILES["file"]["tmp_name"] . "<br />";
    11                     $uptype = explode(".", $_FILES["file"]["name"]);
    12                     $newname = $date.".".$uptype[1];
    13                     //echo($newname);
    14                     $_FILES["file"]["name"] = $newname;
    15                     if (file_exists("/home/liuyu/www/upload/upload/" . $_FILES["file"]["name"])){
    16                         echo $_FILES["file"]["name"] . " already exists. ";
    17                     }else{
    18                         $_FILES["file"]["name"] = move_uploaded_file($_FILES["file"]["tmp_name"],"/home/liuyu/www/upload/upload/" . $_FILES["file"]["name"]);
    19                         echo "<script>alert('上传成功!')</script>";
    20                     }
    21                 }
    22         }else{
    23                 echo "上传失败";
    24         }
     $newname = $date.".".$uptype[1]; //将文件名重写成系统时间

     运行结果:

        

        上传文件和修改上传文件重名就做好。

  • 相关阅读:
    mpvue 引入 vant-weapp 踩坑记录
    mac上hbuilder无法启动微信小程序调试窗口的解决办法
    mac 安装了xcode,flutter doctor 却检测不到展示叉叉
    vue 前端复制粘贴方式上传图片
    401 错误时,几个细节检查
    vue 图片src动态加载
    前端优化的大方向
    how to stop code runner in vscode(macOs)
    window server 2008 r2 TLS 升级1.2
    超时时间已到。超时时间已到,但是尚未从池中获取连接。出现这种情况可能是因为所有池连接均在使用,并且达到了最大池大小
  • 原文地址:https://www.cnblogs.com/liuyu2014/p/6640841.html
Copyright © 2011-2022 走看看