PHP 文件上傳全攻略
Jun 13, 2016 pm 12:16 PM
1.表單部分
允許用戶上傳文件,在HTML表單的聲明中要加上一個(gè)上傳的屬性:
enctype = 'multipart/form-data'
表單的method必須是POST
表單選項(xiàng)MAX_FILE_SIZE隱藏域用于限制上傳文件大小,它必須放在文件表單元素前面,單位為字節(jié)。
如:
復(fù)制代碼 代碼如下:
2.處理上傳文件
上傳時(shí),PHP收到關(guān)于該文件的信息數(shù)組,這些信息可以在$_FILES這個(gè)超級(jí)全局?jǐn)?shù)組中找到。
如:如果表單中的文件輸入框名字為upload_file,那么關(guān)于該文件的所有信息都包含在數(shù)組$_FILES['upload_file']里面。
如:客戶上傳了一個(gè)“aaa.jpg”的圖片數(shù)組值如下:
name "p5pp.jpg" 上傳時(shí)文件的名字
type “image/jpeg" 文件類型
tmp_name "/tmp/phpjksdf" 服務(wù)器端的臨時(shí)文件名
error 上傳錯(cuò)誤的返回值
size 2045 文件實(shí)際大小
上面數(shù)組里面的error會(huì)返回不同的常量值,如下:
UPLOAD_ERR_OK 沒(méi)有錯(cuò)誤發(fā)生,文件上傳成功
UPLOAD_ERR_INI_SIZE 文件大小超過(guò)了PHP.INI中upload_max_filesize選項(xiàng)限制的值
UPLOAD_ERR_FORM_SIZE 上傳文件的大小超過(guò)了HTML表單中MAX_FILE_SIZE選項(xiàng)值??稍诔绦蛑袡z查表單$FILES ['up_file']['size']來(lái)處理
UPLOAD_ERR_PARTIAL 文件只有部分被上傳
UPLOAD_ERR_NO_FILE 用戶沒(méi)有提供任何文件上傳
上傳后處理的具體例子:
復(fù)制代碼 代碼如下:
if(!move_uploaded_file($_FILES['f']['tmp_name'],"uploads/".$_FILES['f']['name'].".jpg")){
echo "error";
}
函數(shù):
move_uploaded_file 移動(dòng)上傳的臨時(shí)文件到指定的目錄下
例子:
move_uploaded_file('臨時(shí)文件名','指定文件路徑')
is_uploaded_file 判斷是否是通過(guò)http Post上傳的文件
例子:
復(fù)制代碼 代碼如下:
if(!is_uploaded_file($_FILES['f']['tmp_name'])){
echo '非法';
}
3.相關(guān)參數(shù)
PHP上傳設(shè)計(jì)到的php.ini中的參數(shù):
file_uploads 是否允許上傳文件,默認(rèn)ON
upload_tmp_dir 上傳文件防止的臨時(shí)目錄,未指定則使用系統(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 以秒為單位對(duì)通過(guò)POST/GET/PUT方式接受數(shù)據(jù)時(shí)間進(jìn)行限制。
memory_limit 為了避免正在運(yùn)行的腳本大量使用系統(tǒng)內(nèi)存,PHP允許定義內(nèi)存使用限額。通過(guò)設(shè)置此參數(shù)來(lái)制定單個(gè)腳本程序可以使用的最大內(nèi)存容量,應(yīng)適當(dāng)大于post_max_size值
max_execution_time 用來(lái)設(shè)置在強(qiáng)制終止腳本前PHP等待腳本執(zhí)行完畢的時(shí)間,單位秒。次選項(xiàng)可限制死循環(huán)腳本,但當(dāng)存在一個(gè)長(zhǎng)時(shí)間的合法活動(dòng)時(shí)(如:上傳大文件),這項(xiàng)功能也會(huì)導(dǎo)致操作失敗。這樣情況下必須考慮將此變量增加。
4.考慮多文件上傳
可以利用$_FILES數(shù)組就可以輕松實(shí)現(xiàn)多文件上傳。$_FILES數(shù)組可以獲取客戶端表單里面所有的file域內(nèi)容,從而獲得所有在同一表單上傳的文件。
5.突破上傳的內(nèi)存限制
方法一:
修改php.ini中memory_limit值,改為更大,如 64M
方法二:
使用Apache Rewrite方法,動(dòng)態(tài)修改memory_limit的值。首先建立一個(gè).htaccess文件,保存在上傳文件程序的 當(dāng)前目錄即可.代碼如下:
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

Hot AI Tools

Undress AI Tool
Undress images for free

Undresser.AI Undress
AI-powered app for creating realistic nude photos

AI Clothes Remover
Online AI tool for removing clothes from photos.

Clothoff.io
AI clothes remover

Video Face Swap
Swap faces in any video effortlessly with our completely free AI face swap tool!

Hot Article

Hot Tools

Notepad++7.3.1
Easy-to-use and free code editor

SublimeText3 Chinese version
Chinese version, very easy to use

Zend Studio 13.0.1
Powerful PHP integrated development environment

Dreamweaver CS6
Visual web development tools

SublimeText3 Mac version
God-level code editing software (SublimeText3)

Hot Topics

The method to get the current session ID in PHP is to use the session_id() function, but you must call session_start() to successfully obtain it. 1. Call session_start() to start the session; 2. Use session_id() to read the session ID and output a string similar to abc123def456ghi789; 3. If the return is empty, check whether session_start() is missing, whether the user accesses for the first time, or whether the session is destroyed; 4. The session ID can be used for logging, security verification and cross-request communication, but security needs to be paid attention to. Make sure that the session is correctly enabled and the ID can be obtained successfully.

To extract substrings from PHP strings, you can use the substr() function, which is syntax substr(string$string,int$start,?int$length=null), and if the length is not specified, it will be intercepted to the end; when processing multi-byte characters such as Chinese, you should use the mb_substr() function to avoid garbled code; if you need to intercept the string according to a specific separator, you can use exploit() or combine strpos() and substr() to implement it, such as extracting file name extensions or domain names.

UnittestinginPHPinvolvesverifyingindividualcodeunitslikefunctionsormethodstocatchbugsearlyandensurereliablerefactoring.1)SetupPHPUnitviaComposer,createatestdirectory,andconfigureautoloadandphpunit.xml.2)Writetestcasesfollowingthearrange-act-assertpat

In PHP, the most common method is to split the string into an array using the exploit() function. This function divides the string into multiple parts through the specified delimiter and returns an array. The syntax is exploit(separator, string, limit), where separator is the separator, string is the original string, and limit is an optional parameter to control the maximum number of segments. For example $str="apple,banana,orange";$arr=explode(",",$str); The result is ["apple","bana

JavaScript data types are divided into primitive types and reference types. Primitive types include string, number, boolean, null, undefined, and symbol. The values are immutable and copies are copied when assigning values, so they do not affect each other; reference types such as objects, arrays and functions store memory addresses, and variables pointing to the same object will affect each other. Typeof and instanceof can be used to determine types, but pay attention to the historical issues of typeofnull. Understanding these two types of differences can help write more stable and reliable code.

std::chrono is used in C to process time, including obtaining the current time, measuring execution time, operation time point and duration, and formatting analysis time. 1. Use std::chrono::system_clock::now() to obtain the current time, which can be converted into a readable string, but the system clock may not be monotonous; 2. Use std::chrono::steady_clock to measure the execution time to ensure monotony, and convert it into milliseconds, seconds and other units through duration_cast; 3. Time point (time_point) and duration (duration) can be interoperable, but attention should be paid to unit compatibility and clock epoch (epoch)

ToaccessenvironmentvariablesinPHP,usegetenv()orthe$_ENVsuperglobal.1.getenv('VAR_NAME')retrievesaspecificvariable.2.$_ENV['VAR_NAME']accessesvariablesifvariables_orderinphp.iniincludes"E".SetvariablesviaCLIwithVAR=valuephpscript.php,inApach

In PHP, to pass a session variable to another page, the key is to start the session correctly and use the same $_SESSION key name. 1. Before using session variables for each page, it must be called session_start() and placed in the front of the script; 2. Set session variables such as $_SESSION['username']='JohnDoe' on the first page; 3. After calling session_start() on another page, access the variables through the same key name; 4. Make sure that session_start() is called on each page, avoid outputting content in advance, and check that the session storage path on the server is writable; 5. Use ses
