A. 如何讓PHP上傳超大文件
1.在php.ini修改上傳文件的大小
打開php.ini,首先找到(前4個夠用了)
file_uploads = on ;是否允許通過HTTP上傳文件的開關。默認為ON即是開
upload_tmp_dir ;文件上傳至伺服器上存儲臨時文件的地方,如果沒指定就會用系統默認的臨時文件夾
upload_max_filesize = 8m ;望文生意,即允許上傳文件大小的最大值。默認為2M
post_max_size = 8m ;指通過表單POST給PHP的所能接收的最大值,包括表單里的所有值。默認為8M
一般地,設置好上述四個參數後,上傳<=8M的文件是不成問題,在網路正常的情況下。
但如果要上傳>8M的大體積文件,只設置上述四項還一定能行的通。
進一步配置以下的參數
max_execution_time = 600 ;每個PHP頁面運行的最大時間值(秒),默認30秒
max_input_time = 600 ;每個PHP頁面接收數據所需的最大時間,默認60秒
memory_limit = 8m ;每個PHP頁面所吃掉的最大內存,默認8M
把上述參數修改後,在網路所允許的正常情況下,就可以上傳大體積文件了
max_execution_time = 600
max_input_time = 600
memory_limit = 32m
file_uploads = on
upload_tmp_dir = /tmp
upload_max_filesize = 32m
post_max_size = 32m
2如果還是解決不了.
nginx修改上傳文件大小限制
在 /etc/nginx/conf.d/下 找到你的配置文件 在location中加上這樣一段代碼
location / {
root html;
index index.html index.htm;
client_max_body_size 5000m;
}
切記!!!修改完配置文件要重啟!重啟!重啟!
B. 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的上傳插件,功能也非常強大,開發也比較容易,網上有很多的資料,可以自行查找。
C. php上傳圖片文件常用的幾個方法
你好,要先建立一個html代碼
<formaction="upload_file.php"method="post"
enctype="multipart/form-data">
<labelfor="file">Filename:</label>
<inputtype="file"name="file"id="file"/>
<br/>
<inputtype="submit"name="submit"value="Submit"/>
</form>
然後創建upload_file文件用$_FILE判斷文件,下面是判斷文件的具體信息
$_FILES["file"]["name"] - 被上傳文件的名稱
$_FILES["file"]["type"] - 被上傳文件的類型
$_FILES["file"]["size"] - 被上傳文件的大小,以位元組計
$_FILES["file"]["tmp_name"] - 存儲在伺服器的文件的臨時副本的名稱
$_FILES["file"]["error"] - 由文件上傳導致的錯誤代
希望對你有幫助!
D. 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裡面的視頻,其中一節就是介紹文件上傳的.:)
E. 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起始頁錯誤信息說明
F. php 上傳文件
$sFileName是個自定義變數
strrpos()函數是用來確定某個字元串中最先出現的位置
strrpos($sFileName, '.')得到的事在字元串$sFileName中最先出現「.」的位置
substr()函數為獲取字元串子串的函數
substr( $sFileName, ( strrpos($sFileName, '.') + 1 ) ) 得到的是在$sFileName中「.」後的字元串子串 即上傳文件的擴展名 (其中+1 是「.」所佔的一個字元 )
G. 怎麼將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";
}
?>
上面的腳本檢測了是否已存在此文件,如果不存在,則把文件拷貝到指定的文件夾。
H. PHP如何上傳文件
$f_type=strtolower("swf,rar,jpg,zip,7z,iso,gif,exe,rmvb");//設置可上傳的文件類型
if (!is_uploaded_file($file) || ($_FILES['photoupload']['size'] > 20000 * 1024 * 1024) )
{
$error = 'Please upload only files smaller than 2Mb!';
}
$f_name=$_FILES['photoupload']['name'];
$tmp_type=substr(strrchr($f_name,"."),1);//獲取文件擴展名
$tmp_type=strtolower($tmp_type);
if(!stristr($f_type,$tmp_type)){
$error="對不起,不能上傳格式為:".$tmp_type."的文件:".$f_name;
}
if(move_uploaded_file($_FILES['photoupload']['tmp_name'], $uploadfile)){
$result['result'] = 'success';
$result['size'] =$f_name."文件上傳成功";
}
else{
$result['result'] = 'failed';
$result['error'] =$f_name."上傳失敗";
}
I. php 為什麼上傳文件
1.表單部分
允許用戶上傳文件,在HTML表單的聲明中要加上一個上傳的屬性:
enctype = 'multipart/form-data'
表單的method必須是POST
表單選項MAX_FILE_SIZE隱藏域用於限制上傳文件大小,它必須放在文件表單元素前面,單位為位元組。
如:
復制代碼代碼如下:
<form enctype='multipart/form-data' id='aa' name='aaa' method='post' action='xxx.php'>
<input type='hidden' name='MAX_FILE_SIZE' value='2621114' />
<input name='upload_file' type='file' />
</form>
2.處理上傳文件
上傳時,PHP收到關於該文件的信息數組,這些信息可以在$_FILES這個超級全局數組中找到。
如:如果表單中的文件輸入框名字為upload_file,那麼關於該文件的所有信息都包含在數組$_FILES['upload_file']裡面。
如:客戶上傳了一個「aaa.jpg」的圖片數組值如下:
name "p5pp.jpg" 上傳時文件的名字
type 「image/jpeg" 文件類型
tmp_name "/tmp/phpjksdf" 伺服器端的臨時文件名
error 上傳錯誤的返回值
size 2045 文件實際大小
上面數組裡面的error會返回不同的常量值,如下:
UPLOAD_ERR_OK 沒有錯誤發生,文件上傳成功
UPLOAD_ERR_INI_SIZE 文件大小超過了PHP.INI中upload_max_filesize選項限制的值
UPLOAD_ERR_FORM_SIZE 上傳文件的大小超過了HTML表單中MAX_FILE_SIZE選項值。可在程序中檢查表單$FILES ['up_file']['size']來處理
UPLOAD_ERR_PARTIAL 文件只有部分被上傳
UPLOAD_ERR_NO_FILE 用戶沒有提供任何文件上傳
上傳後處理的具體例子:
復制代碼代碼如下:
if(!move_uploaded_file($_FILES['f']['tmp_name'],"uploads/".$_FILES['f']['name'].".jpg")){
echo "error";
}
函數:
move_uploaded_file 移動上傳的臨時文件到指定的目錄下
例子:
move_uploaded_file('臨時文件名','指定文件路徑')
is_uploaded_file 判斷是否是通過http Post上傳的文件
例子:
復制代碼代碼如下:
if(!is_uploaded_file($_FILES['f']['tmp_name'])){
echo '非法';
}
3.相關參數
PHP上傳設計到的php.ini中的參數:
file_uploads 是否允許上傳文件,默認ON
upload_tmp_dir 上傳文件防止的臨時目錄,未指定則使用系統默認位置
upload_max_filesize 允許上傳文件的大小的最大值,默認為2M
post_max_size 控制採用POST方法進行一次表單提交中PHP所能接受的最大數據量,如果希望用PHP文件上傳,則此值要改為比upload_max_filesize要大
max_input_time 以秒為單位對通過POST/GET/PUT方式接受數據時間進行限制。
memory_limit 為了避免正在運行的腳本大量使用系統內存,PHP允許定義內存使用限額。通過設置此參數來制定單個腳本程序可以使用的最大內存容量,應適當大於post_max_size值
max_execution_time 用來設置在強制終止腳本前PHP等待腳本執行完畢的時間,單位秒。次選項可限制死循環腳本,但當存在一個長時間的合法活動時(如:上傳大文件),這項功能也會導致操作失敗。這樣情況下必須考慮將此變數增加。
4.考慮多文件上傳
可以利用$_FILES數組就可以輕松實現多文件上傳。$_FILES數組可以獲取客戶端表單裡面所有的file域內容,從而獲得所有在同一表單上傳的文件。
5.突破上傳的內存限制
方法一:
修改php.ini中memory_limit值,改為更大,如 64M
方法二:
使用Apache Rewrite方法,動態修改memory_limit的值。首先建立一個.htaccess文件,保存在上傳文件程序的 當前目錄即可.代碼如下:
php_value memory_limit 100M
php_value post_max_size 30M
php_value upload_max_filesize 30M
php_value max_execution_time 300
php_value max_input_tim 300
php_value display_errors On
J. php中文件上傳的函數是什麼
php文件上傳看使用from表單提交方式,然後通過$_POST函數獲取到文件信息。