计算上传文件的数量

Posted

技术标签:

【中文标题】计算上传文件的数量【英文标题】:Counting the number of uploaded files 【发布时间】:2013-05-06 07:09:24 【问题描述】:

我正在开发我的 CodeIgniter 项目,到目前为止它运行良好。

但是,我需要一些方法来,因为我想在某些情况下(但不是全部)限制它。

我该怎么做?我尝试了count($_FILES),但这没有给我任何可用的东西。

我还尝试了很多其他方法,但都没有给我所需的信息。

上传表单是一个多文件上传,我使用this库来处理多个上传。

没有计数的上传函数是这样的:

function do_upload()

    $setid = $this->input->post('imageset');
        $this->load->library('upload');
        $this->load->library('image_lib');
        $this->upload->initialize(array(
                "upload_path"   => "./photos/",
                "allowed_types" => "jpg|jpeg|png|gif",
                "encrypt_name" => TRUE
        ));
        try 
            $this->upload->do_multi_upload("files");
            $images = $this->upload->get_multi_upload_data();
            $config = array(
                    'image_library'  => 'gd2',
                    'create_thumb'   => TRUE,
                    'maintain_ratio' => TRUE,
                    'width'          => '145',
                    'height'         => '145'
            );
            foreach ($images as $image)
            
                $config['source_image'] = $image['full_path'];
                $this->image_lib->initialize($config);
                $this->image_lib->resize();
                $this->manage_model->insertimage($image['file_name'],$image['orig_name'],$image['file_size'],$image['file_type'],$setid);
            
            $this->session->set_flashdata('success','Billederne er nu blevet uploadet.');
         catch (Exception $e) 
            $this->session->set_flashdata('error', $e);
        
        redirect('manage/images','refresh');

非常感谢任何帮助。

【问题讨论】:

count($images) 设置该变量后。 @jeroen:问题是如果我通过$images变量统计图片,然后报错,图片已经上传到服务器,我要统计在那之前。 如果你想避免上传,你需要在客户端使用javascript(也许结合php使用ajax)。 @jeroen:我不一定要避免上传部分 - 只要图像保留在 tmp 文件夹中,而不是在 upload_path 中。 @crypticツ 因为无论上传多少文件,这都会给我 1。可能与 PHP 用于此类事情的多维数组有关。 【参考方案1】:

您可以检查 $_FILES 变量中的项目数,例如:

$total = count($_FILES['your_variable_array_in_html']['tmp_name']);

你需要在:

$this->upload->do_multi_upload("files");

行。

正如您已经注意到的,$_FILES 仅包含一个变量 - 一个数组 - 包含不同部分的数组,tmp_namenameerror 等。查看manual 了解更多详细信息。

【讨论】:

谢谢!正是我想要的。 @jeroen 知道如何计算用户实际上传的文件数。现在,我的表单有5 文件字段,即使用户只上传2 文件,使用这种方法也会给我5 count 总是显示1 有时我上传文件时显示为 5【参考方案2】:

如果您想限制上传的文件。 您可以分两步限制它们:

    只接受上传文件的指定数组名。即文件[]

    现在您可以轻松统计

    上传的文件了

count($_FILES['files']['name']);

字符串 'name' 可以替换为 'tmp_name', 'error', 'size', 'type'

您使用的库在首次执行时已将文件上传到您的上传路径。所以你应该在上传之前手动检查它。

  function do_upload()
  
    $setid = $this->input->post('imageset');
    $this->load->library('upload');
    $this->load->library('image_lib');
    $this->upload->initialize(array(
        "upload_path"   => "./photos/",
        "allowed_types" => "jpg|jpeg|png|gif",
        "encrypt_name" => TRUE
    ));
    if (isset($_FILES['files']['name'])) 
      $num = count($_FILES['files']['name']);
    

        try 
          $this->upload->do_multi_upload("files");
          $images = $this->upload->get_multi_upload_data();
          $config = array(
              'image_library'  => 'gd2',
              'create_thumb'   => TRUE,
              'maintain_ratio' => TRUE,
              'width'          => '145',
              'height'         => '145'
          );
          foreach ($images as $image)
          
            $config['source_image'] = $image['full_path'];
            $this->image_lib->initialize($config);
            $this->image_lib->resize();
            $this->manage_model->insertimage($image['file_name'],$image['orig_name'],$image['file_size'],$image['file_type'],$setid);
          
          $this->session->set_flashdata('success','Billederne er nu blevet uploadet.');
         catch (Exception $e) 
          $this->session->set_flashdata('error', $e);
        
        redirect('manage/images','refresh');
      

希望对你有帮助

【讨论】:

我可能是错的,但 count() 将始终返回 1 或更大的值,除非参数为 NULL,在这种情况下它返回 0,因此如果没有上传文件,count() 的值仍然是1

以上是关于计算上传文件的数量的主要内容,如果未能解决你的问题,请参考以下文章

PHP通过循环上传多个图像

plupload如何限制上传文件数量,限制只能上传单个文件

如何限制上传的 dropzone.js 文件的数量?

Antd的Upload组件上传文件控制文件数量格式等,以及提交时如何获取文件

Antd的Upload组件上传文件控制文件数量格式等,以及提交时如何获取文件

layui多图片上传,限制重复图片,限制数量