PHP文件上传判断file是否己选择上传文件

一个合格的程序员在实现数据入库中时我们都会有一些非常严密的过滤与数据规则了,像我们文件上传时在前段要判断用户是否选择上传文件同时在后台也可判断是否有上传的文件了,下面我们就一起来看看相关例子吧.

如下html代码如下:

  1. <formaction="?"method="post"enctype='multipart/form-data'>
  2. 文件上传:<inputtype="file"name="file"/>
  3. <inputtype="submit"value="提交"/>
  4. </form>

我们最常用的在前端简单的进行判断,代码如下:

  1. <script>
  2. varsend=document.getElementById("send");
  3. send.onclick=function(){
  4. varfile=document.getElementById("file").value;
  5. if(file.length<1){
  6. alert('请选择图片');
  7. returnfalse;
  8. }
  9. }
  10. </script>

如果要做真正的安全我们需要在后台进入判断处理,代码如下:

  1. <?php
  2. //判断pic文件框是否已经选择文件
  3. if(!emptyempty($_FILES['file']['tmp_name'])){
  4. echo'已选择文件';
  5. }else{
  6. echo'请选择文件';
  7. } //开源软件:phpfensi.com
  8. //PS:$_FILES后面的['tmp_name']一定不要忘写,它表示是一个临时的意思
  9. ?>

安例分析

js判断是比较笼统了我们只是使用了file=document.getElementById("file").value;来判断file有没有值或不为空了,这样只要输入一个数字就可以直接提交了,所以我们需要进入如上传文件的用户名限制,代码如下:

  1. functionCheckWorkFile()
  2. {
  3. varobj=document.getElementById('fuMain');
  4. if(obj.value=='')
  5. {
  6. alert('请选择要上传的作业书文件');
  7. returnfalse;
  8. }
  9. varstuff=obj.value.match(/^(.*)(\.)(.{1,8})$/)[3];
  10. if(stuff!='doc')
  11. {
  12. alert('文件类型不正确,请选择.doc文件');
  13. returnfalse;
  14. }
  15. returntrue;
  16. }

对于php处理我们也只使用了if(!empty($_FILES['file']['tmp_name'])){来判断不为空了,其实这样也是不合理的,如我们可以如此处理,代码如下:

  1. function file_type($filename)
  2. {
  3. $file = fopen($filename, "rb");
  4. $bin = fread($file, 2); //只读2字节
  5. fclose($file);
  6. $strInfo = @unpack("C2chars", $bin);
  7. $typeCode = intval($strInfo['chars1'].$strInfo['chars2']);
  8. $fileType = '';
  9. switch ($typeCode)
  10. {
  11. case 7790:
  12. $fileType = 'exe';
  13. break;
  14. case 7784:
  15. $fileType = 'midi';
  16. break;
  17. case 8297:
  18. $fileType = 'rar';
  19. break;
  20. case 8075:
  21. $fileType = 'zip';
  22. break;
  23. case 255216:
  24. $fileType = 'jpg';
  25. break;
  26. case 7173:
  27. $fileType = 'gif';
  28. break;
  29. case 6677:
  30. $fileType = 'bmp';
  31. break;
  32. case 13780:
  33. $fileType = 'png';
  34. break;
  35. default:
  36. $fileType = 'unknown: '.$typeCode;
  37. }
  38. //Fix
  39. if ($strInfo['chars1']=='-1' AND $strInfo['chars2']=='-40' ) return 'jpg';
  40. if ($strInfo['chars1']=='-119' AND $strInfo['chars2']=='80' ) return 'png';
  41. return $fileType;
  42. }
  43. echo file_type('start.php'); // 6063 or 6033

这样我们可以限制上传文件类型的同时也给程序做了一个安全处理了.