【问题标题】:How can I limit the file size when I try to upload files via PHP parse SDK?当我尝试通过 PHP 解析 SDK 上传文件时,如何限制文件大小?
【发布时间】:2015-08-04 15:19:59
【问题描述】:

我正在尝试将文件上传到解析 SDK 云,从技术上讲它可以工作,但现在我想限制用户能够上传的最大文件大小。这是代码:

if ( isset( $_FILES['image'] ) ) {

    // save file to Parse
    $file = ParseFile::createFromData( file_get_contents( $_FILES['image']['tmp_name'] ), $_FILES['image']['name']  );
    $file->save();
}

【问题讨论】:

    标签: php file parse-platform upload


    【解决方案1】:

    只需使用 if 语句并获取文件的大小

    $_FILES['image']['size']
    //The size, in bytes, of the uploaded file.
    

    类似

    if($_FILES['image']['size'] < 10000000)
    {
        // save file to Parse
        $file = ParseFile::createFromData( file_get_contents( $_FILES['image' ['tmp_name'] ), $_FILES['image']['name']  );
        $file->save();
    }
    else
    {
        //Tell user that the file is too big, however you prefer
    }
    

    客户端的东西: 直接来自 PHP 文档:

    <!-- The data encoding type, enctype, MUST be specified as below -->
    <form enctype="multipart/form-data" action="__URL__" method="POST">
        <!-- MAX_FILE_SIZE must precede the file input field -->
        <input type="hidden" name="MAX_FILE_SIZE" value="30000" />
        <!-- Name of input element determines name in $_FILES array -->
        Send this file: <input name="userfile" type="file" />
        <input type="submit" value="Send File" />
    </form>
    

    上面例子中的URL应该被替换,并指向一个 PHP 文件。

    MAX_FILE_SIZE 隐藏字段(以字节为单位)必须位于 文件输入字段,它的值是接受的最大文件大小 php。应始终使用此表单元素,因为它可以为用户节省 等待传输大文件的麻烦只是发现 它太大,传输失败。请记住:愚弄这个 在浏览器端设置非常简单,所以不要依赖文件 此功能阻止了更大的尺寸。它只是一个 为应用程序客户端的用户提供便利功能。 但是,最大大小的 PHP 设置(在服务器端), 不能被愚弄。

    【讨论】:

    • 谢谢,这很有用
    【解决方案2】:

    如果您查看$_FILES 数组,您会看到有一条数据与每个名为$_FILES['image']['size'] 的数据一起传递

    如果您想在 PHP 端限制大小,那么只需测试该字段

    if ( isset( $_FILES['image'] ) ) {
        if ( $_FILES['image']['size'] < 10000 ) {
            // save file to Parse
            $file = ParseFile::createFromData( 
                       file_get_contents( $_FILES['image']['tmp_name'] ), 
                       $_FILES['image']['name']  );
            $file->save();
         } else {
             // return some sort of error
         }
    }
    

    请记住 $_FILES['image']['size'] 记录在 BYTES 中。

    【讨论】:

      【解决方案3】:

      试试这个方法

      if(isset($_FILES['image']) {
      if($_FILES['image']['size'] > 10485760) { //10 MB (size is also in bytes)
          // File too big
      } else {
           $file = ParseFile::createFromData( 
                     file_get_contents( $_FILES['image']['tmp_name'] ), 
                     $_FILES['image']['name']  );
           $file->save();
      }
      }
      

      【讨论】:

        【解决方案4】:

        您可以在解析文件之前限制文件大小。见下文:

            if ( isset( $_FILES['image'] ) ) {
                $maxsize    = 2097152; // 2MB 
        
                if(($_FILES['image']['size'] >= $maxsize) || ($_FILES["image"]["size"] == 0)) {
                    $message = 'File too large. File must be less than 2 megabytes.'; 
                    echo '<script type="text/javascript">alert("'.$message.'");</script>'; 
                }
        
                // save file to Parse
                $file = ParseFile::createFromData( file_get_contents( $_FILES['image']['tmp_name'] ), $_FILES['image']['name']  );
                $file->save();
            }
        

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 2012-04-26
          • 2011-12-05
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2015-01-20
          • 2010-10-17
          相关资源
          最近更新 更多