熱點推薦:
您现在的位置: 電腦知識網 >> 編程 >> PHP編程 >> 正文

PHP實現文件上傳的思路及實例

2013-11-15 12:44:03  來源: PHP編程 

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

  也許每一個站點都可能會對上傳文件有許多的限制這些限制會包括 文件類型文件大小擴展名以及上傳目錄的存在與否上傳文件的存在與否目錄的可寫性可讀性上傳文件的改名及怎樣把文件從緩存當中復制到你所需要的目錄當中

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

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

  首先是我們預設的變量值它包括文件大小文件擴展名類型MIMI類型及是否刪除的開關變量

$MAX_SIZE = ;
$FILE_MIMES = array(image/jpegimage/jpgimage/gif
image/pngapplication/msword);

$FILE_EXTS = array(zipjpgpnggif);

$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 doesnt exist and creation failed);
 if (!chmod($upload_dir))
die (change permission to failed);
}

  用戶請求的處理

if ($_REQUEST[del] && $DELETABLE) {
 $resource = fopen(logtxta);
 fwrite($resourcedate(Ymd h:i:s)DELETE $_SERVER[REMOTE_ADDR]$_REQUEST[del]\\n);
 fclose($resource);

 if (strpos($_REQUEST[del]/)﹥); //possible hacking
 else if (strpos($_REQUEST[del]files/) === false); //possible hacking
 else if (substr($_REQUEST[del])==files/) {
unlink($_REQUEST[del]);
print ﹤script﹥windowlocationhref=$url_this?message=deleted successfully﹤/script﹥;
 }
}
else if ($_FILES[userfile]) {
 $resource = fopen(logtxta);
 fwrite($resourcedate(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_namestrrpos($file_name)));

 //文件大小的檢查

 if ( $_FILES[userfile][size] ﹥ $MAX_SIZE)
$message = The file size is over MB;
//File Type/Extension Check
 else if (!in_array($file_type $FILE_MIMES)
&& !in_array($file_ext $FILE_EXTS) )
$message = Sorry $file_name($file_type) is not allowed to be uploaded;
 else
$message = do_upload($upload_dir $upload_url);

 print ﹤script﹥windowlocationhref=$url_this?message=$message﹤/script﹥;
}
else if (!$_FILES[userfile]);
else
$message = Invalid File Specified;

列出我們上傳的文件

$handle=opendir($upload_dir);
$filelist = ;
while ($file = readdir($handle)) {
 if(!is_dir($file) && !is_link($file)) {
$filelist = ﹤a href=$upload_dir$file$file﹤/a﹥;
 if ($DELETABLE)
$filelist = ﹤a href=?del=$upload_dir$file title=delete﹥x﹤/a﹥;
$filelist = ﹤sub﹥﹤small﹥﹤small﹥﹤font color=grey﹥ date(dm H:i filemtime($upload_dir$file))
﹤/font﹥﹤/small﹥﹤/small﹥﹤/sub﹥;
$filelist =﹤br﹥;
 }
}

function do_upload($upload_dir $upload_url) {

 $temp_name = $_FILES[userfile][tmp_name];
 $file_name = $_FILES[userfile][name];
 $file_name = str_replace(\\\\$file_name);
 $file_name = str_replace($file_name);
 $file_path = $upload_dir$file_name;

 //File Name Check
 if ( $file_name ==) {
$message = Invalid File Name Specified;
return $message;
 }

 $result = move_uploaded_file($temp_name $file_path);
 if (!chmod($file_path))
$message = change permission to failed;
 else
$message = ($result)?$file_name uploaded successfully :
 Somthing is wrong with uploading a file;
 return $message;
}

?﹥

﹤center﹥
﹤font color=red﹥﹤?=$_REQUEST[message]?﹥﹤/font﹥
﹤br﹥
﹤form name=upload id=upload ENCTYPE=multipart/formdata method=post﹥
Upload File ﹤input type=file id=userfile name=userfile﹥
﹤input type=submit name=upload value=Upload﹥
﹤/form﹥

﹤br﹥﹤b﹥My Files﹤/b﹥
﹤hr width=%﹥
﹤?=$filelist?﹥
﹤hr width=%﹥
﹤small﹥﹤sup﹥Developed By
﹤a style=textdecoration:none href=http://techcitypostca﹥CityPostca﹤/a﹥
﹤/sup﹥﹤/small﹥
﹤/center﹥


From:http://tw.wingwit.com/Article/program/PHP/201311/21506.html
    推薦文章
    Copyright © 2005-2013 電腦知識網 Computer Knowledge   All rights reserved.