当前位置: 首页 > 编程笔记 >

PHP如何通过表单直接提交大文件详解

燕博文
2023-03-14
本文向大家介绍PHP如何通过表单直接提交大文件详解,包括了PHP如何通过表单直接提交大文件详解的使用技巧和注意事项,需要的朋友参考一下

前言

我想通过表单直接提交大文件,django 那边我就是这么干的。而对于 php 来说,我认为尽管可以设置最大上传的大小,但最大也无法超过内存大小,因为它无法把文件内容都放到 php://input 里面。直到我试了一下。

下面话不多说了,来一起看看详细的介绍吧

试验

我创建内存 256M 的虚拟机,通过表单直接上传 2.4G 的文件,发现居然可以,挺惊讶的:

后端是 nginx + php 的方式。反正有关 php.ini 里面需要设置的给它足够大:

# pip.ini
post_max_size = 100000M
upload_max_filesize = 100000M

nginx 在 http 块中添加:

# nginx.conf
client_max_body_size 100000m;

难道 PHP 进化了?我把其他版本试了一下,发现 PHP7.0 及其以上的才能成功,5.6 的就不行了,请求会中断 。

PS : php5 不能上传大文件是因为 32 位的锅,导致上传大于 2G 的文件会有问题。

文件 4G 多的时候又不行了,不知道哪里还需要设置:

改用apache试试

apache 我得用本地的 wamp 来。httpd.conf 需要设置:

# httpd.conf
LimitRequestBody 83886080000

apache 版本,一样得7.0以上才能直接上传大文件,但apache可以上传 4G 多的文件,不清楚为什么,难道因为我本地的内存比较大?

本机内存 8G ,于是我试了上传个 25G 的文件,也是没问题的:

可以可以,很好很强大。

总结

我第一个感觉就是 php 变强了,既然能这么方便上传大文件了,在没有要求进度条的需求里,就可以这么来做了,还蛮方便的。

好了,以上就是这篇文章的全部内容了,希望本文的内容对大家的学习或者工作具有一定的参考学习价值,如果有疑问大家可以留言交流,谢谢大家对小牛知识库的支持。

 类似资料:
  • 问题内容: 我有一个链接而不是“提交”按钮: 单击后可以提交表单吗? 问题答案: 最好的方式 最好的方法是插入适当的输入标签: 最好的JS方式 由封闭后的JavaScript代码事件(只选择了向后兼容性如果你还没有这样做: 简单而不可取的方式(以前的答案) 在链接和表单中添加一个属性: 所有方式 无论选择哪种方式,最终都可以调用(标记的DOM对象在哪里)。 您还必须绑定这样的事件处理程序,该事件处

  • 问题内容: 我想使用JSoup将一些文本提交到此表单中。我将如何去做呢? 问题答案: 看一下jsoup.connect方法和Connection接口。 准备好要提交的文本后,可以将其作为表单提交发布到URL。 例如: 返回的对象将是帖子的结果页面。

  • 本文向大家介绍如何通过表单下载文件?相关面试题,主要包含被问及如何通过表单下载文件?时的应答技巧和注意事项,需要的朋友参考一下 form 表单的action设置为接口地址,设置method为post/get : 根据需要传递的参数设置多个: 如果请求的接口不需要参数,建议设置一个input,否则可能会引起报错。 submit提交到后台

  • 问题内容: 所以假设我有3种形式 每个表单都有自己的提交按钮 现在假设我有另一种形式 其唯一的功能是同时提交所有其他3种形式。…现在这里是约束: 当submitAll提交后,它必须使用Ajax这样做,并且最好通过POST将输入的数据从所有其他3种形式转发到processor.php processor.php需要能够区分输入到哪种形式…然后分别处理每种形式的输入 我的问题是..什么是使proces

  • 问题内容: 我正在使用以下jQuery代码通过AJAX提交表单。 代码完美运行,没有ajax。 但是,如果我通过Ajax加载表单,则无法正常工作。 我认为这是因为JavaScript加载后通过ajax加载了表单。 有什么办法吗? 问题答案: 如果使用jQuery 1.7+,则可以尝试使用.on()委托事件并绑定到具有相同类的所有将来的表单。尝试查找没有动态插入的最接近的父代,而不是$(docume

  • 问题内容: 使用PHP,我试图提供由于授权问题而不在网络可访问目录中的大文件(最大可能为200MB)。当前,我使用一个调用以及一些标头来提供文件,但是似乎PHP在发送之前先将其加载到内存中。我打算在共享托管服务器上进行部署,这将不允许我使用太多内存或添加自己的Apache模块(例如X- Sendfile)。 出于安全原因,我不能让我的文件位于可通过网络访问的目录中。有人知道我可以在共享主机服务器上