當前位置:首頁 » 文件管理 » php實現文件上傳

php實現文件上傳

發布時間: 2023-04-05 16:21:18

① 求php網頁上傳文件代碼.

自定義文件上傳函數


<?php
/**
* 文件上傳
*/
/**
* 文件上傳函數
* @param $name string 表單上傳框的name值
* @param $file_arr array 上傳文件的類型限制
* @param $filesize int 上傳文件限制其大小
* @param $path string 文件的保存路徑
* @return string 成功返回 "上傳成功及文件名"
*/
function uploads($name,$file_arr=array('jpg','png','gif','JPG','GIF','PNG'),$filesize=3145728,$path='uploads'){
//1、檢測文件的錯誤信息,如果是0 就允許上傳(保存)
$err=$_FILES[$name]['error'];
if($err>0){
if($err==1){
return '上傳的文件超過了 php.ini 中 upload_max_filesize 選項限制的值。';
}elseif($err==2){
return '上傳文件的大小超過了 HTML 表單中 MAX_FILE_SIZE 選項指定的值。 ';
}elseif($err==3){
return '文件只有部分被上傳。';
}elseif($err==4){
return'沒有文件上傳';
}elseif($err>=5){
return '其他錯誤';
}
}
//2、檢測文件的類型,是否是我們需要的(png、gif、jpg)
$pre=pathinfo($_FILES[$name]['name'],PATHINFO_EXTENSION);
if(!in_array($pre,$file_arr)){
return '上傳的文件類型不符';
}
//3、檢測文件大小
if($_FILES[$name]['size']>$filesize){
return '上傳的文件太大';
}
//4、保存文件
$file_name=date('YmdHis',time()).mt_rand(1000,9999).'.'.$pre;
if(is_uploaded_file($_FILES[$name]['tmp_name'])){
move_uploaded_file($_FILES[$name]['tmp_name'], $path."/".$file_name);
return '上傳成功|'.$file_name;
}else{
return "文件上傳失敗!";
}

}
?>

② 求php怎麼實現web端上傳超大文件

加大PHP上傳文件大小的限制,是通過修改PHP.INI文件來實現,但是這個支持是有限度的,因為WEB協議本為下載而生,超大文件的上傳是ftp的專利。

PHP用超級全局變數數組$_FILES來記錄文件上傳相關信息的。

1.file_uploads=on/off
是否允許通過http方式上傳文件
2.max_execution_time=30
允許腳本最大執行時間,超過這個時間就會報錯
3.memory_limit=50M
設置腳本可以分配的最大內存量,防止失控腳本佔用過多內存,此指令只有在編譯時設置了
--enable-memory-limit標志的情況下才生效
4.upload_max_filesize=20M
允許上傳文件的最大大小,此指令必須小於post_max_size
5.upload_tmp_dir
上傳文件臨時存放目錄
6.post_max_size=30M
允許post方式可以接受最大大小
$_FILES['myFile']['name'] 客戶端上次文件的原始名稱。
$_FILES['myFile']['type'] 文件的 MIME 類型,需要瀏覽器提供該信息的支持,例如"image/gif"。
$_FILES['myFile']['size'] 已上傳文件的大小,單位為位元組。
$_FILES['myFile']['tmp_name'] 文件被上傳後在服務端儲存的臨時文件名,一般是系統默認。可以在php.ini的upload_tmp_dir 指定,但 用 putenv() 函數設置是不起作用的。
$_FILES['myFile']['error'] 和該文件上傳相關的狀態碼。['error'] 是在 PHP 4.2.0 版本中增加的。下面是它的說明:(它們在PHP3.0以後成了常量)
UPLOAD_ERR_OK
值:0; 沒有錯誤發生,文件上傳成功。
UPLOAD_ERR_INI_SIZE
值:1; 上傳的文件超過了 php.ini 中 upload_max_filesize 選項限制的值。
UPLOAD_ERR_FORM_SIZE
值:2; 上傳文件的大小超過了 HTML 表單中 MAX_FILE_SIZE 選項指定的值。
UPLOAD_ERR_PARTIAL
值:3; 文件只有部分被上傳。
UPLOAD_ERR_NO_FILE
值:4; 沒有文件被上傳。
值:5; 上傳文件大小為0.
文件被上傳結束後,默認地被存儲在了臨時目錄中,這時您必須將它從臨時目錄中刪除或移動到其它地方,如果沒有,則會被刪除。
也就是不管是否上傳成功,腳本執行完後臨時目錄里的文件肯定會被刪除。
附:修改PHP上傳文件大小限制的方法
1. 一般的文件上傳,除非文件很小.就像一個5M的文件,很可能要超過一分鍾才能上傳完.
但在php中,默認的該頁最久執行時間為 30 秒.就是說超過30秒,該腳本就停止執行.
這就導致出現 無法打開網頁的情況.這時我們可以修改 max_execution_time
在php.ini里查找
max_execution_time
默認是30秒.改為
max_execution_time = 0
0表示沒有限制
2. 修改 post_max_size 設定 POST 數據所允許的最大大小。此設定也影響到文件上傳。
php默認的post_max_size 為2M.如果 POST 數據尺寸大於 post_max_size $_POST 和 $_FILES superglobals 便會為空.
查找 post_max_size .改為
post_max_size = 150M
3. 很多人都會改了第二步.但上傳文件時最大仍然為 8M.
為什麼呢.我們還要改一個參數upload_max_filesize 表示所上傳的文件的最大大小。
查找upload_max_filesize,默認為8M改為
upload_max_filesize = 100M
另外要說明的是,post_max_size 大於 upload_max_filesize 為佳.

③ 怎樣用php實現word文檔的上傳

你好,請試試以下代碼,可能會實現:
<html>
<HEAD>
<?
if ($mode == "query")
{
If($myfile != "none") {
echo $myfile;
($myfile,"documents/$myfile_name");
unlink($myfile);
}
else {
echo"你沒有上傳任何文件";
}
exit;
}
?>
</HEAD>
<body bgcolor=#AFCFCD>
<FORM METHOD="post" ACTION="<? echo $PHP_SELF; ?>?mode=query" ENCTYPE="multipart/form-data">
選擇上傳文件<INPUT NAME="myfile" TYPE="File">
<INPUT TYPE='submit' VALUE="上傳">
</FORM>
</body>
</html>

④ 用PHP控制FTP文件上傳

利用PHP,你總是可以有多種方式來完成某個特定的任務。我們就拿文件上傳舉個例子。當然了,你可以按照傳統的方式來使用HTTP文件上傳,把文件直接傳輸到Web伺服器磁碟上。南邵電腦培訓認為你還可以用更加奇異的方式上傳,用FTP協議兩步就完成上傳:從你的本地硬碟到Web伺服器,然後再到FTP伺服器。



PHP在本機同時支持FTP和HTTP上傳,所以你可以根據自己應用程序的設計需要進行最佳的選擇。使用PHP的FTP函數進行文件傳輸幾乎與使用傳統的FTP客戶端相同——你會看到連函數的名字都和標準的FTP命令類似。


關於HTTP文件上傳的文章已經多得滿天飛了,這就是為什麼本文有必要把注意賣灶爛力放在基於FTP的文件辯首上傳上了(但是在後面給出的例子中,兩種方式你都會看到)。要注意的是,本教程假設你已經安裝好了PHP/Apache,而且HTTP文件上傳和FTP的函數都已經激活了。


第一步:確信你擁有連接/上傳到FTP伺服器的許可權


PHP的FTP函數需要客戶端-伺服器連接,所以你需要在進行文件上傳之前登錄到目標伺服器上。你的第一項任務是確信你已經擁有了完成這項任務的信中漏任書。這一步可能看起來是理所當然的,但是你會驚奇地發現有多少開發人員忘了這么做,結果後來浪費大量的時間來解決因此而出現的問題。


⑤ php同時上傳多個文件或者整個文件夾怎麼實現,最好發個demo,求大俠們幫助下

您好,這樣的:
純web無解,最少需要客戶端裝控制項,
php將本地文件夾上傳的其他伺服器倒是可以。
方法一:把文件夾打包成zip上傳然後伺服器端解壓,調用/內建的解壓程序解壓然後刪除zip文件。
方法二:做個遍歷循環判斷,遇到目錄的就利用mkdir創建目錄,遇到文件的就用ftp傳上到伺服器。

⑥ php 批量大文件上傳下載如何實現

1.首先還是查看環境是否支持超大容量上傳的支持,500M以上的文件通常為視頻文件;

2.即然他要上傳500M以上的文件,估計伺服器性能必定非同凡想,所以暫可不考慮伺服器硬體配置問題,但一定要考慮到網速問題,建議1000M以上出入速率,如少於這個數,你可以放棄這個方案了;

3.前面硬體都過關了,但程序也要加強了,一下上傳500M是哪種語言都不能實現的,唯一解決方案,文件切割,如迅雷下載原理一樣(採用續點上傳),分成若干小塊,然後全部上傳完畢以後,再進行文件合成。

4.至於PHP的文件切割,切割後上傳,以及文件合並,此類代碼網上有許多,樓主可查詢並選擇適合你的代碼,實現你的功能!

⑦ PHP實現瀏覽器端大文件分片上傳如何實現

分片上傳的原理就是通過切割上傳文件,然後在瀏覽器的頭部通過etag來進行劃分文件傳輸,伺服器端接收到文件片段和分割起始符之後,進行拼接文件,最後合成一個大文件。

你可以自己通過php來獲取瀏覽器頭部傳輸標志來進行文件的拼接組裝,也可以通過現有的大文件傳輸類來上傳文件。

關鍵點

記住分割文件點,也就是分割文件的順序,拼接文件需要通過etag按照順序拼接,分片可以並發傳輸,這其實也是並發下載的原理。

⑧ 求實現php文件上傳代碼

PHP上傳文件非常簡單,你需要一個上傳的HTML文件(<FORM>),一個保存文件的PHP文件(保存),一個查詢上傳文件清單的工具。

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

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

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


上一頁V.特點下一頁

--------------------------------------------------------------------------------

第39章文件上傳處理
目錄
POST方法上傳
錯誤信息說明
常見缺陷
上傳多個文件
對PUT方法的支持
POST方法上傳
本特性可以使用戶上傳文本和二進制文件。用PHP的認證和文件操作函數,可以完全控制允許哪些人上傳以及文件上傳後怎樣處理。

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

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

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

例39.1.文件上傳表單

可以如下建立一個特殊的表單來支持文件上傳:<!--Thedataencodingtype,enctype,MUSTbespecifiedasbelow-->
<formenctype="multipart/form-data"action="__URL__"method="POST">
<!--MAX_FILE_-->
<inputtype="hidden"name="MAX_FILE_SIZE"value="30000"/>
<!--$_FILESarray-->
Sendthisfile:<inputname="userfile"type="file"/>
<inputtype="submit"value="SendFile"/>
</form>


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

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

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

全局變數$_FILES自PHP4.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']
和該文件上傳相關的錯誤代碼。此項目是在PHP4.2.0版本中增加的。

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

例39.2.使文件上傳生效

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

<?php
//InPHPversionsearlierthan4.1.0,$HTTP_POST_FILESshouldbeusedinstead
//of$_FILES.

$uploaddir='/var/www/uploads/';
$uploadfile=$uploaddir.basename($_FILES['userfile']['name']);

echo'<pre>';
if(move_uploaded_file($_FILES['userfile']['tmp_name'],$uploadfile)){
echo"Fileisvalid,andwassuccessfullyuploaded.\n";
}else{
echo"Possiblefileuploadattack!\n";
}

echo'Hereissomemoredebugginginfo:';
print_r($_FILES);

print"</pre>";

?>

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

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

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

例39.3.上傳一組文件

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

<formaction=""method="post"enctype="multipart/form-data">
<p>Pictures:
<inputtype="file"name="pictures[]"/>
<inputtype="file"name="pictures[]"/>
<inputtype="file"name="pictures[]"/>
<inputtype="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一般使用POST方法上傳文件,下面是一個簡單的文件上傳示例,裡面有相關的注釋:

up.htm文件:

----------

<html>

<head>

<metahttp-equiv="Content-Type"content="text/html;charset=gb2312">

<title>UpSample</title>

</head>

<body>

<formaction="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/>

<inputtype="file"name="upfile"size="30"><br/>

<!--上傳框要設置type="file"-->

<br/>

<inputtype="submit"value="Upload">

</form>

</body>

</html>

----------

up.php文件

----------

<?php

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

//如果有文件上傳

//is_uploaded_file--判斷文件是否是通過HTTPPOST上傳的,返回布爾值

//$_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'TheuploadedfileisnotanpdfFile!Pleaseuploadarightfile!';

}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"]."uploadedsucceed!!!";

}else{

echo"Can'tupload!!!";

}

}

}else{

echo"Fileisnotselected";

}

//需要注意的:

/*

在你的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']數組的各個值分別代表什麼

*/

?>

----------

可以看看php100裡面的視頻,其中一節就是介紹文件上傳的.:)

⑩ php如何實現一次性上傳多個文件

<?php
$max_files=5; //最多上傳文件的個數,與 up.htm 中的 input file 控制項的個數相同
$up_ok_files=0; //成功上傳的文件個數
$up_folder="ups"; //保存上傳文件的目標文件夾
if(isset($_FILES['myfile'])){
//由於 $_FILES['myfile'] 是個數組,所以需要使用循環遍歷
for($i=0;$i<$max_files;$i++){
//如果未出錯
if($_FILES['myfile']['error'][$i]==0){
if(move_uploaded_file($_FILES['myfile']['tmp_name'][$i],$up_folder."/".$_FILES['myfile']['name'][$i])){
//成功上傳後,計數器增 1
$up_ok_files +=1;
}
else{
echo "<h4 style='color:red;'>在伺服器中保存失敗</h4>";
}
}
}
echo "<h4>成功上傳 ".$up_ok_files. " 個文件</h4>";
}
?>

如果對 $_FILES['myfile'] 這個數組的結構不清楚,那麼可以在循環之前加入這句代碼將其顯示出來:
print_r($_FILES['myfile']);

對這個數組的結構了解之後,理解上述代碼就比較容易了。
foreach循環實現
常規下,php上傳一張圖片,頁面上添加一個文件域,上傳後,得到的數組是二維數組
轉變一下,
頁面上添加多個文件域,並且他們的name屬性相同,而且是以數組形式提交(比如:name="file[]")
那麼上傳後,得到的是三維數組
而,php中,foreach循環對遍歷數組那真是完美至極
用foreach遍歷一次這個三維數組,得到的結果就又是二維數組,那麼,就和上傳一張圖片一樣一樣的了

熱點內容
魔獸世界自動釣魚腳本 發布:2024-05-19 06:43:07 瀏覽:494
cbs加密 發布:2024-05-19 06:29:56 瀏覽:200
ssis存儲過程 發布:2024-05-19 06:21:31 瀏覽:630
怎樣刪除小視頻文件夾 發布:2024-05-19 05:49:29 瀏覽:589
開啟php短標簽 發布:2024-05-19 05:44:12 瀏覽:473
android各國語言 發布:2024-05-19 05:42:54 瀏覽:247
微信什麼資料都沒怎麼找回密碼 發布:2024-05-19 05:35:34 瀏覽:907
填志願密碼是什麼 發布:2024-05-19 05:30:23 瀏覽:318
城堡爭霸自動掠奪腳本 發布:2024-05-19 05:22:06 瀏覽:204
asp編程工具 發布:2024-05-19 05:20:36 瀏覽:143