仓酷云

 找回密码
 立即注册
搜索
热搜: 活动 交友 discuz
查看: 1233|回复: 18
打印 上一主题 下一主题

[学习教程] PHP编程:PHP文件上传的详细思绪及完成

[复制链接]
分手快乐 该用户已被删除
跳转到指定楼层
#
发表于 2015-2-4 00:09:40 | 只看该作者 回帖奖励 |正序浏览 |阅读模式

马上注册,结交更多好友,享用更多功能,让你轻松玩转社区。

您需要 登录 才可以下载或查看,没有帐号?立即注册

x
兴趣可能会慢慢消亡,所以适当培养兴趣会激发自己无线的乐趣,有了乐趣,编程有啥难的。上传   比来一段工夫对PHP文件处置方面很感乐趣,因而在很多站点上看了很多的文件处置的文章,然而国际很多的站点上的PHP文件处置方面的常识大多半是你抄我的我抄你的,用百度.com或是谷歌.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,".")));
  //文件巨细的反省:

  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="http://tech.citypost.ca">CityPost.ca</a>
   </sup></small>
</center>

实现固定数量的几张图片的上传;再如调试软件ZendStudio的使用,看了很多次老师的应用,但总感觉用的不顺手,不懂那么多的数据值,到底哪一个才是真正的问题所在;还有如数据库语句的封装,我只会用简单的函数来进行封装。
乐观 该用户已被删除
18#
发表于 2015-5-3 14:40:39 | 只看该作者
基础有没有对学习php没有太大区别,关键是兴趣。
只想知道 该用户已被删除
17#
发表于 2015-5-1 20:11:23 | 只看该作者
真正的方向了,如果将来要去开发团队,你一定要学好smarty ,phplib这样的模板引擎,
兰色精灵 该用户已被删除
16#
发表于 2015-4-21 03:56:35 | 只看该作者
基础有没有对学习php没有太大区别,关键是兴趣。
柔情似水 该用户已被删除
15#
发表于 2015-4-17 10:39:38 | 只看该作者
最后介绍一个代码出错,但是老找不到错误方法,就是 go to wc (囧),出去换换气没准回来就找到错误啦。
14#
发表于 2015-4-16 07:11:14 | 只看该作者
开发工具也会慢慢的更专业,每个公司的可能不一样,但是zend studio是个大伙都会用的。
飘灵儿 该用户已被删除
13#
发表于 2015-4-10 07:28:15 | 只看该作者
你很难利用原理去编写自己的代码。对于php来说,系统的学习我认为还是很重要的,当你有一定理解后,你可你针对某种效果研究,我想那时你不会只是复制代码的水平了。
小魔女 该用户已被删除
12#
发表于 2015-4-4 17:48:00 | 只看该作者
小鸟是第一次发帖(我习惯潜水的(*^__^*) 嘻嘻……),有错误之处还请大家批评指正,另外,前些日子听人说有高手能用php写驱动程序,真是学无止境,人外有人,天外有天。
冷月葬花魂 该用户已被删除
11#
发表于 2015-3-24 21:52:36 | 只看该作者
php是动态网站开发的优秀语言,在学习的时候万万不能冒进。在系统的学习前,我认为不应该只是追求实现某种效果,因为即使你复制他人的代码调试成功,实现了你所期望的效果,你也不了解其中的原理。
若相依 该用户已被删除
10#
发表于 2015-3-17 20:58:23 | 只看该作者
有位前辈曾经跟我说过,phper 至少要掌握200个函数 编起程序来才能顺畅点,那些不熟悉的函数记不住也要一拿手册就能找到。所以建议新手们没事就看看php的手册(至少array函数和string函数是要记牢的)。
飘飘悠悠 该用户已被删除
9#
发表于 2015-3-15 22:06:40 | 只看该作者
学好程序语言,多些才是王道,写两个小时代码的作用绝对超过看一天书,这个我是深有体会(顺便还能练打字速度)。
若天明 该用户已被删除
8#
发表于 2015-3-15 20:54:38 | 只看该作者
基础有没有对学习php没有太大区别,关键是兴趣。
愤怒的大鸟 该用户已被删除
7#
发表于 2015-3-11 04:57:38 | 只看该作者
环境搭建好,当你看见你的浏览器输出“it works\\\\\\\"时你一定是喜悦的。在你解决问题的时候,我强烈建议多读php手册。
小女巫 该用户已被删除
6#
发表于 2015-3-8 18:21:15 | 只看该作者
小鸟是第一次发帖(我习惯潜水的(*^__^*) 嘻嘻……),有错误之处还请大家批评指正,另外,前些日子听人说有高手能用php写驱动程序,真是学无止境,人外有人,天外有天。
深爱那片海 该用户已被删除
5#
发表于 2015-3-4 19:24:54 | 只看该作者
写的比较杂,因为我也是个新手,不当至于大家多多指正。
爱飞 该用户已被删除
地板
发表于 2015-2-16 00:38:19 | 只看该作者
没接触过框架的人,也不用害怕,其实框架就是一种命名规范及插件,学会一个框架其余的框架都很好上手的。
山那边是海 该用户已被删除
板凳
发表于 2015-2-10 04:23:01 | 只看该作者
学好程序语言,多些才是王道,写两个小时代码的作用绝对超过看一天书,这个我是深有体会(顺便还能练打字速度)。
变相怪杰 该用户已被删除
沙发
发表于 2015-2-9 21:34:17 | 只看该作者
对于初学者来说不推荐去拿钱买的。当然如果一个网站你经常去用,而且里面的资料也比较有用,最好还是买个会员比较好,毕竟那些也是别人的工作成果。
灵魂腐蚀 该用户已被删除
楼主
发表于 2015-2-4 09:35:55 | 只看该作者
个人呢觉得,配wamp 最容易漏的一步就是忘了把$PHP$目录下的libmysql.dll拷贝到windows系统目录的system32目录下,还有重启apache。
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

QQ|Archiver|手机版|仓酷云 鄂ICP备14007578号-2

GMT+8, 2024-12-23 13:47

Powered by Discuz! X3.2

© 2001-2013 Comsenz Inc.

快速回复 返回顶部 返回列表