php - 在客户端检测文件上传大小?

标签 php html file-upload

我正在使用 PHP 进行文件上传。在PHP manual它显示了一个使用 MAX_FILE_SIZE 隐藏字段的示例,表示它将在客户端(即浏览器)检测文件是否太大。

我刚刚在 Firefox、Chrome 和 IE 中尝试了这个示例,但它不起作用。始终上传文件,即使它比指定的隐藏字段大很多。

顺便说一句,如果文件大于 MAX_FILE_SIZE,则调用 move_uploaded_file 不起作用,因此变量似乎对服务器端有影响,但对客户端没有影响-边。

最佳答案

MAX_FILE_SIZE

读这个:

...在http://pk.php.net/manual/en/features.file-upload.post-method.php和其他格式的等效位置,说明 浏览器将 MAX_FILE_SIZE 表单字段的值放入 帐户。

此信息在网络和书籍的其他地方重复出现,但 似乎源自 PHP 文档(它没有出现在 其他服务器端技术的条款)。

在任何 HTML、HTTP 或相关规范中都没有任何内容表明 是这种情况(特别是引入文件的 RFC 1867 上传到 HTML 没有提到它,所以它甚至不是一个拼凑的案例 这是在第一个 RFC 中提到的,然后被删除)也没有 在 HTML 规范的上下文中有意义(没有任何内容表明 该特定隐藏输入与文件输入之间的关系)。 我能在其中任何一个中找到的关于隐藏字段的唯一陈述是 安全注意事项部分中针对用户代理的警告 任何与文件相关的操作都基于隐藏文件中提到的任何内容 字段。

似乎没有浏览器将此作为“扩展”执行。确实如此 隐藏字段可能还有其他可能的含义 在处理多个文件上传的应用程序中的那个名字,它会有 任何人都被认为是设计缺陷。

我认为主流浏览器中没有这样的机制(如果有的话) 根本不应该)而且确实不应该。对它的引用应该从 文档。

我会进一步建议,因为这个想法是从这个传播的 其他地方的文档,关于它不起作用的注释应该是 添加。

如果需要或需要一种机制来更快速地处理此问题 某种文件处理问题然后它需要允许 PHP 的功能 在请求完成之前拦截正在上传的流,这 与本文档的建议完全不同 应该处理,即使这是真的......


以下代码来自 swfUpload php 实现:

// Check post_max_size (http://us3.php.net/manual/en/features.file-upload.php#73762)
    $POST_MAX_SIZE = ini_get('post_max_size');
    $unit = strtoupper(substr($POST_MAX_SIZE, -1));
    $multiplier = ($unit == 'M' ? 1048576 : ($unit == 'K' ? 1024 : ($unit == 'G' ? 1073741824 : 1)));

    if ((int)$_SERVER['CONTENT_LENGTH'] > $multiplier*(int)$POST_MAX_SIZE && $POST_MAX_SIZE) {
        header("HTTP/1.1 500 Internal Server Error");
        echo "POST exceeded maximum allowed size.";
        exit(0);
    }
// Validate the file size (Warning the largest files supported by this code is 2GB)
    $max_file_size_in_bytes = 2147483647;           
    $file_size = @filesize($_FILES[$upload_name]["tmp_name"]);
        if (!$file_size || $file_size > $max_file_size_in_bytes) {
            HandleError("File exceeds the maximum allowed size");
            exit(0);
        }

关于php - 在客户端检测文件上传大小?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2934788/

相关文章:

c# - File.copy() 方法不支持给定路径的格式错误

PHP 文件上传到 linux cPanel 显示成功,但找不到文件

php - mysql_fetch_assoc 以错误的顺序返回结果

php - PHP MVC 框架是否有任何替代方案可以被视为最佳实践?

php - 我怎样才能清理这个 SELECT 查询?

javascript - 显示标题标题和图像 slider

php - 如何验证使用 php 上传的文件不包含可执行二进制文件?

java - 页面上有两个字符集标签,该采用哪个?

javascript - 动态行和表

ssl - 将文件从 Gentran 服务器上传到 box.com FTPS