Php HTML上载最大文件大小似乎不起作用

Php HTML上载最大文件大小似乎不起作用,php,html,file-upload,Php,Html,File Upload,我想知道名为MAX\u FILE\u SIZE的隐藏字段应该如何工作 <form action="" method="post" enctype="multipart/form-data"> <!-- in byes must preceed file field --> <input type="hidden" name="MAX_FILE_SIZE" value="2097152" /> <input type="file"

我想知道名为
MAX\u FILE\u SIZE
的隐藏字段应该如何工作

<form action="" method="post" enctype="multipart/form-data">
    <!-- in byes must preceed file field -->
    <input type="hidden" name="MAX_FILE_SIZE" value="2097152" /> 
    <input type="file" name="upload" />

    <input type="submit" name="submit" value="Submit" />
</form>

我上传了一个4MB+的文件,但我没有收到来自客户端的警告(我不是说服务器端)。它应该做什么
MAX\u FILE\u SIZE

更新


好的,所以PHP应该施加一个“软”限制。但是使用它和在代码中检查像
$\u文件['upload']['size']<2000
这样的东西有什么区别吗?

它只应该将信息发送到服务器。它必须位于文件字段之前的原因是,它必须位于请求中的文件有效负载之前,服务器才能使用它来检查上载的大小

该值在服务器上的使用方式取决于您用于处理上载的内容。该代码被认为是用于特定的上传组件,该组件专门查找该值


在PHP中,似乎是使用这个字段值的方法。

实际上,它并不真正起作用。您可以在手册页面的一条注释中找到解释:


更新问题的答案:明显的区别在于服务器端检查是可靠的,客户端检查不是。

MAX\u FILE\u SIZE
以KB为单位,而不是字节。你是对的,它是以字节为单位的。因此,对于4MB的限制
convert 4MB字节{1024*(1024*4)}
try:

<input type="hidden" name="MAX_FILE_SIZE" value="4194304" /> 

更新1 正如其他人所解释的,你永远不会因此得到警告。它只是在服务器端施加一个软限制

更新2 回答你的子问题。是的,这是有区别的,你从不相信用户的输入。如果您想始终施加限制,则必须始终检查其大小。不要相信
MAX\u FILE\u SIZE
的功能,因为它可以由用户更改。所以,是的,你应该检查以确保它总是达到或超过你想要的大小


不同之处在于,如果您设置了2MB的
MAX_FILE_SIZE
,并且用户尝试上载4MB的文件,一旦他们大致达到上载的前2MB,传输将终止,PHP将停止接收该文件的更多数据。它将在文件数组中报告错误。

在我开始之前,请允许我强调,必须检查文件的大小 服务器端。如果不在服务器端检查,恶意用户可以覆盖客户端限制,并将大量文件上载到服务器。不要信任用户

我玩了一点PHP的MAX_FILE_SIZE,它似乎只有在上传文件后才起作用,这使得它不相关(同样,恶意用户可以很容易地覆盖它)

下面的javascript代码(在Firefox和Chrome中测试)基于,将在上传大文件之前警告用户(善良、无辜的用户),从而节省流量和用户时间:

<form method="post" enctype="multipart/form-data" 
onsubmit="return checkSize(2097152)">    
<input type="file" id="upload" />
<input type="submit" />


功能检查大小(最大检查大小)
{
var input=document.getElementById(“上传”);
//检查浏览器支持(可能需要修改)
if(input.files&&input.files.length==1)
{           
if(input.files[0].size>max\u img\u size)
{
警报(“文件必须小于”+(最大img_大小/1024/1024)+“MB”);
返回false;
}
}
返回true;
}

引入最大文件大小客户端隐藏表单字段是有意义的

ini可以限制上载的文件大小。因此,虽然脚本遵守php.ini施加的限制,但不同的HTML表单可以进一步限制上载的文件大小。因此,上传视频时,表单可能会将*最大大小限制为10MB,而上传照片时,表单可能会将*最大大小限制为1mb。同时,可以在php.ini中设置最大限制,假设10mb以允许所有这些

虽然这不是告诉服务器该做什么的简单方法,但它还是有帮助的

  • HTML没有任何限制。它只是转发服务器所有表单变量,包括MAX_FILE_SIZE及其值

希望它对某些人有所帮助。

对于那些对某些文件可以轻松上传而有些文件却无法上传感到惊讶的人来说,这可能是一个大小问题。我正在分享这个,因为我的PHP代码没有上传大文件,我一直认为它没有上传任何Excel文件。因此,如果您正在使用PHP,并且希望增加文件上载限制,请转到PHP.ini文件并进行以下修改:

  • upload\u max\u filesize=2M
改为

  • upload\u max\u filesize=10M

  • post_max_size=10M


或所需的尺寸。然后重新启动Apache服务器,上传将神奇地开始工作。希望这对其他人有所帮助。

PHP.net关于最大文件大小隐藏字段的说明。

MAX_FILE_SIZE隐藏字段(以字节为单位)必须位于文件输入字段之前,其值是PHP接受的最大文件大小。应始终使用此表单元素,因为它避免了用户在等待传输大文件时发现文件太大且传输失败的麻烦。请记住:在浏览器端愚弄此设置非常容易,因此永远不要依赖此功能阻止较大大小的文件。对于应用程序客户端的用户来说,它只是一个方便的特性。但是,最大大小的PHP设置(在服务器端)不能被愚弄


我用另一个“子”问题更新了我的问题。同样在PHP网站上,它说字节数。。。是的,你是对的,它是以字节为单位的。很早就下结论了。我用你的子问题的答案更新了我的答案。我想这意味着我仍然应该包括这一行,因为这意味着用户会更快地得到通知?嗯,是的,如果它在那里,它几乎会帮助你和用户,但不要依赖它的大小
<script type="text/javascript">
function checkSize(max_img_size)
{
    var input = document.getElementById("upload");
    // check for browser support (may need to be modified)
    if(input.files && input.files.length == 1)
    {           
        if (input.files[0].size > max_img_size) 
        {
            alert("The file must be less than " + (max_img_size/1024/1024) + "MB");
            return false;
        }
    }

    return true;
}
</script>