【问题标题】:How to check if file field is empty in codeigniter?如何检查codeigniter中的文件字段是否为空?
【发布时间】:2012-12-06 20:47:35
【问题描述】:

我有一个表单,其中包含一个名为 image 的文件字段,但此字段不是必需的。
当用户在表单中没有选择任何文件时,do_upload() 总是返回错误。
如何在控制器中执行上传操作之前检查用户是否选择了文件?

【问题讨论】:

  • 如果您在验证规则中声明了required 规则,只需删除它
  • 我没有要求验证这个字段。
  • 那么当用户没有选择表单中的任何文件时,您应该不会收到任何错误。究竟是什么错误?

标签: php codeigniter file-upload


【解决方案1】:

请使用 empty()

if (empty($_FILES['userfile']['name'])) {
}

【讨论】:

  • 它是 $_FILES(复数),为什么不呢?您的表单被提交给控制器中的函数,这意味着所有 super_globals(即 $_POST 和 $_FILES)都在函数范围内可用
  • 对不起,我的错,我检查了 $_FILE 单数.. =/
  • @VinothBabu,1. 他需要先检查它是否存在。 2. 他应该测试不为空
  • @Matanya:是的,需要检查 isset
【解决方案2】:

尝试使用is_uploaded_file() 检查文件是否有效。例如:

if(is_uploaded_file($_FILES['userfile']['tmp_name'])) 
{  
   do_upload();
}

【讨论】:

  • 我很欣赏这个答案。在上面给出的两个答案解决方案非常简单,是第一个猜测解决方案。这是一个宝石答案。
【解决方案3】:

在你的控制器中,在接收提交表单的函数上:

if (isset($_FILES['image']['name']) && !empty($_FILES['image']['name'])) {
    // do_upload

}

【讨论】:

  • isset 是多余的。来自docsempty() is essentially the concise equivalent to !isset($var) || $var == false
【解决方案4】:

这是检查 php 中文件字段是否为空的完整脚本

<!DOCTYPE html>
<html>
<body>

<form action="#" method="post" enctype="multipart/form-data">
    Select image to upload:
    <input name="my_files[]" type="file" multiple="multiple" />
    <input type="submit" value="Upload Image" name="submit">
</form>


<?php

 if (isset($_FILES['my_files']))
  {
    $myFile = $_FILES['my_files'];
    $fileCount = count($myFile["name"]);


        for ($i = 0; $i <$fileCount; $i++)
         {
           $error = $myFile["error"][$i]; 

            if ($error == '4')  // error 4 is for "no file selected"
             {
               echo "no file selected";
             }
            else
             {

               $name =  $myFile["name"][$i];
               echo $name; 
               echo "<br>"; 
               $temporary_file = $myFile["tmp_name"][$i];
               echo $temporary_file;
               echo "<br>";
               $type = $myFile["type"][$i];
               echo $type;
               echo "<br>";
               $size = $myFile["size"][$i];
               echo $size;
               echo "<br>";



               $target_path = "uploads/$name";   //first make a folder named "uploads" where you will upload files


                 if(move_uploaded_file($temporary_file,$target_path))
                  {
                   echo " uploaded";
                   echo "<br>";
                   echo "<br>";
                  }
                   else
                  {
                   echo "no upload ";
                  }




              }
        }  
}
        ?>


</body>
</html>

但要保持警惕。用户可以上传任何类型的文件,也可以通过上传恶意或 php 文件来入侵您的服务器或系统。在这个脚本中应该有一些验证。

参考http://www.techzigzag.com/how-to-check-that-user-has-upload-any-file-or-not-in-php/

希望对你有所帮助。

【讨论】:

    【解决方案5】:

    只需使用原生 php 代码检查文件上传。

    if(!file_exists($_FILES['myfile']['tmp_name']) || !is_uploaded_file($_FILES['myfile']['tmp_name'])) {
    echo 'No upload';
     }
    

    【讨论】:

      【解决方案6】:

      使用empty()空函数确实检查文件字段是否为空

      if ( ! empty($_FILES)) {...}
      
      
      if(!empty($_FILES['myFileField'])) {
          // file field is not empty..
      } else {
          // no file uploaded..
      }
      

      【讨论】:

      • 我在哪里使用 empty()?我无法访问 $_FILE 或 $this->该字段的输入。
      • 我无法将 $_FILE 访问到 Codeigniter 控制器中。
      【解决方案7】:

      由于文件上传错误“未选择文件”是第 4 个,正确的做法是:

      if ($_FILES['my_image_field_name']['error'] !== 4){
          if ($this->upload->do_upload('my_image_field_name')) { ...
      

      在按名称或 tmp_name 进行检查时,可能还有其他原因导致这些字段未填充,您可能会错过这些。

      【讨论】:

        【解决方案8】:
        if(!empty($_FILES[$file_name]['name'])){
          // TODO your logic
        
        }else{
          echo "empty";
        }
        

        【讨论】:

          【解决方案9】:
          $file['file']->isValid()
          

          CI4 user guide link

          【讨论】:

            猜你喜欢
            • 2013-07-02
            • 2012-04-23
            • 1970-01-01
            • 2015-12-28
            • 1970-01-01
            • 2012-12-29
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            相关资源
            最近更新 更多