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 沒有錯(cuò)誤發(fā)生,文件上傳成功
UPLOAD_ERR_INI_SIZE 文件大小超過了PHP.INI中upload_max_filesize選項(xiàng)限制的值
UPLOAD_ERR_FORM_SIZE 上傳文件的大小超過了HTML表單中MAX_FILE_SIZE選項(xiàng)值。可在程序中檢查表單$FILES ['up_file']['size']來(lái)處理
UPLOAD_ERR_PARTIAL 文件只有部分被上傳
UPLOAD_ERR_NO_FILE 用戶沒有提供任何文件上傳
上傳后處理的具體例子:
復(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 判斷是否是通過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ì)通過POST/GET/PUT方式接受數(shù)據(jù)時(shí)間進(jìn)行限制。
memory_limit 為了避免正在運(yùn)行的腳本大量使用系統(tǒng)內(nèi)存,PHP允許定義內(nèi)存使用限額。通過設(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

AgeneratorinPHPisamemory-efficientwaytoiterateoverlargedatasetsbyyieldingvaluesoneatatimeinsteadofreturningthemallatonce.1.Generatorsusetheyieldkeywordtoproducevaluesondemand,reducingmemoryusage.2.Theyareusefulforhandlingbigloops,readinglargefiles,or

In PHP, you can use square brackets or curly braces to obtain string specific index characters, but square brackets are recommended; the index starts from 0, and the access outside the range returns a null value and cannot be assigned a value; mb_substr is required to handle multi-byte characters. For example: $str="hello";echo$str[0]; output h; and Chinese characters such as mb_substr($str,1,1) need to obtain the correct result; in actual applications, the length of the string should be checked before looping, dynamic strings need to be verified for validity, and multilingual projects recommend using multi-byte security functions uniformly.

To prevent session hijacking in PHP, the following measures need to be taken: 1. Use HTTPS to encrypt the transmission and set session.cookie_secure=1 in php.ini; 2. Set the security cookie attributes, including httponly, secure and samesite; 3. Call session_regenerate_id(true) when the user logs in or permissions change to change to change the SessionID; 4. Limit the Session life cycle, reasonably configure gc_maxlifetime and record the user's activity time; 5. Prohibit exposing the SessionID to the URL, and set session.use_only

The urlencode() function is used to encode strings into URL-safe formats, where non-alphanumeric characters (except -, _, and .) are replaced with a percent sign followed by a two-digit hexadecimal number. For example, spaces are converted to signs, exclamation marks are converted to!, and Chinese characters are converted to their UTF-8 encoding form. When using, only the parameter values ??should be encoded, not the entire URL, to avoid damaging the URL structure. For other parts of the URL, such as path segments, the rawurlencode() function should be used, which converts the space to . When processing array parameters, you can use http_build_query() to automatically encode, or manually call urlencode() on each value to ensure safe transfer of data. just

You can use substr() or mb_substr() to get the first N characters in PHP. The specific steps are as follows: 1. Use substr($string,0,N) to intercept the first N characters, which is suitable for ASCII characters and is simple and efficient; 2. When processing multi-byte characters (such as Chinese), mb_substr($string,0,N,'UTF-8'), and ensure that mbstring extension is enabled; 3. If the string contains HTML or whitespace characters, you should first use strip_tags() to remove the tags and trim() to clean the spaces, and then intercept them to ensure the results are clean.

There are two main ways to get the last N characters of a string in PHP: 1. Use the substr() function to intercept through the negative starting position, which is suitable for single-byte characters; 2. Use the mb_substr() function to support multilingual and UTF-8 encoding to avoid truncating non-English characters; 3. Optionally determine whether the string length is sufficient to handle boundary situations; 4. It is not recommended to use strrev() substr() combination method because it is not safe and inefficient for multi-byte characters.

To set and get session variables in PHP, you must first always call session_start() at the top of the script to start the session. 1. When setting session variables, use $_SESSION hyperglobal array to assign values ??to specific keys, such as $_SESSION['username']='john_doe'; it can store strings, numbers, arrays and even objects, but avoid storing too much data to avoid affecting performance. 2. When obtaining session variables, you need to call session_start() first, and then access the $_SESSION array through the key, such as echo$_SESSION['username']; it is recommended to use isset() to check whether the variable exists to avoid errors

Key methods to prevent SQL injection in PHP include: 1. Use preprocessing statements (such as PDO or MySQLi) to separate SQL code and data; 2. Turn off simulated preprocessing mode to ensure true preprocessing; 3. Filter and verify user input, such as using is_numeric() and filter_var(); 4. Avoid directly splicing SQL strings and use parameter binding instead; 5. Turn off error display in the production environment and record error logs. These measures comprehensively prevent the risk of SQL injection from mechanisms and details.
