多数大学生出来选择的工作和专业无关
首页 > 专业知识

挖掘PHP上传文件类型原理实现

时间:2018-03-10 16:53:20 [来源]:郑州PHP培训学校
  挖掘PHP上传文件类型原理实现
  我们在上传文件时有很多文件类型,文章这里介绍了有关PHP上传文件类型方面的详细介绍,希望对大家有帮助。
  我们都知道PHP有强大的功能,给我带来了许多方便,我们这里来看看PHP上传文件类型的实现。PHP支持上传文件的功能,但并不是所有支持PHP的网站都支持此功能,特别是免费的网站。
  实现上传,首先要在HTML上加入上传文件的“<FORM>”表格。
  <form method=post action="upload.php" ENCTYPE="multipart/form-data"><input type="file" name="upload_file">
  <input type="submit" name="submit" value="上传文件">用PHP上传文件类型时,需要对内容作详细的检查,例如是否容许读写文件,文件格式、文件大小是否在你指定的大小内等。
  <?
  $file_size_max = 1000000;
  // 限制文件上传最大容量(bytes)
  $store_dir = "/public/www/upload/";
  // 上传文件的储存位置
  $accept_overwrite = true;
  //允许读写文件
  // 检查文件大小
  if ($upload_file_size > $file_size_max) {echo "对不起,你的文件容量大于规定";
  exit;
  }
  // 检查读写文件
  if (file_exists($store_dir . $upload_file_name) &&&& !$accept_overwrite) {echo "文件已存在,不能再复制";
  exit;
  }
  //复制文件到指定目录
  if (! @ copy($upload_file,$store_dir . $upload_file_name)) {echo "复制文件失败";
  exit;
  }
  echo "上传文件完成";
  ?>
  利用文件函数实现PHP文件上传案例分析
  老鸟谈PHP上传文件discuz实现
  演示实现PHP上传文件代码
  实战PHP上传文件代码演示
  经验总结:示例PHP上传文件代码
  需要注意的是,PHP上传文件类型时候是将文件复制到服务器临时目录(temp),然后利用PHP的“copy()”函数将文件由临时目录复制到你指定的储存目录。由于程序会使用临时目录来进行工作,如果服务器因考虑安全问题而封锁了以上的功能,你就无法使用 PHP的上传功能。另外,上传的文件目录亦需要设定文件模式为777(CHMOD 777) ,否则PHP就无权读写文件。
  剖析PHP上传大文件原理
  这里介绍了关于PHP上传大文件的解决方案,服务器端通过$_FILES['userfile']['size']判断用户上传的文件大小,希望对大家有帮助。
  PHP给我带来了更方便的编程,但是我们在使用时以会遇到问题,这里就谈谈PHP上传大文件的小问题吧。由于涉及到本地和服务器两方面的安全问题,所以基于input type="file"形式的页面文件上传一直处于一个很尴尬的位置。一方面,用户不希望隐私泄露,所以浏览器无法对用户在上传时选择的文件做有效的判断。另一方面,为了服务器端的安全,减轻传输负担,系统又希望能在用户开始上传之前就将非法的文件拒之门外。
  一来一去,基于原始input方式的上传,成为网络存储网站避之唯恐不及的遗留性问题,也造就了现在千奇百怪的插件、上传客户端。input方式的上传就如此之差么?当然不是。上传文件不大的时候,它还是非常简单可靠的,在PHP中,我们只需要一个复合型表单。
  <form enctype="multipart/form-data" action="__URL__" method="POST">
  一个输入框
  <input name="userfile" type="file" />
  和服务器端的一行代码
  move_uploaded_file($_FILES['userfile']['tmp_name'], '/var/www/uploads/'. basename($_FILES['userfile']['name']));就可以实现整个上传过程。但随文件增大,表单上传的不足就会暴露出来。尤其是我们想取得最基本的文件大小来阻止PHP上传大文件这一简单的想法,也变得如此困难。以下一一道来:通过MAX_FILE_SIZ。我们经常会在手册里读到:
  利用文件函数实现PHP文件上传案例分析
  老鸟谈PHP上传文件discuz实现
  演示实现PHP上传文件代码
  实战PHP上传文件代码演示
  经验总结:示例PHP上传文件代码
  MAX_FILE_SIZE 隐藏字段(单位为字节)必须放在文件输入字段之前,其值为接收文件的最大尺寸。这是对浏览器的一个建议,PHP 也会检查此项。在浏览器端可以简单绕过此设置,因此不要指望用此特性来阻挡大文件。实际上,PHP 设置中的上传文件最大值是不会失效的。但是最好还是在表单中加上此项目,因为它可以避免用户在花时间等待上传大文件之后才发现文件过大上传失败的麻烦。
  显然PHP的开发者们也考虑到了PHP上传大文件的问题,但就像手册所说,MAX_FILE_SIZE只是对浏览器的一个建议,事实上目前为止所有主流的浏览器并没有采纳这个建议,所以采用MAX_FILE_SIZE约束文件大小形同摆设,不可行。
  通过服务器端
  MAX_FILE_SIZE既然无效,那么用户可以将文件上传到服务器,服务器端通过$_FILES['userfile']['size']判断用户上传的文件大小,然后决定是否接受上传并返回信息。暂且排除服务器的负荷以及可能存在的恶意破坏行为,这种解决方案听起来无非是浪费一部分带宽,也能对用户上传文件作出约束。但这也是不可行的,PHP的文件上传受到php.ini以下这些设置的影响:
  post_max_size
  upload_max_filesize
  max_execution_time
  memory_limit
  虽然设置方法在手册中都有比较详细的说明,之所以仍然说此方法不可行,是因为php执行脚本在超过memory_limit时,该次的POST数据会全部丢失并且不会报错!试想用户填写了一个超长的表单,并伴随一个超过memory_limit的文件一起上传,经过了漫长的等待时间之后发现等来的又是一张干干净净的空白表单,那是何等印象深刻的用户体验啊。更何况数十M的服务器流量仅仅用来检测文件大小,是现在的网络环境不允许的。
  深入学习PHP数组删除元素方法
  我们使用unset()函数解决PHP数组删除的问题,文章有详细的代码和讲解,希望对大家有技术上的提高。
  学习PHP时,你可能会遇到PHP数组删除问题,这里将介绍PHP数组删除问题的解决方法,在这里拿出来和大家分享一下。学过C语言的人可能都知道,C语言对字符串的处理功能很强,PHP是用C写成的,自然不例外的继承了C的处理字符串的优势。不过毕竟PHP是一门新的语言,与C语言还是有区别的,自然不能保证与C是完全相同的。所以有些功能只有经过测试才能知道。  有时候需要对一个字符串的每个字符进行处理,一般的做法可能是:
  $str="something";
  for($i=0;  $i<strlen($str);  $i++)
  {
  $ch=substr($str,  $i,  1);
  //处理$ch
  }
  这样是可以,但是有没有更优美一点的办法呢?有,就是把它看成一个数组,C语言就是这样处理的。
  我们把上面的例子,改成用字符串数组的处理方式:
  $str="something";
  for($i=0;  $i<strlen($str);  $i++)
  {
  $ch=$str[$i];
  //处理$ch
  }
  这样是不是好多了。
  PHP数组删除元素
  定义了一个数组,有时想PHP数组删除其中几项怎么办?我在www.phpbuilder.com中看到了一个答案,就是使用unset()函数。还是让我们做一个测试吧。
  $a[]="a1";
  $a[]="a2";
  $a[]="a3";
  for($i=0;  $i<sizeof($a);  $i++)
  {
  echo  $a[$i]  .  "
  ";
  }
  unset($a[0]);
  for($i=0;  $i<sizeof($a);  $i++)
  {
  echo  $a[$i]  .  "
  ";
  }
 

上一篇:浅谈PHP正则表达式的一点理解

下一篇:PHP上传图片三个步骤详细分析