本文目錄一覽:
- 1、我要在本地測試一個檢驗上傳的php腳本,怎麼構造request上傳文件
- 2、php多文件上傳實現代碼
- 3、怎樣用PHP實現文件上傳
- 4、求實現php文件上傳代碼
- 5、php上傳文件代碼,能用的代碼
- 6、求一個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-hant/n/146583.html