用于文件验证的Codeigniter回调函数不起作用

时间:2013-11-26 09:15:13

标签: codeigniter validation codeigniter-2

我已经为图片上传创建了验证规则,如下所示。

$this->form_validation->set_rules('display_photo', 'Display Photo', 'callback_file_required|callback_file_size_max[1000]');

在控制器中我已经包含了如下的回调函数。

     public function file_required($display_photo) {

        if($_FILES[$display_photo]['size'] == 0) {
            $this->form_validation->set_message('file_required', 'Upload a file.');
            return false;
        }
        return true;
     }

      public function file_size_max($display_photo, $max_size) {

        if($_FILES[$display_photo]['size'] > $max_size) {
            $this->form_validation->set_message('file_size_max', 'This file exceeds max size.');
            return false;
        }
        return true;
      }

只有第一条规则正在执行但不是第二条规则。请帮我找出解决方案。

5 个答案:

答案 0 :(得分:0)

您应该在配置中传递文件大小限制而不是验证规则。 你可以粘贴执行上传的功能或方法吗?

答案 1 :(得分:0)

一种方法 - 您可以在上传文件之前使用JS进行验证:

<form method="post" enctype="multipart/form-data" action="upload.php">
<input type="file" name="file" id="file" />
<input type="submit" name="submit" value="Submit" />
</form>

<script>
document.forms[0].addEventListener('submit', function( evt ) {
    var file = document.getElementById('file').files[0];

    if(file && file.size < 10485760) { // 10 MB (this size is in bytes)
        //Submit form        
    } else {
        //Prevent default and display error
        evt.preventDefault();
    }
}, false);
</script>

Original Question is here

但是如果你想在服务器端验证,那么服务器直到我们上传文件时都不知道。

答案 2 :(得分:0)

$this->form_validation->set_rules('display_photo', 'Display Photo', 'callback_file_required_with_validation');

 public function file_required_with_validation($display_photo) {

    $max_size=1000;

    if($_FILES[$display_photo]['size'] == 0) {
        $this->form_validation->set_message('file_required', 'Upload a file.');
        return false;
    }

    if($_FILES[$display_photo]['size'] > $max_size) {
        $this->form_validation->set_message('file_size_max', 'This file exceeds max size.');
        return false;
    }     
    return true;
 }

答案 3 :(得分:0)

在CI中验证表单时,不确定是否可以在单个字段上使用两个回调。在任何情况下,您都不需要检查大小以查看文件是否已上载。使用错误代码'4'

解决方案:

  • 检查文件是否已使用if($_FILES[$display_photo]['error'] !== 4) // Error code 4 means no file was uploaded. So if it's not 4 then you have a file.
  • 上传
  • 如果您想进行多项检查,可以将它们放在一个回调中

答案 4 :(得分:0)

在验证定义中'回调'之后,确定你需要双下划线...

$this->form_validation->set_rules('display_photo', 'Display Photo', 'callback__file_required|callback__file_size_max[1000]');