课程咨询 :025-86971863

南京PHP培训 > 雇主企业 > 企业笔试题 > PHP文件上传的具体思路及实现
  • PHP文件上传的具体思路及实现

    发布:南京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 "<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]." ");

    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 "<script>window.location.href=$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("d-m 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,0777))

    $message = "change permission to 777 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/form-data" 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=70%>

    <?=$filelist?>

    <hr width=70%>

    <small><sup>Developed By

    <a style="text-decoration:none" href="**">CityPost.ca</a>

    </sup></small>

    </center>

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

    推荐文章

上一篇:易于开发Web 2.0应用程序的5个PHP框架

下一篇:PHP 7对决HHVM

最新开班日期  |  更多

PHP高级开发工程师就业班

PHP高级开发工程师就业班

开班日期:04-28

PHP高级开发工程师精品班

PHP高级开发工程师精品班

开班日期:04-28

PHP高级开发工程师周末班

PHP高级开发工程师周末班

开班日期:04-28

PHP高级开发工程师定制班

PHP高级开发工程师定制班

开班日期:04-28

  • 地址:南京市秦淮区太平南路333号金陵御景园8楼达内
  • 课程培训电话:025-86971863     全国服务监督电话:400-111-8989
  • 服务邮箱 tousu@tedu.cn
  • 2002-2018 达内时代科技集团有限公司 版权所有 京ICP证8000853号-56