① php中上傳文件的方法有多少種
一、傳統的php寫的上傳類。
寫一個php的上傳類,這個方法用到的知識全部是php的,而且技術的難點也不多。
<form method="post" action="upload.php" enctype="multipart/form-data">
<table border=0 cellspacing=0 cellpadding=0 align=center width="100%">
<input type="hidden" name="MAX_FILE_SIZE" value="2000000">//隱藏域。這里name必須設置成MAX_FILE_SIZE,其值就是上傳文件的最大長度,單位是B,這里我限製成2M
<input name="file" type="file" value="瀏覽" >
< input type="submit" value="上傳" name="B1">
</table>
</form>
服務端利用php的$_FILES['file']['name']來獲取文件後綴名,具體的代碼自己查找資料看看,這里就不多說了。
總結;這個方法可以用來上傳小於2M的文件或者是圖片,基本的功能可以實現。
二、利用uploadify插件
這個是利用jQuery的上傳插件,上傳可以帶進度條,容易配置。
總結:可以上傳一些大文件,和圖片,而且帶進度條,可以多文件上傳,在WEB中會經常用。
三、利用網路的webupload
WebUploader 是由 Bai FEX 團隊開發的一款以 HTML5 為主,FLASH 為輔的現代文件上傳組件。在現代的瀏覽器裡面能充分發揮 HTML5 的優勢,同時又不摒棄主流IE瀏覽器,沿用原來的 FLASH 運行時,兼容 IE6+,iOS 6+, Android 4+。採用大文件分片並發上傳,極大的提高了文件上傳效率。
四、swfupload的插件
這是一個jquery的上傳插件,功能也非常強大,開發也比較容易,網上有很多的資料,可以自行查找。
② PHP中使用Session配合javascript實現文件上傳進度條功能
Web應用中常需要提供文件上傳的功能。典型的場景包括用戶頭像上傳、相冊圖片上傳等。當需要上傳的文件比較大的時候,提供一個顯示上傳進度的進度條就很有必要了。
在PHP
5.4以前,實現這樣的進度條並不容易,主要有三種方法:
1.使用Flash,
Java,
ActiveX
2.使用PHP的APC擴展
3.使用HTML5的File
API
第一種方法依賴第三方的瀏覽器插件,通用性不足,且易帶來安全隱患。不過由於Flash的使用比較廣泛,因此還是有很多網站使用Flash作為解決方案。
第二種方法的不足在於,它需要安裝PHP的APC擴展庫,要求用戶能夠控制伺服器端的配置。另外,如果安裝APC僅僅是為了實現一個上傳進度條,那麼顯然有點殺雞用牛刀的意思。
第三種方法應該是最為理想的方法,不需要伺服器端的支持,僅在瀏覽器端使用Javascript即可。但是由於HTML5標准尚未確立,各瀏覽器廠商的支持也不相同,所以暫時這種方法還難以普及。
PHP
5.4中引入的基於session的上傳進度監視功能(session.upload_progress),它提供了一個伺服器端的上傳進度監視解決方案。升級到PHP
5.4之後,可以不必安裝APC擴展,僅使用原生PHP和前端的Javascript即可實現上傳進度條。
下面我們就詳細介紹一下
PHP
5.4
的這個
session.upload_progress
新特性。
原理介紹
當瀏覽器向伺服器端上傳一個文件時,PHP將會把此次文件上傳的詳細信息(如上傳時間、上傳進度等)存儲在session當中。然後,隨著上傳的進行,周期性的更新session中的信息。這樣,瀏覽器端就可以使用Ajax周期性的請求一個伺服器端腳本,由該腳本返回session中的進度信息;瀏覽器端的Javascript即可根據這些信息顯示/更新進度條了。
那麼,文件上傳信息具體是如何存儲的?我們要如何訪問它呢?下面我們來詳細說明。
PHP
5.4
中引入了一些配置項(在php.ini中進行設置)
復制代碼
代碼如下:
session.upload_progress.enabled
=
"1"
session.upload_progress.cleanup
=
"1"
session.upload_progress.prefix
=
"upload_progress_"
session.upload_progress.name
=
"PHP_SESSION_UPLOAD_PROGRESS"
session.upload_progress.freq
=
"1%"
session.upload_progress.min_freq
=
"1"
其中enabled控制upload_progress功能的開啟與否,默認開啟;cleanup
則設置當文件上傳的請求提交完成後,是否清除session的相關信息,默認開啟。
prefix
和
name
兩項用來設置進度信息在session中存儲的變數名/鍵名。關於這兩項的詳細使用見下文。
freq
和
min_freq
兩項用來設置伺服器端對進度信息的更新頻率。合理的設置這兩項可以減輕伺服器的負擔。
在上傳文件的表單中,需要為該次上傳設置一個標識符,並在接下來的過程中使用該標識符來引用進度信息。具體的,在上傳表單中需要有一個隱藏的input,它的name屬性為php.ini中
session.upload_progress.name
的值;它的值為一個由你自己定義的標識符。如下:
復制代碼
代碼如下:
<input
type="hidden"
name="<?php
echo
ini_get('session.upload_progress.name');
?>"
value="test"
/>
接到文件上傳的表單後,PHP會在$_SESSION變數中新建鍵,鍵名是一個將session.upload_progress.prefix的值與上面你自定義的標識符連接後得到的字元串,可以這樣得到:
復制代碼
代碼如下:
$name
=
ini_get('session.upload_progress.name');
$key
=
ini_get('session.upload_progress.prefix')
.
$_POST[$name];
$_SESSION[$key];
//
這里就是此次文件上傳的進度信息了
③ PHP文件上傳代碼用法
php文件上傳代碼編寫過程
先判斷是否上傳文件
如果有再來判斷上傳中是否出錯
如果出錯 則提示出錯信息
如查沒出錯 再判斷文件類型
如果類型符合條件 再判斷指定目錄中有沒有存在該文件
如果沒有就把該文件移至指定目錄
在php中上傳文件必須知道的幾個東西
$_FILES[ myfile ][ name ] 是指被上傳文件的名稱
$_FILES[ myfile ][ type ] 是指被上傳文件的類型
$_FILES[ myfile ][ size ] 是指被上傳文件的大小 單位為位元組(B)
$_FILES[ myfile ][ tmp_name ] 是指被上傳文件存在伺服器中的臨時副本文件名稱 文件被移動到指定目錄後臨文件將被自動消毀
$_FILES[ myfile ]["error"] 是指由文件上傳中有可能出現的錯誤的狀態碼 關於各狀態含義後在會說明
先來看一下HTML部分
代碼如下 復制代碼?<form action="upload php" method="post" enctype="multipart/form data"> 上傳 <input type=file name=myfile /> <input type=submit name=submit value="上傳" /> </form>
說明
form標答的action="upload php"是指點擊這個form中的submit的時候 這個上傳命令會被發送到這個叫 upload php的頁面去處理 method="post"是指以post方式去送 enctype="multipart/form data"屬性規定了在提交這個表單時要使用哪種內容類型 在表單需要二進制數據時 比如文件內容 請使用"multipart/form data" 如果要上傳文件 這個屬性是必要的 input中的type="file"時 規定了應該把輸入作為文件來處理 並且在input後面會有一個瀏覽的按鈕
我們再來看一個PHP處理頁面 upload php
代碼如下 復制代碼<?php if($_FILES[ myfile ][ name ] != ) { if($_FILES[ myfile ][ error ] > ) { echo "錯誤狀態 " $_FILES[ myfile ][ error ]; } else { move_uploaded_file($_FILES[ myfile ][ tmp_name ] "uploads/" $FILES[ myfile ][ name ]); echo "<script>alert(上傳成功!);</script>"; } } else{ echo "<script>alert(請上傳文件!);</script>"; } ?>
上面超級簡單 我們現在來升級一下
upload php
代碼如下 復制代碼<!DOCTYPE HTML PUBLIC " //W C//DTD HTML Transitional//EN"> <> <head> <title>ddd</title> <meta equiv="content type" content="text/; charset=UTF "> </head> <body> <! 文件上傳要注意: 要有enctyp method="post" > <form enctype="multipart/form data" action="uploadProcess php" method="post" > <table> <tr><td>請填寫用戶名</td><td><input type=text name=username></td></tr> <tr><td>請簡單介紹文件</td><td><textarea rows=" " cols=" " name=fileintro class="page_speeder_734321457"></textarea></td></tr> <tr><td>請上傳你的文件</td><td><input type=file name=myfile></td></tr> <tr><td colspan=" "><input type=submit value="上傳"><td></tr> </table> </form> </body> </>
uploadProcess php
代碼如下 復制代碼<?php
//接收 $username=$_POST[ username ]; $fileintro=$_POST[ fileintro ]; //echo $username $fileintro; //獲取文件信息 /* echo "<pre>"; print_r($_FILES); echo "</pre>"; */ //獲取文件的大小 $file_size=$_FILES[ myfile ][ size ]; if($file_size> * * ){ echo "<script type= text/javascript >window alert( 文件不能大於 M )</script>"; exit(); }
//獲取文件類型 $file_type=$_FILES[ myfile ][ type ]; if($file_type!="image/jpeg" && $file_type!="image/pjpeg"){ echo "文件類型只能是 jpg 格式"; exit(); }
//判斷上傳是否OK if(is_uploaded_file($_FILES[ myfile ][ tmp_name ])){ //得到上傳的文件 轉存到你希望的目錄 $upload_file=$_FILES[ myfile ][ tmp_name ]; //防止圖片覆蓋問題 為每個用戶建立一個文件夾 $user_path=$_SERVER[ DOCUMENT_ROOT ] "/file/up/" $username; if(!file_exists($user_path)){ mkdir ($user_path); }
//$move_to_file=$user_path "/" $_FILES[ myfile ][ name ]; //防止用戶上傳用戶名相同的問題 $file_true_name=$_FILES[ myfile ][ name ]; $move_to_file=$user_path "/" time() rand( ) substr($file_true_name strripos($file_true_name " "));
//echo $upload_file $move_to_file; //中文要轉碼 if(move_uploaded_file($upload_file iconv("utf " "gb " "$move_to_file"))){ echo $_FILES[ myfile ][ name ] "上傳成功"; }else{ echo "上傳失敗"; } }else{ echo "上傳失敗"; }
?>
注意:
我舉個例子大家就知道 比如一個圖片文件 pic jpg 我們用 strrchr處理 strrchr(pic jpg ) 它將返回 jpg 明白了嗎?該函數返回指定字元在該字元串最後出現的位置後的字元 配合 substr() 我們就可以取到jpg 這樣我們就得到了文件的後綴名 來判斷上傳文件是否符合指定格式 本程序把指定的格式放在一個數組中 實際使用時可根據需要添加
lishixin/Article/program/PHP/201311/20924
④ 如何利用PHP代碼上傳文件
上傳代碼看這里(帶重命名的):
<form action="" method="post" enctype="multipart/form-data">
上傳文件:<input type="file" name="upLoad"><br>
重命名為:<input type="text" name="newName"><br>
<input type="submit" name="submit"><input type="reset" name="reset">
</form>
<br><i><small>文件上傳到伺服器需要一些時間<晌譽/small></i><br>
<?php
$upLoadDir="/"; //為目錄變數指定目錄位置
$upLoadError=$_FILES['upLoad']['error'];
$fileName=$_FILES['upLoad']['name'];
$fileTemName=$_FILES['upLoad']['tmp_name'];
$fileSize=$_FILES['upLoad']['size'];
$newName=$_POST['newName'];
function upLoad(){
global $upLoadDir,$upLoadError,$fileName,$fileTemName,$fileSize,$fileSuffix,$newName;
if($newName){ //如果需要被更新文件名
$fileReName=$newName.".".pathinfo($fileName,PATHINFO_EXTENSION); //採用新文件名+獲取文件名後綴
}else{ //如果不需要更新文件名
$fileReName=$fileName; //定義文件存儲位置,並在文件名前加一組隨機數字
}
if($upLoadError>0){ //0表示沒有錯誤發生,文件上傳成功
echo"錯誤:";
switch($upLoadError){
case 1:echo"上傳文件超過配置文件規定值。";break; //1表示上傳的文件超過了php.ini中upload_max_filesize選項限制的值
case 2:echo"上傳文件超過表單約定值。";break; /譽首/2表示上傳文件的大小超過了 HTML 表單中 MAX_FILE_SIZE 選項指定的值。
case 3:echo"上傳文件不完全。";break; //3表示文件只有部分被上傳。
case 4:echo"沒有上傳文件。";break; //4表示沒有文件被上傳。
}
}else{
if(is_uploaded_file($fileTemName)){ //確認文件通過HTTP POST上傳
if(!move_uploaded_file($fileTemName,($upLoadDir.$fileReName))){ //如果無法將上傳的慶謹數文件移動到新位置
echo"文件上傳失敗,請重新上傳。";
}else{ //否則返回成功信息
echo"文件上傳成功!<br>".date("Y-m-d H:i:s")."<br>上傳文件:".$fileName."<br>文件大小:".number_format(($fileSize/1024/1024),2)."Mb"."<br>重命名為:".$fileReName;
}
}else{ //如果不是通過HTTP POST方式上傳,則提示非法信息
echo"文件".$fileName."不合法!";
}
}
}
if(!empty($fileName)){
if(is_dir($upLoadDir)){ //如果目錄存在
upLoad(); //則執行上傳流程
}else{ //如果目錄不存在
mkdir($upLoadDir); //則創建目錄
upLoad(); //再執行上傳流程
}
}else{
echo"請選擇需要上傳的文件。";
}
?>
⑤ 經典怎樣通過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) . " Kb<br />";
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) . " Kb<br />";
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) . " Kb<br />";
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";
}
?>
上面的腳本檢測了是否已存在此文件,如果不存在,則把文件拷貝到指定的文件夾。
⑥ 如何使用php中ftp函數上傳文件以及解決上傳文件失敗的方法
一、 ftp上傳圖片參數說明。
1 $source:本機圖片完整的路徑。(/a/b/c.jpg)
2 $des :上傳目標linux主機完整的路徑。
3 $ftp_server:ftp地址
4 $ftp_user_name:ftp用戶名
5 $ftp_user_pass: ftp密碼
6 $port:埠
二、如何使用php中ftp函數上傳文件的方法
例如:
本地地址為:/a/b/c.jpg
目標地址為:/d/a/b/c.jpg
2.1、linux主機上傳linux主機。
01 function ftpSendFile($source,$des,$ftp_server,$ftp_user_name,$ftp_user_pass,$port)
02 {
03 // 此步驟是在於上傳目錄與本機的目錄不一致轉換使用
04 $des = "/d" . $des;
05 $conn_id = ftp_connect($ftp_server, $port) or die("Couldn't connect to $ftp_server");
06 $login_result = ftp_login($conn_id, $ftp_user_name, $ftp_user_pass);
07 ftp_pasv($conn_id, TRUE);
08 $ftp_folder = dirname($des);
09 $dir = explode("/", $ftp_folder);
10 $path = "";
11 for ($i = 0; $i < count($dir); $i++) {
12 $path .= "/" . $dir[$i];
13 if (!ftp_chdir($conn_id, $path)) {
14 $result = ftp_mkdir($conn_id, $path);
15 }
16 }
17 if (ftp_put($conn_id, $des, $source, FTP_BINARY)) {
18 return 1;
19 } else {
20 return 0;
21 }
22 ftp_close($conn_id);
23 }
2.2、windows主機上傳linux主機。
01 function sendPic($source,$des,$ftp_server,$ftp_user_name,$ftp_user_pass,$port)
02 {
03 $des = "/d" . $des;
04 $conn_id = ftp_connect($ftp_server, $port) or die("Couldn't connect to $ftp_server");
05 $login_result = ftp_login($conn_id, $ftp_user_name, $ftp_user_pass);
06 ftp_pasv($conn_id, TRUE);
07 $ftp_folder = dirname(str_ireplace('\\', '/', $des));
08 $dir = explode("/", $ftp_folder);
09 $path = "";
10 for ($i = 0; $i < count($dir); $i++) {
11 $path .= "/" . $dir[$i];
12 if (!ftp_chdir($conn_id, $path)) {
13 $result = ftp_mkdir($conn_id, $path);
14 }
15 }
16 if (ftp_put($conn_id, str_ireplace('\\', '/', $des), $source, FTP_BINARY)) {
17 return 1;
18 } else {
19 return 0;
20 }
21 ftp_close($conn_id);
22 }
上面的兩種使用php中ftp函數上傳文件的方法基本可以滿足正常的使用。