首页>>后端>>php->php文件上传代码实现?

php文件上传代码实现?

时间:2023-12-02 本站 点击:0

怎样用PHP实现文件上传

创建一个文件上传表单

允许用户从表单上传文件是非常有用的。

请看下面这个供上传文件的 HTML 表单:

html

body

form action="upload_file.php" method="post"

enctype="multipart/form-data"

label for="file"Filename:/label

input type="file" name="file" id="file" /

br /

input type="submit" name="submit" value="Submit" /

/form

/body

/html

请留意如下有关此表单的信息:

form 标签的 enctype 属性规定了在提交表单时要使用哪种内容类型。在表单需要二进制数据时,比如文件内容,请使用 "multipart/form-data"。

input 标签的 type="file" 属性规定了应该把输入作为文件来处理。举例来说,当在浏览器中预览时,会看到输入框旁边有一个浏览按钮。

注释:允许用户上传文件是一个巨大的安全风险。请仅仅允许可信的用户执行文件上传操作。

创建上传脚本

"upload_file.php" 文件含有供上传文件的代码:

?php

if ($_FILES["file"]["error"] 0)

{

echo "Error: " . $_FILES["file"]["error"] . "br /";

}

else

{

echo "Upload: " . $_FILES["file"]["name"] . "br /";

echo "Type: " . $_FILES["file"]["type"] . "br /";

echo "Size: " . ($_FILES["file"]["size"] / 1024) . " Kbbr /";

echo "Stored in: " . $_FILES["file"]["tmp_name"];

}

?

通过使用 PHP 的全局数组 $_FILES,你可以从客户计算机向远程服务器上传文件。

第一个参数是表单的 input name,第二个下标可以是 "name", "type", "size", "tmp_name" 或 "error"。就像这样:

$_FILES["file"]["name"] - 被上传文件的名称

$_FILES["file"]["type"] - 被上传文件的类型

$_FILES["file"]["size"] - 被上传文件的大小,以字节计

$_FILES["file"]["tmp_name"] - 存储在服务器的文件的临时副本的名称

$_FILES["file"]["error"] - 由文件上传导致的错误代码

这是一种非常简单文件上传方式。基于安全方面的考虑,您应当增加有关什么用户有权上传文件的限制。

上传限制

在这个脚本中,我们增加了对文件上传的限制。用户只能上传 .gif 或 .jpeg 文件,文件大小必须小于 20 kb:

?php

if ((($_FILES["file"]["type"] == "image/gif")

|| ($_FILES["file"]["type"] == "image/jpeg")

|| ($_FILES["file"]["type"] == "image/pjpeg"))

($_FILES["file"]["size"] 20000))

{

if ($_FILES["file"]["error"] 0)

{

echo "Error: " . $_FILES["file"]["error"] . "br /";

}

else

{

echo "Upload: " . $_FILES["file"]["name"] . "br /";

echo "Type: " . $_FILES["file"]["type"] . "br /";

echo "Size: " . ($_FILES["file"]["size"] / 1024) . " Kbbr /";

echo "Stored in: " . $_FILES["file"]["tmp_name"];

}

}

else

{

echo "Invalid file";

}

?

注释:对于 IE,识别 jpg 文件的类型必须是 pjpeg,对于 FireFox,必须是 jpeg。

保存被上传的文件

上面的例子在服务器的 PHP 临时文件夹创建了一个被上传文件的临时副本。

这个临时的复制文件会在脚本结束时消失。要保存被上传的文件,我们需要把它拷贝到另外的位置:

?php

if ((($_FILES["file"]["type"] == "image/gif")

|| ($_FILES["file"]["type"] == "image/jpeg")

|| ($_FILES["file"]["type"] == "image/pjpeg"))

($_FILES["file"]["size"] 20000))

{

if ($_FILES["file"]["error"] 0)

{

echo "Return Code: " . $_FILES["file"]["error"] . "br /";

}

else

{

echo "Upload: " . $_FILES["file"]["name"] . "br /";

echo "Type: " . $_FILES["file"]["type"] . "br /";

echo "Size: " . ($_FILES["file"]["size"] / 1024) . " Kbbr /";

echo "Temp file: " . $_FILES["file"]["tmp_name"] . "br /";

if (file_exists("upload/" . $_FILES["file"]["name"]))

{

echo $_FILES["file"]["name"] . " already exists. ";

}

else

{

move_uploaded_file($_FILES["file"]["tmp_name"],

"upload/" . $_FILES["file"]["name"]);

echo "Stored in: " . "upload/" . $_FILES["file"]["name"];

}

}

}

else

{

echo "Invalid file";

}

?

上面的脚本检测了是否已存在此文件,如果不存在,则把文件拷贝到指定的文件夹。

注释:这个例子把文件保存到了名为 "upload" 的新文件夹。

如何在php上实现文件上传功能

PHP 一般使用 POST 方法上传文件,下面是一个简单的文件上传示例,里面有相关的注释:

up.htm 文件:

----------

html

head

meta http-equiv="Content-Type" content="text/html; charset=gb2312"

titleUp Sample/title

/head

body

form action="up.php" method="post" enctype="multipart/form-data"

!--备注:表单中 enctype="multipart/form-data " 的意思,是设置表单的 MIME 编码。默认情况,这个编码格式是application/x-www-form-urlencoded,不能用于文件上传;只有使用了 multipart/form-data ,才能完整的传递文件数据,进行下面的操作,并且 method 要设置为 "post"--

File:br /

input type="file" name="upfile" size="30"br /

!--上传框要设置 type="file"--

br /

input type="submit" value="Upload"

/form

/body

/html

----------

up.php 文件

----------

?php

if (is_uploaded_file($_FILES["upfile"]["tmp_name"])){

//如果有文件上传

//is_uploaded_file -- 判断文件是否是通过 HTTP POST 上传的,返回布尔值

//$_FILES['upfilename']['...'],其中的 'upfilename' 即为上传框的 name 属性

//$_FILES['upfile']['tmp_name'] -- 文件被上传后在服务端储存的临时文件名,一般是系统默认

if(!eregi('pdf', $_FILES['upfile']['type'])){

//我们这里假设你要上传一个 pdf 文件

//if(!eregi('pdf', $_FILES['upfile']['type'])) 这个是判断上传文件类型的,是不是 pdf 文件,当然,若是想判断是否是 jpg 文件的话,将 pdf 改成 jpg 就可以了,即 if(!eregi('jpg', $_FILES['upfile']['type']))

//$_FILES['upfile']['type'] 是文件的 MIME 类型,如果浏览器提供此信息的话。例如“image/gif”

echo 'The uploaded file is not an pdf File! Please upload a right file!';

}else{

$filename = $_FILES['upfile']['name'];

//$filename = $_FILES['upfile']['name'],这里是指定上传后的文件名,这里使用的仍是原来的文件名字,($_FILES['upfile']['name'] 是原始文件的名字)

if(move_uploaded_file($_FILES["upfile"]["tmp_name"], dirname(__FILE__)."/upload_file/".$filename)){

//这里就是上传文件

//dirname(__FILE__)."/upload_file/".$file_name -- 指定上传的目标文件,假设你要上传的目标文件夹upload_file 是和当前文件(upload.php)在同一文件夹下

//chmod(dirname(__FILE__)."/upload_file/". $file_name, 0444);

//上面注释掉的是用来改变上传后文件的属性,444 即只有执行和读的权限(看情况加上)

echo $_FILES["upfile"]["name"] . " uploaded succeed!!!";

}else{

echo "Can't upload!!!";

}

}

}else{

echo "File is not selected";

}

//需要注意的:

/*

在你的 up.php 同级目录下建立 upload_file 文件夹,来存放上传的文件

在上传之前要看一下 php 的配置文件:php.ini 中的三处设置

1.是否允许文件上传:( file_uploads = On )

2.文件上传的最大 size:( upload_max_filesize )

3.post 的最大 size ( post_max_size ) 这个大小设置成和 uplod_max_filesize 一样大或比 uplod_max_filesize 大

*/

/*

这只是很简单的一个文件上传的例子,为了帮助理解,只是判断了一下上传文件的类型,还可以使用 if 语句来判断上传文件的大小($_FILES['upfile']['type'])),并进行提示控制等,相关可以查阅 $_FILE['upfile'] 数组的各个值分别代表什么

*/

?

怎么用php做一个文件上传代码实例

?php

  /** 

    file: fileupload.class.php 文件上传类FileUpload

    本类的实例对象用于处理上传文件,可以上传一个文件,也可同时处理多个文件上传

  */

  class FileUpload { 

    private $path = "./uploads";          //上传文件保存的路径

    private $allowtype = array('jpg','gif','png'); //设置限制上传文件的类型

    private $maxsize = 1000000;           //限制文件上传大小(字节)

    private $israndname = true;           //设置是否随机重命名文件, false不随机

 

    private $originName;              //源文件名

    private $tmpFileName;              //临时文件名

    private $fileType;               //文件类型(文件后缀)

    private $fileSize;               //文件大小

    private $newFileName;              //新文件名

    private $errorNum = 0;             //错误号

    private $errorMess="";             //错误报告消息

 

    /**

     * 用于设置成员属性($path, $allowtype,$maxsize, $israndname)

     * 可以通过连贯操作一次设置多个属性值

     *@param  string $key  成员属性名(不区分大小写)

     *@param  mixed  $val  为成员属性设置的值

     *@return  object     返回自己对象$this,可以用于连贯操作

     */

    function set($key, $val){

      $key = strtolower($key); 

      if( array_key_exists( $key, get_class_vars(get_class($this) ) ) ){

        $this-setOption($key, $val);

      }

      return $this;

    }

 

    /**

     * 调用该方法上传文件

     * @param  string $fileFile  上传文件的表单名称 

     * @return bool        如果上传成功返回数true 

     */

 

    function upload($fileField) {

      $return = true;

      /* 检查文件路径是滞合法 */

      if( !$this-checkFilePath() ) {       

        $this-errorMess = $this-getError();

        return false;

      }

      /* 将文件上传的信息取出赋给变量 */

      $name = $_FILES[$fileField]['name'];

      $tmp_name = $_FILES[$fileField]['tmp_name'];

      $size = $_FILES[$fileField]['size'];

      $error = $_FILES[$fileField]['error'];

 

      /* 如果是多个文件上传则$file["name"]会是一个数组 */

      if(is_Array($name)){    

        $errors=array();

        /*多个文件上传则循环处理 , 这个循环只有检查上传文件的作用,并没有真正上传 */

        for($i = 0; $i  count($name); $i++){ 

          /*设置文件信息 */

          if($this-setFiles($name[$i],$tmp_name[$i],$size[$i],$error[$i] )) {

            if(!$this-checkFileSize() || !$this-checkFileType()){

              $errors[] = $this-getError();

              $return=false; 

            }

          }else{

            $errors[] = $this-getError();

            $return=false;

          }

          /* 如果有问题,则重新初使化属性 */

          if(!$return)          

            $this-setFiles();

        }

 

        if($return){

          /* 存放所有上传后文件名的变量数组 */

          $fileNames = array();      

          /* 如果上传的多个文件都是合法的,则通过销魂循环向服务器上传文件 */

          for($i = 0; $i  count($name); $i++){ 

            if($this-setFiles($name[$i], $tmp_name[$i], $size[$i], $error[$i] )) {

              $this-setNewFileName(); 

              if(!$this-copyFile()){

                $errors[] = $this-getError();

                $return = false;

              }

              $fileNames[] = $this-newFileName;  

            }          

          }

          $this-newFileName = $fileNames;

        }

        $this-errorMess = $errors;

        return $return;

      /*上传单个文件处理方法*/

      } else {

        /* 设置文件信息 */

        if($this-setFiles($name,$tmp_name,$size,$error)) {

          /* 上传之前先检查一下大小和类型 */

          if($this-checkFileSize()  $this-checkFileType()){ 

            /* 为上传文件设置新文件名 */

            $this-setNewFileName(); 

            /* 上传文件  返回0为成功, 小于0都为错误 */

            if($this-copyFile()){ 

              return true;

            }else{

              $return=false;

            }

          }else{

            $return=false;

          }

        } else {

          $return=false; 

        }

        //如果$return为false, 则出错,将错误信息保存在属性errorMess中

        if(!$return)

          $this-errorMess=$this-getError();  

 

        return $return;

      }

    }

 

    /** 

     * 获取上传后的文件名称

     * @param  void   没有参数

     * @return string 上传后,新文件的名称, 如果是多文件上传返回数组

     */

    public function getFileName(){

      return $this-newFileName;

    }

 

    /**

     * 上传失败后,调用该方法则返回,上传出错信息

     * @param  void   没有参数

     * @return string  返回上传文件出错的信息报告,如果是多文件上传返回数组

     */

    public function getErrorMsg(){

      return $this-errorMess;

    }

 

    /* 设置上传出错信息 */

    private function getError() {

      $str = "上传文件font color='red'{$this-originName}/font时出错 : ";

      switch ($this-errorNum) {

        case 4: $str .= "没有文件被上传"; break;

        case 3: $str .= "文件只有部分被上传"; break;

        case 2: $str .= "上传文件的大小超过了HTML表单中MAX_FILE_SIZE选项指定的值"; break;

        case 1: $str .= "上传的文件超过了php.ini中upload_max_filesize选项限制的值"; break;

        case -1: $str .= "未允许类型"; break;

        case -2: $str .= "文件过大,上传的文件不能超过{$this-maxsize}个字节"; break;

        case -3: $str .= "上传失败"; break;

        case -4: $str .= "建立存放上传文件目录失败,请重新指定上传目录"; break;

        case -5: $str .= "必须指定上传文件的路径"; break;

        default: $str .= "未知错误";

      }

      return $str.'br';

    }

 

    /* 设置和$_FILES有关的内容 */

    private function setFiles($name="", $tmp_name="", $size=0, $error=0) {

      $this-setOption('errorNum', $error);

      if($error)

        return false;

      $this-setOption('originName', $name);

      $this-setOption('tmpFileName',$tmp_name);

      $aryStr = explode(".", $name);

      $this-setOption('fileType', strtolower($aryStr[count($aryStr)-1]));

      $this-setOption('fileSize', $size);

      return true;

    }

 

    /* 为单个成员属性设置值 */

    private function setOption($key, $val) {

      $this-$key = $val;

    }

 

    /* 设置上传后的文件名称 */

    private function setNewFileName() {

      if ($this-israndname) {

        $this-setOption('newFileName', $this-proRandName());  

      } else{ 

        $this-setOption('newFileName', $this-originName);

      } 

    }

 

    /* 检查上传的文件是否是合法的类型 */

    private function checkFileType() {

      if (in_array(strtolower($this-fileType), $this-allowtype)) {

        return true;

      }else {

        $this-setOption('errorNum', -1);

        return false;

      }

    }

 

    /* 检查上传的文件是否是允许的大小 */

    private function checkFileSize() {

      if ($this-fileSize  $this-maxsize) {

        $this-setOption('errorNum', -2);

        return false;

      }else{

        return true;

      }

    }

 

    /* 检查是否有存放上传文件的目录 */

    private function checkFilePath() {

      if(empty($this-path)){

        $this-setOption('errorNum', -5);

        return false;

      }

      if (!file_exists($this-path) || !is_writable($this-path)) {

        if (!@mkdir($this-path, 0755)) {

          $this-setOption('errorNum', -4);

          return false;

        }

      }

      return true;

    }

 

    /* 设置随机文件名 */

    private function proRandName() {    

      $fileName = date('YmdHis')."_".rand(100,999);    

      return $fileName.'.'.$this-fileType; 

    }

 

    /* 复制上传文件到指定的位置 */

    private function copyFile() {

      if(!$this-errorNum) {

        $path = rtrim($this-path, '/').'/';

        $path .= $this-newFileName;

        if (@move_uploaded_file($this-tmpFileName, $path)) {

          return true;

        }else{

          $this-setOption('errorNum', -3);

          return false;

        }

      } else {

        return false;

      }

    }

  }

php文件上传代码

1、建立一个上传网页upload.html:

form enctype="multipart/form-data" action="upload_.php" method="POST"

选择文件: input name="你的文件名字段" type="file" /

input type="确认" value="Send File" /

/form

2.上传php最基本的代码

if($_POST){

move_uploaded_file($_FILES['你的文件名字段']['tmp_name'],你的路径);

//注意 你的文件名字段 为网页的form字段 你的路径为网站你想上传的文件路径

}

以上为核心代码,加入判断文件大小,类型等可以根据 $_FILES['你的文件名字段'] 里其它的几个键值进行判断。。

var_dump($_FILES['你的文件名字段'])可以看到其它的键值。

php多文件上传实现代码

这篇文章主要介绍了php多文件上传实现代码,需要的朋友可以参考下

index_uploads.php

代码如下:

html

head

meta

charset="utf-8"

titleindex_uploads/title

/head

body

form

action="uploads.php"

method="post"

enctype="multipart/form-data"

input

type="file"

name="file[]"

br

input

type="file"

name="file[]"

br

input

type="submit"

value="uploads"

/form

/body

/html

uploads.php

代码如下:

?php

header("content-type:text/html;charset=utf-8");

echo

"pre";

print_r($_FILES);

echo

"/pre";

$count

=

count($_FILES['file']['name']);

for

($i

=

0;

$i

$count;

$i++)

{

$tmpfile

=

$_FILES['file']['tmp_name'][$i];

$filefix

=

array_pop(explode(".",

$_FILES['file']['name'][$i]));

$dstfile

=

"uploads/files/".time()."_".mt_rand().".".$filefix;

if

(move_uploaded_file($tmpfile,

$dstfile))

{

echo

"scriptalert('succeed!');window.location.href='index_uploads.php';/script";

}

else

{

echo

"scriptalert('fail!');window.location.href='index_uploads.php';/script";

}

}

核心:1上传首页中input的name属性是这么设置的。

 2用while循环上传多文件。

怎么用php文件上传功能,并可以同时进行数据提交,请问代码如何写?

?php

// $_FILES["file"]["type"] 其中["file"] html中标签的name

if ((($_FILES["file"]["type"] == "image/gif") //检查上传的文件类型为gif

|| ($_FILES["file"]["type"] == "image/jpeg")//检查上传的文件类型为jpg

|| ($_FILES["file"]["type"] == "image/pjpeg"))//检查上传的文件类型为jpeg

($_FILES["file"]["size"] 20000))//检查上传的文件大小

{

if ($_FILES["file"]["error"] 0)//判断是否为错误

{

echo "Return Code: " . $_FILES["file"]["error"] . "br /";//如果错误则输出错误信息

}

else

{

echo "Upload: " . $_FILES["file"]["name"] . "br /"; //输出文件名称

echo "Type: " . $_FILES["file"]["type"] . "br /";//输出文件类型

echo "Size: " . ($_FILES["file"]["size"] / 1024) . " Kbbr /";//输出文件大小

echo "Temp file: " . $_FILES["file"]["tmp_name"] . "br /";//输出临时文件名称

if (file_exists("upload/" . $_FILES["file"]["name"]))//判断上传文件是否存在upload文件夹里

{

echo $_FILES["file"]["name"] . " already exists. ";//如果存在则提示信息

}

else

{

move_uploaded_file($_FILES["file"]["tmp_name"],

"upload/" . $_FILES["file"]["name"]);//如果不存在则拷贝临时文件到upload文件夹

echo "Stored in: " . "upload/" . $_FILES["file"]["name"];//输出上传文件路径+文件名称

}

}

}

else

{

echo "Invalid file";//错误信息

}

?


本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。
如若转载,请注明出处:/php/9616.html