用於文件上傳的php腳本,PHP上傳文件

本文目錄一覽:

我要在本地測試一個檢驗上傳的php腳本,怎麼構造request上傳文件

使用

postman

等工具或者使用

symfony

HttpFoundation

組件中的

Request::create

方法。

者的好處就是你可以將每一個介面的

Request

對象都提前構造好,可以模擬

request

body,

query

string,

cookie,

session,

file

等,測試介面時只需要調用對應

Request

對象,這樣可以不藉助任何第三方工具來測試介面。

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實現文件上傳

創建一個文件上傳表單

允許用戶從表單上傳文件是非常有用的。

請看下面這個供上傳文件的 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上傳文件非常簡單,你需要一個上傳的HTML文件(FORM),一個保存文件的PHP文件(保存),一個查詢上傳文件清單的工具。

真正實現完整功能的上傳和管理需要使用資料庫,我的網站俱樂部裡面上傳文件一開放很快就傳了幾萬個文件。

最簡單的方法不用資料庫,可以用一個PHP文件實現,這個文件列出指定目錄下的所有文件,然後提供一個上傳的FORM,最後檢測是否提交了FORM數據,是就保存文件到指定位置。

PHP手冊第39章有關於處理這些問題的說明,我複製粘貼如下:

 

上一頁  V. 特點 下一頁 

——————————————————————————–

第 39 章 文件上傳處理

目錄

POST 方法上傳

錯誤信息說明

常見缺陷

上傳多個文件

對 PUT 方法的支持

POST 方法上傳

本特性可以使用戶上傳文本和二進位文件。用 PHP 的認證和文件操作函數,可以完全控制允許哪些人上傳以及文件上傳後怎樣處理。 

PHP 能夠接受任何來自符合 RFC-1867 標準的瀏覽器(包括 Netscape Navigator 3 及更高版本,打了補丁的 Microsoft Internet Explorer 3 或者更高版本)上傳的文件。 

相關的設置: 請參閱 php.ini 的 file_uploads,upload_max_filesize,upload_tmp_dirpost_max_size 以及 max_input_time 設置選項。 

請注意 PHP 也支持 PUT 方法的文件上傳,Netscape Composer 和 W3C 的 Amaya 客戶端使用這種方法。請參閱對 PUT 方法的支持以獲取更多信息。 

例 39.1. 文件上傳表單

可以如下建立一個特殊的表單來支持文件上傳: 

    

!– The data encoding type, enctype, MUST be specified as below —

form enctype=”multipart/form-data” action=”__URL__” method=”POST”

    !– MAX_FILE_SIZE must precede the file input field —

    input type=”hidden” name=”MAX_FILE_SIZE” value=”30000″ /

    !– Name of input element determines name in $_FILES array —

    Send this file: input name=”userfile” type=”file” /

    input type=”submit” value=”Send File” /

/form

    

以上範例中的 __URL__ 應該被換掉,指向一個真實的 PHP 文件。 

MAX_FILE_SIZE 隱藏欄位(單位為位元組)必須放在文件輸入欄位之前,其值為接收文件的最大尺寸。這是對瀏覽器的一個建議,PHP 也會檢查此項。在瀏覽器端可以簡單繞過此設置,因此不要指望用此特性來阻擋大文件。實際上,PHP 設置中的上傳文件最大值是不會失效的。但是最好還是在表單中加上此項目,因為它可以避免用戶在花時間等待上傳大文件之後才發現文件過大上傳失敗的麻煩。 

注意: 要確保文件上傳表單的屬性是 enctype=”multipart/form-data”,否則文件上傳不了。 

全局變數 $_FILES 自 PHP 4.1.0 起存在(在更早的版本中用 $HTTP_POST_FILES 替代)。此數組包含有所有上傳的文件信息。 

以上範例中 $_FILES 數組的內容如下所示。我們假設文件上傳欄位的名稱如上例所示,為 userfile。名稱可隨意命名。 

$_FILES[‘userfile’][‘name’]

客戶端機器文件的原名稱。 

$_FILES[‘userfile’][‘type’]

文件的 MIME 類型,如果瀏覽器提供此信息的話。一個例子是「image/gif」。不過此 MIME 類型在 PHP 端並不檢查,因此不要想當然認為有這個值。 

$_FILES[‘userfile’][‘size’]

已上傳文件的大小,單位為位元組。 

$_FILES[‘userfile’][‘tmp_name’]

文件被上傳後在服務端儲存的臨時文件名。 

$_FILES[‘userfile’][‘error’]

和該文件上傳相關的錯誤代碼。此項目是在 PHP 4.2.0 版本中增加的。 

文件被上傳後,默認地會被儲存到服務端的默認臨時目錄中,除非 php.ini 中的 upload_tmp_dir 設置為其它的路徑。服務端的默認臨時目錄可以通過更改 PHP 運行環境的環境變數 TMPDIR 來重新設置,但是在 PHP 腳本內部通過運行 putenv() 函數來設置是不起作用的。該環境變數也可以用來確認其它的操作也是在上傳的文件上進行的。 

例 39.2. 使文件上傳生效

請查閱函數 is_uploaded_file() 和 move_uploaded_file() 以獲取進一步的信息。以下範例處理由表單提供的文件上傳。 

?php

// In PHP versions earlier than 4.1.0, $HTTP_POST_FILES should be used instead

// of $_FILES.

$uploaddir = ‘/var/www/uploads/’;

$uploadfile = $uploaddir . basename($_FILES[‘userfile’][‘name’]);

echo ‘pre’;

if (move_uploaded_file($_FILES[‘userfile’][‘tmp_name’], $uploadfile)) {

    echo “File is valid, and was successfully uploaded.\n”;

} else {

    echo “Possible file upload attack!\n”;

}

echo ‘Here is some more debugging info:’;

print_r($_FILES);

print “/pre”;

接受上傳文件的 PHP 腳本為了決定接下來要對該文件進行哪些操作,應該實現任何邏輯上必要的檢查。例如可以用 $_FILES[‘userfile’][‘size’] 變數來排除過大或過小的文件,也可以通過 $_FILES[‘userfile’][‘type’] 變數來排除文件類型和某種標準不相符合的文件,但只把這個當作一系列檢查中的第一步,因為此值完全由客戶端控制而在 PHP 端並不檢查。自 PHP 4.2.0 起,還可以通過 $_FILES[‘userfile’][‘error’] 變數來根據不同的錯誤代碼來計划下一步如何處理。不管怎樣,要麼將該文件從臨時目錄中刪除,要麼將其移動到其它的地方。 

如果表單中沒有選擇上傳的文件,則 PHP 變數 $_FILES[‘userfile’][‘size’] 的值將為 0,$_FILES[‘userfile’][‘tmp_name’] 將為空。 

如果該文件沒有被移動到其它地方也沒有被改名,則該文件將在表單請求結束時被刪除。 

例 39.3. 上傳一組文件

PHP 的 HTML 數組特性甚至支持文件類型。 

form action=”” method=”post” enctype=”multipart/form-data”

pPictures:

input type=”file” name=”pictures[]” /

input type=”file” name=”pictures[]” /

input type=”file” name=”pictures[]” /

input type=”submit” value=”Send” /

/p

/form

   

?php

foreach ($_FILES[“pictures”][“error”] as $key = $error) {

    if ($error == UPLOAD_ERR_OK) {

        $tmp_name = $_FILES[“pictures”][“tmp_name”][$key];

        $name = $_FILES[“pictures”][“name”][$key];

        move_uploaded_file($tmp_name, “data/$name”);

    }

}

——————————————————————————–

上一頁  上一級 下一頁 

38. 處理 XForms  起始頁 錯誤信息說明 

php上傳文件代碼,能用的代碼

?php

$uptypes=array(‘image/jpg’, //上傳文件類型列表

‘image/jpeg’,

‘image/png’,

‘image/pjpeg’,

‘image/gif’,

‘image/bmp’,

‘image/x-png’);

$max_file_size=5000000; //上傳文件大小限制, 單位BYTE

$destination_folder=”upload/”; //上傳文件路徑

$watermark=1; //是否附加水印(1為加水印,其他為不加水印);

$watertype=1; //水印類型(1為文字,2為圖片)

$waterposition=1; //水印位置(1為左下角,2為右下角,3為左上角,4為右上角,5為居中);

$waterstring=”newphp.site.cz”; //水印字元串

$waterimg=”xplore.gif”; //水印圖片

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

$imgpreviewsize=1/2; //縮略圖比例

?

html

head

titleM4U BLOG – fywyj.cn/title

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

style type=”text/css”body,td{font-family:tahoma,verdana,arial;font-size:11px;line-height:15px;background-color:white;color:#666666;margin-left:20px;}

strong{font-size:12px;}

aink{color:#0066CC;}

a:hover{color:#FF6600;}

aisited{color:#003366;}

a:active{color:#9DCC00;}

table.itable{}

td.irows{height:20px;background:url(“index.php?i=dots” repeat-x bottom}/style

/head

body

centerform enctype=”multipart/form-data” method=”post” name=”upform”

上傳文件: brbrbr

input name=”upfile” type=”file” style=”width:200;border:1 solid #9a9999; font-size:9pt; background-color:#ffffff” size=”17″

input type=”submit” value=”上傳” style=”width:30;border:1 solid #9a9999; font-size:9pt; background-color:#ffffff” size=”17″brbrbr

允許上傳的文件類型為:jpg|jpeg|png|pjpeg|gif|bmp|x-png|swf brbr

a href=”index.php”返回/a

/form

?php

if ($_SERVER[‘REQUEST_METHOD’] == ‘POST’)

{

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

//是否存在文件

{

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

exit;

}

$file = $_FILES[“upfile”];

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];

$destination = $destination_folder.time().”.”.$ftype;

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];

echo ” font color=red已經成功上傳/fontbr文件名: font color=blue”.$destination_folder.$fname.”/fontbr”;

echo ” 寬度:”.$image_size[0];

echo ” 長度:”.$image_size[1];

if($watermark==1)

{

$iinfo=getimagesize($destination,$iinfo);

$nimage=imagecreatetruecolor($image_size[0],$image_size[1]);

$white=imagecolorallocate($nimage,255,255,255);

$black=imagecolorallocate($nimage,0,0,0);

$red=imagecolorallocate($nimage,255,0,0);

imagefill($nimage,0,0,$white);

switch ($iinfo[2])

{

case 1:

$simage =imagecreatefromgif($destination);

break;

case 2:

$simage =imagecreatefromjpeg($destination);

break;

case 3:

$simage =imagecreatefrompng($destination);

break;

case 6:

$simage =imagecreatefromwbmp($destination);

break;

default:

die(“font color=’red’不能上傳此類型文件!/a”);

exit;

}

imagecopy($nimage,$simage,0,0,0,0,$image_size[0],$image_size[1]);

imagefilledrectangle($nimage,1,$image_size[1]-15,80,$image_size[1],$white);

switch($watertype)

{

case 1: //加水印字元串

imagestring($nimage,2,3,$image_size[1]-15,$waterstring,$black);

break;

case 2: //加水印圖片

$simage1 =imagecreatefromgif(“xplore.gif”);

imagecopy($nimage,$simage1,0,0,0,0,85,15);

imagedestroy($simage1);

break;

}

switch ($iinfo[2])

{

case 1:

//imagegif($nimage, $destination);

imagejpeg($nimage, $destination);

break;

case 2:

imagejpeg($nimage, $destination);

break;

case 3:

imagepng($nimage, $destination);

break;

case 6:

imagewbmp($nimage, $destination);

//imagejpeg($nimage, $destination);

break;

}

//覆蓋原上傳文件

imagedestroy($nimage);

imagedestroy($simage);

}

if($imgpreview==1)

{

echo “br圖片預覽:br”;

echo “a href=\””.$destination.”\” target=’_blank’img src=\””.$destination.”\” width=”.($image_size[0]*$imgpreviewsize).” height=”.($image_size[1]*$imgpreviewsize);

echo ” alt=\”圖片預覽:\r文件名:”.$destination.”\r上傳時間:\” border=’0’/a”;

}

}

?

/center

/body

/html

絕對好用!!!!給分吧

求一個PHP 文件上傳程序

1.upfile.php文件

html

body

title文件上傳/title

form enctype=”multipart/form-data” action=upload.php method=post

input type=file name=upfile size=10brbr

input type=submit value=’上載文件’

/form

/body

/html

2.upload.php

?

//取得當前日期信息,並連接成為一個字元串

$datetime = getdate();

$time = implode(“”,$datetime);

//構造文件名

//$filename=”uploadfiles/”.$time.” “.$upfile_name;

$filename=”uploadfiles/”.$upfile_name;

//將文件實際的存放在伺服器上

$copymes = copy($upfile,$filename);

if ($copymes) {

print(“文件上傳成功!brn”);

print(“文件名:$upfile_namebrn”);

print(“上傳的文件大小:$upfile_sizebrn”);

}

else print(“文件上傳失敗!brn”);

if (($upfile_type==”image/gif”)||($upfile_type==”image/pjpeg”))

{

//如果是圖形文件格式則顯之

echo “pimg src=”;

echo $filename;

echo “‘height=150 width=150 align=center border=0”;

}

?

3.請在上面的那個文件所在目錄創建一個目錄 uploadfiles 就可以了

參考示例:

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

(0)
打賞 微信掃一掃 微信掃一掃 支付寶掃一掃 支付寶掃一掃
LGTO的頭像LGTO
上一篇 2024-10-31 15:31
下一篇 2024-10-31 15:31

相關推薦

  • PHP和Python哪個好找工作?

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

    編程 2025-04-29
  • Python腳本控制其他軟體

    Python作為一種簡單易學、功能強大的腳本語言,具有廣泛的應用領域,在自動化測試、Web開發、數據挖掘等領域都得到了廣泛的應用。其中,Python腳本控制其他軟體也是Python…

    編程 2025-04-29
  • Shell腳本與Python腳本的區別

    本文將從多個方面對Shell腳本與Python腳本的區別做詳細的闡述。 一、語法差異 Shell腳本和Python腳本的語法存在明顯差異。 Shell腳本是一種基於字元命令行的語言…

    編程 2025-04-29
  • PHP怎麼接幣

    想要在自己的網站或應用中接受比特幣等加密貨幣的支付,就需要對該加密貨幣擁有一定的了解,並使用對應的API進行開發。本文將從多個方面詳細闡述如何使用PHP接受加密貨幣的支付。 一、環…

    編程 2025-04-29
  • Python自動化運維腳本

    Python自動化運維腳本是使用Python編寫的代碼,可以幫助管理員自動化執行繁瑣、重複的操作任務。通過Python自動化運維腳本,管理員可以在更短的時間內完成工作,提高工作效率…

    編程 2025-04-28
  • 使用Python圖書館搶座腳本的完整步驟

    本文將從多個方面詳細介紹如何使用Python編寫圖書館的座位搶佔腳本,並幫助您快速了解如何自動搶佔圖書館的座位,並實現您的學習計劃。 一、開發環境搭建 首先,我們需要安裝Pytho…

    編程 2025-04-28
  • 使用PHP foreach遍歷有相同屬性的值

    本篇文章將介紹如何使用PHP foreach遍歷具有相同屬性的值,並給出相應的代碼示例。 一、基礎概念 在講解如何使用PHP foreach遍歷有相同屬性的值之前,我們需要先了解幾…

    編程 2025-04-28
  • ArcGIS的Python腳本需要主函數嗎?

    是的,ArcGIS的Python腳本需要主函數,主函數是Python腳本的入口和起點,沒有主函數腳本無法運行。 一、主函數的作用 在Python腳本中,主函數是代碼的入口,所有的代…

    編程 2025-04-28
  • 使用 DRF 實現文件上傳

    文件上傳是 web 應用程序中最常見的需求之一,本文將介紹如何使用 Django Rest Framework (DRF) 來實現文件上傳。通過本文,你將學習到如何使用 DRF 中…

    編程 2025-04-28
  • PHP獲取301跳轉後的地址

    本文將為大家介紹如何使用PHP獲取301跳轉後的地址。301重定向是什麼呢?當我們訪問一個網頁A,但是它已經被遷移到了另一個地址B,此時若伺服器端做了301重定向,那麼你的瀏覽器在…

    編程 2025-04-27

發表回復

登錄後才能評論