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]; //将文件名重写成系统时间

 运行结果:

    

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

posted @ 2017-03-29 17:32  刘海洋  阅读(319)  评论(0编辑  收藏  举报