PHP 檔案上傳優化

2021-10-04 09:50:23 字數 2914 閱讀 1404

1.7.1 更改檔名

方法一:通過時間戳做檔名

;//echo strrchr($path,'.'); //從最後乙個點開始擷取,一直擷取到最後

echo

time()

.rand

(100

,999).

strrchr

($path

,'.'

);方法二:通過uniqid()實現

'';//生成唯一的id

echo

uniqid

('goods_').

strrchr

($path

,'.'),

'';//帶有字首

echo

uniqid

('goods_'

,true).

strrchr

($path

,'.'),

'';//唯一id+隨機數

1.7.2 驗證檔案格式

方法一:判斷檔案的副檔名(不能識別檔案偽裝)

操作思路:將檔案的字尾和允許的字尾對比

<?php 

if(!empty($_post))

?>

注意:比較副檔名不能防止檔案偽裝。

方法二:通過$_fiels['type']型別(不能識別檔案偽裝)

<?php 

if(!empty($_post))

?>

注意:比較$_fiels['type']不能防止檔案偽裝。

方法三:php_fileinfo擴充套件(可以防止檔案偽裝)

​ 在php.ini中開啟fileinfo擴充套件

extension=php_fileinfo.dll
注意:開啟fileinfo擴充套件以後,就可以使用finfo_*的函式了

小結:驗證檔案格式有三種方法

1、可以驗證副檔名(不可以防止檔案偽裝)

2、通過$_files['type']驗證(不可以防止檔案偽裝)

3、通過file_info擴充套件(可以防止檔案偽裝)

1.7.3 優化檔案上傳例題

步驟第一步:驗證是否有誤

第二步:驗證格式

第三步:驗證大小

第四步:驗證是否是http上傳

第五步:上傳實現

<?php 

/***驗證錯誤

*如果有錯,就返回錯誤,如果沒錯,就返回null

*/function check($file)

} //2、驗證格式

$info=finfo_open(fileinfo_mime_type);

$mime=finfo_file($info,$file['tmp_name']);

$allow=array('image/jpeg','image/png','image/gif'); //允許的類別

if(!in_array($mime,$allow))

//3、驗證大小

$size=123456789;

if($file['size']>$size)

//4、驗證是否是http上傳

if(!is_uploaded_file($file['tmp_name']))

return '檔案不是http post上傳的

'; return null; //沒有錯誤

}//表單提交

if(!empty($_post)) else"; //資料夾路徑

if(!is_dir($folderpath))

mkdir($folderpath);

$filename=uniqid('',true).strrchr($_files['face']['name'],'.'); //檔名

$filepath="$folderpath/$filename"; //檔案路徑

if(move_uploaded_file($_files['face']['tmp_name'],$filepath))

echo "上傳成功,路徑是:/";

else

echo '上傳失敗

'; }

}?>

執行結果

小結:1、將時間戳轉換格式

echo

date

('y-m-d h:i:s'

,1231346),

'';//將時間戳轉成年-月-日 小時:分鐘:秒

echo

date

('y-m-d h:i:s'),

'';//將當前的時間轉成年-月-日 小時:分鐘:秒

2、設定時區(php.ini)

prc:中華人民共和國
3、php的執行可以不需要apache的參與

php mysql上傳檔案 PHP 檔案上傳

通過 php,可以把檔案上傳到伺服器。建立乙個檔案上傳表單 允許使用者從表單上傳檔案是非常有用的。請看下面這個供上傳檔案的 html 表單 芝麻教程 web3.xin 檔名 將以上 儲存到 form.html 檔案中。有關上面的 html 表單的一些注意項列舉如下 標籤的 enctype 屬性規定了...

php 檔案上傳

在php中,檔案上傳一般是通過move uploaded file 來實現的。bool move uploaded file string filename,string destination 本函式檢查並確保由 filename 指定的檔案是合法的上傳檔案 即通過 php 的 http post...

PHP檔案上傳

最近在寫關於php上傳影象檔案,寫了一整星期,還是不怎麼清楚其中原理,在此也只能把一些表象小結小結。php上傳檔案,是通過表單上傳的 注意得把form標籤的enctype屬性賦值multipart form date 先從客戶端把檔案上傳到伺服器 這怎麼傳上去的不清楚 再在伺服器上覆制到其他位址,開...