简述PHP上传文件的思路,PHP文件上传的具体思路及实现

首先达内php培训老师有必要说明一下文件上传的操作流程及用到的知识点:

文件上传我们需要用到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 doesnt 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] ");

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 "";

}

}

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]." ");

fclose($resource);

$file_type = $_FILES[userfile][type];

$file_name = $_FILES[userfile][name];

$file_ext = strtolower(substr($file_name,strrpos($file_name,".")));

//文件大小的检查:

if ( $_FILES[userfile][size] > $MAX_SIZE)

$message = "The file size is over 2MB.";

//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 "";

}

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 .= "".$file."";

if ($DELETABLE)

$filelist .= " x";

$filelist .= " ".date("d-m H:i", filemtime($upload_dir.$file))

."";

$filelist .="
";

}

}

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,0777))

$message = "change permission to 777 failed.";

else

$message = ($result)?"$file_name uploaded successfully." :

"Somthing is wrong with uploading a file.";

return $message;

}

?>

=$_REQUEST[message]?>

Upload File

My Files


=$filelist?>


Developed By

CityPost.ca

最近一段时间对PHP文件处理方面很感兴趣,因此在许多站点上看了许多的文件处理的文章,但是国内许多的站点上的PHP文件处理方面的知识大多数是你抄我的我抄你的,用baidu.com或者是google.com搜索出来的东西多是重复的。最近在国外一个站点上盾了一篇文章感觉很不错,因此推荐给大家阅读。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值