php文件上傳示例,php文件上傳代碼實現

本文目錄一覽:

如何通過PHP做文件上傳

示例參考代碼:

?php

if (is_uploaded_file($_FILES[“upfile”][“tmp_name”])) {

    if (!eregi(‘zip’, $_FILES[‘upfile’][‘type’])) {

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

    } else {

        $filename = $_FILES[‘upfile’][‘name’];

        if (move_uploaded_file($_FILES[“upfile”][“tmp_name”], dirname(__file__) .

            “/upload_file/” . $filename)) {

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

        } else {

            echo “Can’t upload!!!”;

        }

    }

} else {

    echo “File is not selected”;

}

怎樣用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 生成自動創建文件夾並上傳文件的示例代碼

複製代碼

代碼如下:

?

session_start();

if($_SESSION[‘Company’]==”)

{

//exit();

}

??php

//上傳圖片

$uptypes=array(‘image/jpg’,’image/jpeg’,’image/png’,’image/pjpeg’,’image/gif’,’image/bmp’,’application/x-shockwave-flash’,’image/x-png’);

$max_file_size=5000000;

//上傳文件大小限制,

單位BYTE

$addtime=date(“Ymd”,time());

$testdir=”./”.$addtime.”/”;

if(file_exists($testdir)):

else:

mkdir($testdir,0777);

endif;

$destination_folder=$addtime.”/”;

//上傳文件路徑

$imgpreview=1;

//是否生成預覽圖(1為生成,其他為不生成);

$imgpreviewsize=1/2;

//縮略圖比例

if

($_SERVER[‘REQUEST_METHOD’]

==

‘POST’)

{

if

(!is_uploaded_file($_FILES[“Pic”][tmp_name]))

//是否存在文件

{

echo

“font

color=’red’文件不存在!/font”;

exit;

}

$file

=

$_FILES[“Pic”];

if($max_file_size

$file[“size”])

//檢查文件大小

{

echo

“font

color=’red’文件太大!/font”;

exit;

}

if(!in_array($file[“type”],

$uptypes))

//檢查文件類型

{

echo

“font

color=’red’只能上傳圖像文件或Flash!/font”;

exit;

}

if(!file_exists($destination_folder))

mkdir($destination_folder);

$filename=$file[“tmp_name”];

$image_size

=

getimagesize($filename);

$pinfo=pathinfo($file[“name”]);

$ftype=$pinfo[extension];

$PicName

=

time().”.”.$ftype;

$destination

=

$destination_folder.$PicName;

if

(file_exists($destination)

$overwrite

!=

true)

{

echo

“font

color=’red’同名文件已經存在了!/a”;

exit;

}

if(!move_uploaded_file

($filename,

$destination))

{

echo

“font

color=’red’上傳文件出錯!/a”;

exit;

}

$pinfo=pathinfo($destination);

$fname=$pinfo[basename];

}

??

$path

=

dirname(__FILE__);

require_once($path.’/../../Module/Factory.php’);

$Factory

=

new

Factory();

$BLL_Trade

=

$Factory-FactoryTrade();

try

{

$Infor

=

new

Infor();

$Infor-Title

=

$_POST[‘Title’];

$Infor-Deposit

=

$_POST[‘Deposit’];

$Infor-Hire

=

$_POST[‘Hire’];

$Infor-Location

=

$_POST[‘Location’];

$Infor-Pic

=

$destination;

$Infor-Intro

=

$_POST[‘Intro’];

if($_SESSION[‘MemberId’]

==”){

$Infor-Member-ID=”;

}else

{

$Infor-Member-ID

=

$_SESSION[‘MemberId’];}

if($_POST[‘GoodsBarCode’]

==”){

$Infor-Goods-BarCode

=

0;

}else

{

$Infor-Goods-BarCode

=

$_POST[‘GoodsBarCode’];}

$Infor-Class-ID

=

0;//日後修改

$Infor-IssueTime

=

time();

$Infor-ViewNum

=

0;

$Infor-State

=

1;//現在未定,日後修改

$Infor-Top

=

0;

$Infor-Recommend

=

0;

$Infor-BookMember-ID

=

0;

$Infor-BookTime

=

0;

$Infor-BookRemark

=

0;

$BLL_Trade-CreateInfor($Infor);

echo

‘發布信息成功!’;

}

catch

(Exception

$Err){

echo

$Err-getMessage();

}

?

php上傳文件到伺服器

1、通過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

2、創建上傳腳本,命名為”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」,就可以實現從客戶計算機向遠程伺服器上傳文件。

怎麼用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如何實現文件上傳

所謂上傳就是把文件從你電腦本地複製到你的項目指定文件夾下。

但這有個中間過程,就是複製到系統指定的臨時文件夾生成臨時文件。

然後將臨時文件複製到你指定的文件夾下。

剩下的就是各種驗證了。

給你個圖片上傳方法

//上傳一張圖片

$pic = $_FILES[‘pic’];

function upload($pic){

$tmp_name = $pic[‘tmp_name’];

$name = $pic[‘name’];

$type = $pic[‘type’];

$size = $pic[‘size’];

if(!is_uploaded_file($tmp_name)) exit(‘不是上傳文件’);

//判斷是否是圖片

$mine = array(‘image/png’,’image/jpg’,’image/gif’,’image/jpeg’);

if(!in_array($type,$mine)) exit(‘圖片格式不正確’);

//判斷是否有錯誤碼

$error = $pic[‘error’];

switch ($error) {

case 1:

exit(“超出上傳文件的最大限制”);

case 2:

exit(“超出了指定的文件大小”);

case 3:

exit(“只有部分文件被上傳”);

case 4:

exit(“文件沒有被上傳”);

case 6:

exit(“找不到臨時文件夾”);

case 7:

exit(“文件寫入失敗”);

}

echo “================br/”;

echo “上傳文件名稱是:”.$name.”br/”;

echo “上傳文件類型是:”.$type.”br/”;

echo “上傳文件大小是:”.$size.”br/”;

echo “上傳後系統返回的值是:”.$error.”br/”;

echo “上傳文件的臨時存放路徑是:”.$tmp_name.”br/”;

echo”開始移動臨時文件”.’br’;

$des_name = ‘up/’.mt_rand().time().’.’.basename($type);

$res = move_uploaded_file($tmp_name, $des_name);

if($res){

echo “================br/”;

echo “上傳圖片成功”.’br’;

}

}

原創文章,作者:小藍,如若轉載,請註明出處:https://www.506064.com/zh-tw/n/150787.html

(0)
打賞 微信掃一掃 微信掃一掃 支付寶掃一掃 支付寶掃一掃
小藍的頭像小藍
上一篇 2024-11-09 02:14
下一篇 2024-11-09 02:14

相關推薦

  • Python周杰倫代碼用法介紹

    本文將從多個方面對Python周杰倫代碼進行詳細的闡述。 一、代碼介紹 from urllib.request import urlopen from bs4 import Bea…

    編程 2025-04-29
  • Python字元串寬度不限制怎麼打代碼

    本文將為大家詳細介紹Python字元串寬度不限制時如何打代碼的幾個方面。 一、保持代碼風格的統一 在Python字元串寬度不限制的情況下,我們可以寫出很長很長的一行代碼。但是,為了…

    編程 2025-04-29
  • PHP和Python哪個好找工作?

    PHP和Python都是非常流行的編程語言,它們被廣泛應用於不同領域的開發中。但是,在考慮擇業方向的時候,很多人都會有一個問題:PHP和Python哪個好找工作?這篇文章將從多個方…

    編程 2025-04-29
  • Python基礎代碼用法介紹

    本文將從多個方面對Python基礎代碼進行解析和詳細闡述,力求讓讀者深刻理解Python基礎代碼。通過本文的學習,相信大家對Python的學習和應用會更加輕鬆和高效。 一、變數和數…

    編程 2025-04-29
  • 倉庫管理系統代碼設計Python

    這篇文章將詳細探討如何設計一個基於Python的倉庫管理系統。 一、基本需求 在著手設計之前,我們首先需要確定倉庫管理系統的基本需求。 我們可以將需求分為以下幾個方面: 1、庫存管…

    編程 2025-04-29
  • Python滿天星代碼:讓編程變得更加簡單

    本文將從多個方面詳細闡述Python滿天星代碼,為大家介紹它的優點以及如何在編程中使用。無論是剛剛接觸編程還是資深程序員,都能從中獲得一定的收穫。 一、簡介 Python滿天星代碼…

    編程 2025-04-29
  • 寫代碼新手教程

    本文將從語言選擇、學習方法、編碼規範以及常見問題解答等多個方面,為編程新手提供實用、簡明的教程。 一、語言選擇 作為編程新手,選擇一門編程語言是很關鍵的一步。以下是幾個有代表性的編…

    編程 2025-04-29
  • Python實現簡易心形代碼

    在這個文章中,我們將會介紹如何用Python語言編寫一個非常簡單的代碼來生成一個心形圖案。我們將會從安裝Python開始介紹,逐步深入了解如何實現這一任務。 一、安裝Python …

    編程 2025-04-29
  • 怎麼寫不影響Python運行的長段代碼

    在Python編程的過程中,我們不可避免地需要編寫一些長段代碼,包括函數、類、複雜的控制語句等等。在編寫這些代碼時,我們需要考慮代碼可讀性、易用性以及對Python運行性能的影響。…

    編程 2025-04-29
  • Python愛心代碼動態

    本文將從多個方面詳細闡述Python愛心代碼動態,包括實現基本原理、應用場景、代碼示例等。 一、實現基本原理 Python愛心代碼動態使用turtle模塊實現。在繪製一個心形的基礎…

    編程 2025-04-29

發表回復

登錄後才能評論