本文目錄一覽:
- 1、如何通過PHP做文件上傳
- 2、怎樣用PHP實現文件上傳
- 3、php 生成自動創建文件夾並上傳文件的示例代碼
- 4、php上傳文件到伺服器
- 5、怎麼用php做一個文件上傳代碼實例
- 6、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