加入收藏 | 设为首页 | 会员中心 | 我要投稿 平凉站长网 (https://www.0933zz.com.cn/)- 图像处理、语音技术、媒体智能、运维、低代码!
当前位置: 首页 > 站长学院 > PHP教程 > 正文

PHP一步步实现文件上传及上传文件类

发布时间:2022-06-14 09:56:33 所属栏目:PHP教程 来源:互联网
导读:一,比较简单的实现文件上传 文件上传原理:文件上传原理:将客户端的文件先上传到服务器端,然后再将服务器端的临时文件移动到指定的目录。 客户端配置:要上传文件,我们需要采用表单,并且表单发送的形式来POST请求,而且要求将enctype设置为multipart/form
  一,比较简单的实现文件上传
 
  文件上传原理:文件上传原理:将客户端的文件先上传到服务器端,然后再将服务器端的临时文件移动到指定的目录。
 
  客户端配置:要上传文件,我们需要采用表单,并且表单发送的形式来POST请求,而且要求将enctype设置为multipart/form-data,总结上传的条件如下:
 
  浏览器表单页面:表单发送方式为post,指定enctype=multipart/form-data,客户端的代码:
 
  <form action="uploadFile.php" method="post" accept-charset="utf-8" enctype="multipart/form-data">
      请选择要上传的文件:
      <input type="file" name="myfile">
      <input type="submit" value="上传文件">
  </form>
  $_FILES文件变量,下面是上传一个图片然后打印整理出来的数据:
 
  // name => 'QC8054R7QPGQ_1000x500.jpg'
  // type => 'image/jpeg'
  // tmp_name => '/Applications/MAMP/tmp/php/php1X5KZU'
  // error => 0
  // size => 229936
  $_FILES上传的参数含义说明:
 
  name:上传的文件的名称
 
  type: 上传的文件的MIME类型
 
  tmp_name:文件上传到服务器的临时路径
 
  site:上传的文件的大小
 
  error:上传的文件的错误码,0表示上传成功UPLOAD_ERR_OK
 
  移动文件
 
  移动文件方式一:上传文件到服务器端是在一个临时路径下,我们需要将文件移动到指定的目录下,我们可以通过下面的函数来实现移动:将指定的文件移到的目录路径下,要求待移动的文件是通过HTTP POST上传的.
 
  bool move_uploaded_file ( string $filename , string $destination )
 
  我们需要判断一下是否是通过HTTP POST上传的,下面的方法可以判断:判断文件是否是通过HTTP POST上传的,如果是返回TRUE,否则返回FALSE
 
  bool is_uploaded_file ( string $filename )
 
  移动文件方式二:
 
  我们还可以通过下面的函数来实现移动文件:
 
  参数一:待移动的文件
 
  参数二:移动到的目标路径
 
  bool copy ( string $source , string $dest [, resource $context ] )
 
  处理上传:
 
  define('UPLOAD_PATH', 'Uploads');
   
  $name = $_FILES['myfile']['name'];
  $type = $_FILES['myfile']['type'];
  $tmp_name = $_FILES['myfile']['tmp_name'];
  $error = $_FILES['myfile']['error'];
  $size = $_FILES['myfile']['size'];
   
  if ($error == UPLOAD_ERR_OK) {
      if (is_uploaded_file($tmp_name)) {
          move_uploaded_file($tmp_name, UPLOAD_PATH . '/' . $name);
      } else {
          if (is_file($tmp_name) && !copy($tmp_name, UPLOAD_PATH . '/' . $name)) {
              var_dump('ok');
          } //phpfensi.com
      }
  } else {
      // 上传到服务器就已经出错了
      var_dump($error);
  }
  php.ini上传配置:
 
  假设我们要支持上传20M的文件,那么我们可以设置以下选项:
 
  一定要设置为On,才能上传文件,若设置为Off,则服务器是接收不到文件数据的
 
  file_uploads = On
 
  指定上传文件到服务器的临时目录,默认为不打开的,可以不写
 
  upload_tmp_dir = "d:/uploads_tmp"
 
  支持上传的文件的最大为20M
 
  upload_max_filesize = 20M
 
  设置POST请求允许一次请求的最大值为100M
 
  post_max_size = 100M
 
  上传操作允许的最长时间,超过600秒则会停止脚本运行,0表示无限制
 
  max_execution_time = 600
 
  PHP脚本解析请求数据所用的最大时间,默认为60秒,0表示无限制
 
  max_input_time = 600
 
  单个PHP脚本所能申请的最大内存,-1表示无限制!
 
  memory_limit = 128M
 
  上传文件错误码:
 
  UPLOAD_ERR_OK:代表上传成功
 
  UPLOAD_ERR_EXTENSION:上传的文件被PHP扩展程序中断
 
  UPLOAD_ERR_PARTIAL:文件只有部分被上传
 
  UPLOAD_ERR_CANT_WRITE:文件写入失败
 
  UPLOAD_ERR_FORM_SIZE:表单文件超过了post_max_size
 
  UPLOAD_ERR_INI_SIZE:文件大小超过了限制上传的大小
 
  UPLOAD_ERR_NO_FILE:没有文件被上传
 
  UPLOAD_ERR_NO_TMP_DIR:找不到临时目录
 
  客户端限制上传:
 
  我们可以通过隐藏域来实现限制上传的文件大小,同时可以通过accept来限制上传的文件的类型,如下所示:
 
  <form action="uploadFile.php" method="post" accept-charset="utf-8" enctype="multipart/form-data">
      <input type="hidden" name="MAX_FILE_SIZE" value="1024">
      请选择要上传的文件:
      <input type="file" name="myfile" accept="image/png">
      <input type="submit" value="上传文件">
  </form>
  服务端限制上传:
 
  我们可以通过在服务端来判断文件类型、文件大小,上传方式等来判断是否满足条件,然后才处理文件!
 
  define('UPLOAD_PATH', 'Uploads');
  define('MAX_FILE_SIZE', 2 * 1024 * 1024);
   
  header('Content-type:text/html;Charset=utf-8');
   
  $name = $_FILES['myfile']['name'];
  $type = $_FILES['myfile']['type'];
  $tmp_name = $_FILES['myfile']['tmp_name'];
  $error = $_FILES['myfile']['error'];
  $size = $_FILES['myfile']['size'];
   
  $allowExt = array('png', 'jpg', 'jpeg');
   
  if ($error == UPLOAD_ERR_OK) {
      if ($size > MAX_FILE_SIZE) {
          exit('上传的文件过大');
      }
   
      // 取上传的文件的扩展类型
      $ext = pathinfo($name, PATHINFO_EXTENSION);
      if (!in_array($ext, $allowExt)) {
          exit('非法文件类型');
      }
   
      if (!is_uploaded_file($tmp_name)) {
          exit('文件不是HTTP POST上传过来的');
      }
   
      if (move_uploaded_file($tmp_name, UPLOAD_PATH . '/' . $name)) {
          echo '文件上传成功';
      } else {
          echo "文件上传失败";
      }
  } else {
      // 上传到服务器就已经出错了
      var_dump($error);
  }
  忽略文件重名之类的问题,那些需要额外添加一些小处理哦!

(编辑:平凉站长网)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    热点阅读