如何在上传过程中停止超大文件的上传?

发布于 2024-12-29 20:02:38 字数 289 浏览 0 评论 0原文

我使用的是apache、PHP。

所以,对于php,即使我设置了最大文件大小,如果有人上传一个巨大的文件,它也会将整个文件上传到服务器,然后PHP返回错误。对吗?

我希望 Web 服务器或 PHP 在文件大小或请求大小大于特定大小时停止。

有办法做到吗?我记得类似设置 post_max_size 或在 apache.conf 中设置某些内容,但不确定当文件超过最大限制时它是否会停止。

  • 我不相信客户端验证。所以,我正在寻找 apache 或 php 级别的解决方案。 :)

I'm using apache, PHP.

So, for php, even I set max file size, if someone upload a huge file, it will upload the whole thing to server, and then PHP return error. is that right?

I would like the web server or PHP to stop when the file size or the request size is larger than certain size.

is there a way to do it? I remember something like setting post_max_size or setting something in apache.conf but not sure if it will stop when the file goes over the max limit.

  • I don't trust client side validation. so, I'm looking for either apache or php level solution. :)

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(7

情绪 2025-01-05 20:02:38

Apache的LimitRequestBody,afaik,它只是在超过时停止连接....

Apache's LimitRequestBody, afaik, it just stops the connection when going over....

筱武穆 2025-01-05 20:02:38

最大执行时间和最大输入时间
这些设置定义脚本的最长生命周期以及脚本接受输入应花费的时间。如果传输数兆字节的数据,则 max_input_time 应该相当高。您可以通过在脚本中调用 set_time_limit() 函数来覆盖 ini 文件中 max_input_time 的设置。

这取自 http://www.radinks.com/upload/config.php

如果您为这些 ini 条目设置较低的值,则脚本应该在上传完成之前超时

max_execution_time and max_input_time
These settings define the maximum life time of the script and the time that the script should spend in accepting input. If several mega bytes of data are being transfered max_input_time should be reasonably high. You can override the setting in the ini file for max_input_time by calling the set_time_limit() function in your scripts.

This is taken from http://www.radinks.com/upload/config.php

If you set lower values for these ini entries the script should timeout before the upload has completed

忆梦 2025-01-05 20:02:38

无法从服务器端阻止此操作 - 在 PHP 决定是否拒绝文件之前,文件仍将被上传。您需要在客户端添加该检测。虽然您无法使用常规 HTML 表单执行此操作,但 Flash 上传程序可以在上传开始之前找出文件大小。

在服务器端,您无法使用 PHP 做任何有用的事情 - 在 PHP 有机会说“不”之前,文件总是已经完全上传。要阻止上传(即在 POST 过程中断开客户端连接),您需要在堆栈下方使用一些 Web 服务器魔法。佩尔巴尔有能力做到这一点。编写自己的 Apache 模块是一种(强力)解决方案。如果您担心大上传会占用 Web 服务器资源,那么在主 Web 服务器前面使用任何类型的轻量级代理都是解决方案。

这实际上取决于您想要限制大型上传的原因。如果是为了节省用户时间,只需添加指定最大文件大小的消息即可。如果是服务器资源,在服务器前面使用轻量级代理。如果是别的东西,那是什么?

It's not possible to stop this from the server side - the file will still be uploaded before PHP decides whether to reject it. You'd need to add that detection on the client side. While you can't do this with a regular HTML form, flash uploaders can find out the filesize before the upload starts.

On the server side, you can't do anything useful with PHP - the files have always already been fully uploaded before PHP has a chance to say 'no'. To block upload (that is, disconnect the client part way through the POST), you'll need some web server magic lower down the stack. Perlbal is capable of doing this. Writing your own Apache module is a (brute force) solution. Using any kind of lightweight proxy in front of your main web server is the solution if you're worried about big uploads tying up web server resources.

It really depends why you want to limit large uploads. If it's to save users time, just add messaging that specifies max file size. If it's server resources, use a lightweight proxy in front of the server. If it's something else, well, what is it?

甜心 2025-01-05 20:02:38

使用名为 MAX_FILE_SIZE 的隐藏字段,其值指示最大文件大小(以字节为单位)。 请参阅本页上的示例 #1进一步的信息。

<!-- 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>

Use a hidden field called MAX_FILE_SIZE with a value indicating the max file size in bytes. See Example #1 on this page for further information.

<!-- 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>
以酷 2025-01-05 20:02:38

这是一个简单的 jquery 解决方案 如何使用 jQuery 检查文件输入大小?
但客户端验证很容易被黑客攻击。

Here is a simple jquery solution How to check file input size with jQuery?
But client side validation can be hacked easily.

辞旧 2025-01-05 20:02:38

在 php.ini 中使用 $_FILES

if($_FILES['name']['size'] > $limit){
// continue;
}

Use $_FILES in php.

if($_FILES['name']['size'] > $limit){
// continue;
}
红ご颜醉 2025-01-05 20:02:38

使用 PHP 5.5 中的会话进度功能为每次上传使用计时器(超时),并测量每个上传大小的平均时间。

Use a timer (timeout) for each upload with a session progress feature in PHP 5.5 and measure the average time per size of the upload.

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文