PHP檔案上傳的具體思路及實現

來源:互聯網
上載者:User

最近一段時間對PHP檔案處理方面很感愛好,因此在許多網站上看了許多的檔案處理的文章,但是國內許多的網站上的PHP檔案處理方面的知識大多數是你抄我的我抄你的,用baidu.com或者是google.com搜尋出來的東西多是重複的。最近在國外一個網站上盾了一篇文章感覺很不錯,因此推薦給大家閱讀。

首先我們有必要說明一下檔案上傳的操作流程及用到的知識點:

檔案上傳我們需要用到HTML裡面表單的type="file"類型,及其enctype屬性。這是我們大家必須要用的。當然了PHP函數庫當中的FILE函數庫,字串類型函數庫,目錄函式庫及$_FILES[]的使用是我們必須要用到的。

也許每一個網站都可能會對上傳檔案有許多的限制,這些限制會包括 檔案類型,檔案大小,副檔名,以及上傳目錄的存在與否,上傳檔案的存在與否,目錄的可寫性,可讀性,上傳檔案的改名及怎樣把檔案從緩衝當中複製到你所需要的目錄當中。

當然出錯的預先處理也是我們不容忽視的!假如再深一步的討論我們還可以對檔案的操作起用事件記錄的記錄。

下面我們通過一段程式來實現這些功能:

--------------------------------------------------------------------------------------------


首先是我們預設的變數值,它包括檔案大小,副檔名類型,MIMI類型,及是否刪除的開關變數

$MAX_SIZE = 2000000;
$FILE_MIMES = array('image/jpeg','image/jpg','image/gif'
,'image/png','application/msword');

$FILE_EXTS = array('.zip','.jpg','.png','.gif');

$DELETABLE = true;


下一部就是設定瀏覽器訪問變數及目錄訪問變數:

$site_name = $_SERVER['HTTP_HOST'];
$url_dir = "http://".$_SERVER['HTTP_HOST'].dirname($_SERVER['PHP_SELF']);
$url_this = "http://".$_SERVER['HTTP_HOST'].$_SERVER['PHP_SELF'];

$upload_dir = "files/";
$upload_url = $url_dir."/files/";
$message ="";


建立上傳目錄並相應改變許可權:

if (!is_dir("files")) {
if (!mkdir($upload_dir))
die ("upload_files directory doesn't exist and creation failed");
if (!chmod($upload_dir,0755))
die ("change permission to 755 failed.");
}



使用者請求的處理:

if ($_REQUEST[del] && $DELETABLE) {
$resource = fopen("log.txt","a");
fwrite($resource,date("Ymd h:i:s")."DELETE - $_SERVER[REMOTE_ADDR]"."$_REQUEST[del]n");
fclose($resource);

if (strpos($_REQUEST[del],"/.")>0); //possible hacking
else if (strpos($_REQUEST[del],"files/") === false); //possible hacking
else if (substr($_REQUEST[del],0,6)=="files/") {
unlink($_REQUEST[del]);
print "<script>window.location.href='$url_this?message=deleted successfully'</script>";
}
}
else if ($_FILES['userfile']) {
$resource = fopen("log.txt","a");
fwrite($resource,date("Ymd h:i:s")."UPLOAD - $_SERVER[REMOTE_ADDR]"
.$_FILES['userfile']['name']." "
.$_FILES['userfile']['type']."n");
fclose($resource);

$file_type = $_FILES['userfile']['type'];
$file_name = $_FILES['userfile']['name'];
$file_ext = strtolower(substr($file_name,strrpos($file_name,".")));

//檔案大小的檢查:

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.