php大文件上传php.ini配置
來源:http://xuqin.blog.51cto.com/5183168/909258
http://wenku.baidu.com/view/daa108687e21af45b307a8e3.html
upload_max_filesize = 500m;??? ??? //允許上傳文件大小的最大值
post_max_size = 500m;??? ??? ??? ? //通過表單POST給PHP的所能接受的最大值
max_input_time = 600;??? ??? ??? ? //每個(gè)PHP頁面接受數(shù)據(jù)所需的最大時(shí)間
memory_limit = 32m;??? ??? ??? ??? //每個(gè)PHP頁面所需的最大內(nèi)存
max_execution_time = 0; ? ? ? ? ? ?//0表示沒有限制?
?
max_execution_time設(shè)置了在強(qiáng)制終止腳本前PHP等待腳本執(zhí)行完畢的時(shí)間,此時(shí)間以秒計(jì)算。
?
下面簡單介紹下php上傳文件涉及到的參數(shù):?
0:文件上傳時(shí)存放文件的臨時(shí)目錄。必須是?PHP?進(jìn)程所有者用戶可寫的目錄。如果未指定則?PHP?使用系統(tǒng)默認(rèn)值?
????php.ini文件中upload_tmp_dir用來說明PHP上傳的文件放置的臨時(shí)目錄。?
要想上傳文件,得保證服務(wù)器沒有關(guān)閉臨時(shí)文件和有對文件夾的寫權(quán)限?
1:max_execution_time?
????變 量max_execution_time設(shè)置了在強(qiáng)制終止腳本前PHP等待腳本執(zhí)行完畢的時(shí)間,此時(shí)間以秒計(jì)算。當(dāng)腳本進(jìn)入了一個(gè)無限循環(huán)狀態(tài)?時(shí)此變量 非常有用。然而,當(dāng)存在一個(gè)需要很長時(shí)間完成的合法活動(dòng)時(shí)(例如上傳大型文件),這項(xiàng)功能也會導(dǎo)致操作失敗。在這樣的情況下必須考慮將此變量值增?加,以 避免PHP在腳本正在執(zhí)行某些重要過程的時(shí)候?qū)⒛_本關(guān)閉。?
????max_execution_time?=?90?
2:file_uploads?=?On?
3:upload_max_filesize?=?2M?
4:post_max_size?
????同 表單提交相關(guān)的一個(gè)變量是post_max_size,它將控制在采用POST方法進(jìn)行一次表單提交中PHP所能夠接收的最大數(shù)據(jù)量。似乎不大?可能需要 將默認(rèn)的8?MB改得更大。相反,應(yīng)當(dāng)適當(dāng)將其降到更為實(shí)際的數(shù)值。但如果希望使用PHP文件上傳功能,則需要將此值改為比 upload_max_filesize還?要大。?
????post_max_size?=?8M?
5:max_input_time?
????此變量可以以秒為單位對通過POST、GET以及PUT方式接收數(shù)據(jù)時(shí)間進(jìn)行限制。如果應(yīng)用程序所運(yùn)行環(huán)境處在低速鏈路上,則需要增加此值以適應(yīng)接收數(shù)據(jù)所需的更多時(shí)間。?
????max_input_time?=?90?
6:memory_limit?
????memory_limit?=?8M?
????為了避免正在運(yùn)行的腳本大量使用系統(tǒng)可用內(nèi)存,PHP允許定義內(nèi)存使用限額。通過memory_limit變量來指定單個(gè)腳本程序可以使用的最大內(nèi)存容量?
????變量memory_limit的值應(yīng)當(dāng)適當(dāng)大于post_max_size的值?
如何實(shí)現(xiàn)php大文件上傳:?
一個(gè)簡單的配置例子,大家可以參考下:?
????打開php.ini,首先找到?
????file_uploads?=?on?;是否允許通過HTTP上傳文件的開關(guān)。默認(rèn)為ON即是開?
????upload_tmp_dir?;文件上傳至服務(wù)器上存儲臨時(shí)文件的地方,如果沒指定就會用系統(tǒng)默認(rèn)的臨時(shí)文件夾?
????upload_max_filesize?=?8m?;望文生意,即允許上傳文件大小的最大值。默認(rèn)為2M?
????post_max_size?=?8m?;指通過表單POST給PHP的所能接收的最大值,包括表單里的所有值。默認(rèn)為8M?
????一般地,設(shè)置好上述四個(gè)參數(shù)后,上傳<=8M的文件是不成問題,在網(wǎng)絡(luò)正常的情況下。?
????但如果要上傳>8M的大體積文件,只設(shè)置上述四項(xiàng)還一定能行的通。除非你的網(wǎng)絡(luò)真有100M/S的上傳高速,否則你還得關(guān)心關(guān)心下面的參數(shù)?
????max_execution_time?=?600?;每個(gè)PHP頁面運(yùn)行的最大時(shí)間值(秒),默認(rèn)30秒?
????max_input_time?=?600?;每個(gè)PHP頁面接收數(shù)據(jù)所需的最大時(shí)間,默認(rèn)60秒?
????memory_limit?=?8m?;每個(gè)PHP頁面所吃掉的最大內(nèi)存,默認(rèn)8M?
????把上述參數(shù)修改后,在網(wǎng)絡(luò)所允許的正常情況下,就可以上傳大體積文件了
?
?
?
今天研究PHP文件上傳時(shí),發(fā)現(xiàn)不能成功上傳體積比較大的文件。其實(shí)只要對php進(jìn)行一些設(shè)置就行了。
經(jīng)過搜索得知主要調(diào)整 upload_max_filesize 和 post_max_size 的大小就行了。但網(wǎng)上有一篇更詳細(xì)的文章:
?
這里額外講一個(gè)錯(cuò)誤? 是$_FILES['userfile']['error']檢測不到的 就是 當(dāng)上傳文件過大 已經(jīng)超過PHP設(shè)定的 post_max_size 時(shí)候 會出現(xiàn)另外一個(gè)問題 就是下文中的 會崩潰 ,請大家注意判斷 post_max_size:手冊解釋設(shè)定 POST 數(shù)據(jù)所允許的最大大小。此設(shè)定也影響到文件上傳。要上傳大文件,該值必須大于 upload_max_filesize。
如果配置腳本中激活了內(nèi)存限制,memory_limit 也會影響文件上傳。通常說,memory_limit 應(yīng)該比 post_max_size 要大。
當(dāng)使用 integer 類型時(shí),其值以字節(jié)為度量單位。還可以用簡化符號,說明見此 FAQ。
如果 POST 數(shù)據(jù)尺寸大于 post_max_size $_POST 和 $_FILES superglobals 便會為空。這可以以多種方式證明,例如,傳遞 $_GET 變量到腳本以處理數(shù)據(jù), 也就是 <form action="edit.php?processed=1">, 然后查看 $_GET['processed'] 是否被設(shè)置。
?
php怎么上傳大文件 : PHP文件上傳的原理及實(shí)現(xiàn)利用php的文件函數(shù)來實(shí)現(xiàn)上傳
這段代碼分為兩個(gè)文件,一個(gè)為upload.html,一個(gè)是upload.php
upload.html
<form enctype="multipart/form-data" action="upload.php" method="post">
<input type="hidden" name="max_file_size" value="100000">
<input name="userfile" type="file">
<input type="submit" value="上傳文件">
</form>
其中,
請注意<form enctype="multipart/form-data"……>這是一個(gè)標(biāo)簽,我們要實(shí)現(xiàn)文件的上傳,必須指定為multipart/form-data,否則服務(wù)器將不知道要干什么。
值得注意的是文件upload.html中表單選項(xiàng) MAX_FILE_SIZE 的隱藏值域,通過設(shè)置其Value(值)可以限制上載文件的大小。
MAX_FILE_SIZE 的值只是對瀏覽器的一個(gè)建議,實(shí)際上它可以被簡單的繞過。因此不要把對瀏覽器的限制寄希望于該值。實(shí)際上,PHP 設(shè)置中的上傳文件最大值,是不會失效的。但是最好還是在表單中加上 MAX_FILE_SIZE,因?yàn)樗梢员苊庥脩粼诨〞r(shí)間等待上傳大文件之后才發(fā)現(xiàn)該文件太大了的麻煩。
upload.php
$f=&$HTTP_POST_FILES['Myfile'];
$dest_dir=’uploads’;//設(shè)定上傳目錄
$dest=$dest_dir.’/’.date("ymd")."_".$f['name'];//設(shè)置文件名為日期加上文件名避免重復(fù)
$r=move_uploaded_file($f['tmp_name'],$dest);
chmod($dest, 0755);//設(shè)定上傳的文件的屬性
或者
<?copy($_FILES[MyFile][tmp_name],$_FILES[MyFile][name]);?>
以上范例中 $_FILES 數(shù)組的內(nèi)容如下所示。我們假設(shè)文件上傳字段的名稱為 userfile(名稱可隨意命名)
$_FILES['userfile']['name'] 客戶端機(jī)器文件的原名稱。
$_FILES['userfile']['type'] 文件的 MIME 類型,需要瀏覽器提供該信息的支持,例如“image/gif”。
$_FILES['userfile']['size'] 已上傳文件的大小,單位為字節(jié)。
$_FILES['userfile']['tmp_name'] 文件被上傳后在服務(wù)端儲存的臨時(shí)文件名。
$_FILES['userfile']['error'] 和該文件上傳相關(guān)的錯(cuò)誤代碼
值:0; 沒有錯(cuò)誤發(fā)生,文件上傳成功。
值:1; 上傳的文件超過了 php.ini 中 upload_max_filesize 選項(xiàng)限制的值。
值:2; 上傳文件的大小超過了 HTML 表單中 MAX_FILE_SIZE 選項(xiàng)指定的值。
值:3; 文件只有部分被上傳。
值:4; 沒有文件被上傳。
[編輯]PHP上傳文件涉及到的參數(shù)
PHP默認(rèn)的上傳限定是最大2M,想上傳超過此設(shè)定的文件,需要調(diào)整PHP、apache等的一些參數(shù). 下面,我們簡要介紹一下PHP文件上傳涉及到的一些參數(shù):
file_uploads
是否允許通過HTTP上傳文件的開關(guān),默認(rèn)為ON即是開
upload_tmp_dir
upload_tmp_dir用來說明PHP上傳的文件放置的臨時(shí)目錄,要想上傳文件,得保證服務(wù)器沒有關(guān)閉臨時(shí)文件和有對文件夾的寫權(quán)限,如果未指定則PHP使用系統(tǒng)默認(rèn)值
upload_max_filesize
允許上傳文件大小的最大值,默認(rèn)為2M
post_max_size
控制在采用POST方法進(jìn)行一次表單提交中PHP所能夠接收的最大數(shù)據(jù)量。如果希望使用PHP文件上傳功能,則需要將此值改為比upload_max_filesize要大
max_input_time
以秒為單位對通過POST、GET以及PUT方式接收數(shù)據(jù)時(shí)間進(jìn)行限制。如果應(yīng)用程序所運(yùn)行環(huán)境處在低速鏈路上,則需要增加此值以適應(yīng)接收數(shù)據(jù)所需的更多時(shí)間
memory_limit
為了避免正在運(yùn)行的腳本大量使用系統(tǒng)可用內(nèi)存,PHP允許定義內(nèi)存使用限額。通過memory_limit變量來指定單個(gè)腳本程序可以使用的最大內(nèi)存容量變量memory_limit的值應(yīng)當(dāng)適當(dāng)大于post_max_size的值
max_execution_time
max_execution_time 設(shè)置了在強(qiáng)制終止腳本前PHP等待腳本執(zhí)行完畢的時(shí)間,此時(shí)間以秒計(jì)算。當(dāng)腳本進(jìn)入了一個(gè)無限循環(huán)狀態(tài)時(shí)此變量非常有用。然而,當(dāng)存在一個(gè)需要很長時(shí)間完 成的合法活動(dòng)時(shí)(例如上傳大型文件),這項(xiàng)功能也會導(dǎo)致操作失敗。在這樣的情況下必須考慮將此變量值增加,以避免PHP在腳本正在執(zhí)行某些重要過程的時(shí)候 將腳本關(guān)閉
對于linux主機(jī),可能在/etc/httpd/conf.d/access.conf/下面里面還有php.conf 文件,這個(gè)文件可能會解決一些系統(tǒng)的文件大小限制問題
[編輯]利用discuz實(shí)現(xiàn)PHP大文件上傳應(yīng)用舉例
論壇的附件功能當(dāng)初設(shè)計(jì)的初衷并不是為了文件管理,由于服務(wù)器配置,php,網(wǎng)絡(luò)等多方面因素,使得通過論壇上傳文件并不是一個(gè)好方案。
對于確實(shí)需要改善論壇附件上傳條件的朋友可以嘗試將上面提及的參數(shù)在php.ini進(jìn)行設(shè)置,以適應(yīng)大文件上傳的需要。同時(shí)別忘記在論壇的后臺相應(yīng)做附件限制的地方進(jìn)行設(shè)置。
論壇主要有2個(gè)地方可以對附件上傳的大小進(jìn)行限制,級別從高到低依次為:
帖子相關(guān)—附件類型尺寸
用戶組—附件相關(guān)
同時(shí),下面提供一個(gè)配置指導(dǎo),來源一些成功通過http上傳大附件的朋友的提供,當(dāng)然,由于大家的服務(wù)器配置情況以及網(wǎng)絡(luò)情況不同,并不一定適用你的情況,可能很多地方需要參照修改:
打開php.ini,
參數(shù) ?設(shè)置 ?說明 ?
file_uploads ?on ?是否允許通過HTTP上傳文件的開關(guān)。默認(rèn)為ON即是開 ?
upload_tmp_dir ?– ?文件上傳至服務(wù)器上存儲臨時(shí)文件的地方,如果沒指定就會用系統(tǒng)默認(rèn)的臨時(shí)文件夾 ?
upload_max_filesize ?8m ?望文生意,即允許上傳文件大小的最大值。默認(rèn)為2M ?
post_max_size ?8m ?指通過表單POST給PHP的所能接收的最大值,包括表單里的所有值。默認(rèn)為8M ?
說明 ?
一般地,設(shè)置好上述四個(gè)參數(shù)后,在網(wǎng)絡(luò)正常的情況下,上傳<=8M的文件是不成問題 ?
但如果要上傳>8M的大體積文件,只設(shè)置上述四項(xiàng)還一定能行的通。除非你的網(wǎng)絡(luò)真有100M/S的上傳高速,否則你還得繼續(xù)設(shè)置下面的參數(shù)。 ?
max_execution_time ?600 ?每個(gè)PHP頁面運(yùn)行的最大時(shí)間值(秒),默認(rèn)30秒 ?
max_input_time ?600 ?每個(gè)PHP頁面接收數(shù)據(jù)所需的最大時(shí)間,默認(rèn)60秒 ?
memory_limit ?8m ?每個(gè)PHP頁面所吃掉的最大內(nèi)存,默認(rèn)8M ?
把上述參數(shù)修改后,在網(wǎng)絡(luò)所允許的正常情況下,就可以上傳大體積文件了
[編輯]論壇文件上傳常見錯(cuò)誤類型(不斷總結(jié)中…)
Warning: Unable to open ‘\\php2′ for reading: Invalid argument in e:\user\web\larksoft.net\upload\upfile.php on line 10
是php的upload_tmp_dir的原因,所指定的目錄必須可讀可寫
Parse error: parse error in c:\program files\apache group\apache\htdocs\mdweb\ftpfile\upload.php on line 14
Parse error一般都是語句的問題,比如象“;”,“’”,“)”等等的匹配問題
<Files *.php>
SetOutputFilter PHP
SetInputFilter PHP
LimitRequestBody 524288
</Files>
把LimitRequestBody 改了就可以了。
總結(jié)
以上是生活随笔為你收集整理的php大文件上传php.ini配置的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 鲤鱼汤有什么营养?
- 下一篇: PHP CURL 多线程 GET/POS