Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/apache/9.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
php与x2019之间的关系;s内存限制、上载最大文件大小和发布最大文件大小_Php_Apache_Configuration_File Upload - Fatal编程技术网

php与x2019之间的关系;s内存限制、上载最大文件大小和发布最大文件大小

php与x2019之间的关系;s内存限制、上载最大文件大小和发布最大文件大小,php,apache,configuration,file-upload,Php,Apache,Configuration,File Upload,底线: 我是否需要关注设置post\u max\u filesize>>内存限制 详细信息: 建议上传的文件不需要符合php的内存限制。建议整个帖子应该在php的内存限制内 我发现这些文件令人惊讶,我希望有人能详细说明。例如,以以下php配置为例: ; config A memory_limit = 50M upload_max_filesize = 100M post_max_filesize = 1000M max_file_uploads = 10 及 通过这些配置,我希望能够:

底线
我是否需要关注设置
post\u max\u filesize
>>
内存限制

详细信息
建议上传的文件不需要符合php的内存限制。建议整个帖子应该在php的内存限制内

我发现这些文件令人惊讶,我希望有人能详细说明。例如,以以下php配置为例:

; config A
memory_limit = 50M
upload_max_filesize = 100M
post_max_filesize = 1000M
max_file_uploads = 10    

通过这些配置,我希望能够:
  • 将10x100mb的文件上载到服务器A,
  • 并将100x100MB的文件上载到服务器B。
    • 我还认为:
      • 处理上载到服务器A的10个文件中的任何一个都是一个问题(50米包中有100毫秒的文件…。
      • 处理上载到服务器B的100个文件中的任何一个都可以(10<50).
      当我用不太圆润但相当相关的数字进行实验时,我发现这些预期是正确的

      这种经验会让我说“一般来说,内存限制应该大于上传的最大文件大小”;相反,php说:

      一般来说,内存限制应该大于
      post\u max\u size

      为什么?如果不是,会发生什么

      当我的php代码被执行时,我看不到任何证据表明所有发布的文件都在内存中。在我看来,我所拥有的只是一个$\u FILES数组,其中包含指向磁盘上专用文件的路径。在我能够反思环境之前,php是否在内存中占据了全部位置?我是否需要关注设置
      post\u max\u filesize
      >>
      内存限制

      旁白:
      违反手册规则不会导致服务器严重损坏(w/php5.3 apache2.2 debian 6)

      我需要担心吗 设置post_max_filesize>> 内存限制


      只有当您计划将整个文件读入内存,并且您读入的文件大于分配给PHP的空间时(即
      内存限制
      ),在这种情况下,您的内存将耗尽。

      我个人的经验是,您必须有一个高于post\u max\u大小的内存限制并上载\u max\u大小

      post_max_size指的是所有已发布的数据。这包括文件本身可能包含的任何表单字段。upload_max_size是文件在该上载中可允许的最大大小

      比如说。如果post_max_大小为10mb,upload_max_大小为1mb,您可以上载9个文件,每个文件大小为1mb,为什么是9个文件?因为POST数据的一部分是文件元数据-文件名、mimetype、文件大小等。。。所有这些都会占用一些空间,因此9个文件实际上会占用9.01MB左右的空间。剩下的0.99对于另一个文件来说太小了,所以你不能上传第10个文件,即使它符合上传最大大小限制

      至于内存限制,您不仅需要为上传的文件留出足够的“空间”,还必须记住,此限制适用于整个脚本。10mb的内存限制只允许上传9MB的文件,因为PHP本身以及所有相关的代码和库已经占用(比如)1MB的空间

      即使这些文件没有保存在内存中,它们也会尽快转储到临时文件中,并通过STDIN从Apache传递到PHP。PHP必须从该流中读取文件,并将它们复制到$\u文件数组的
      ['tmp\u name']
      部分中使用的临时文件中


      无论出于何种原因,PHP似乎基本上是在执行“file_get_contents()”并将文件批量存储,而不是执行流式复制。因此需要超过允许的最大文件大小的内存限制。

      PHP将接受单独小于
      upload\u max\u filesize
      且总共小于
      post\u max\u size
      字节的上传文件。PHP文档在
      内存限制方面是错误的,它不需要保存文件内容

      以下配置适用于Apache2模块和CGI,并接受小于1G的文件

       upload_max_filesize = 1G
       post_max_size = 1G
       memory_limit = 32M
      

      我认为这个建议源于这样一个事实:如果您尝试对所有文件(例如存储到变量)进行任何处理,那么您将超过PHP的内存限制。不过,我不确定,所以我不会把这当作一个真正的答案。上传的文件不在POST系统中,也不在_文件系统中,php不会提供这些文件的全部内容。上传时,您必须将其重新加载,因此“仅当您计划将整个文件读取到内存中时”这似乎大致支持了我的建议,即文件大小而不是文章大小应该是相关的。您是否愿意承认文档是错误的,post大小和内存限制实际上只与用例和从/tmp读取的最大发布文件的大小有关?尽管我的设置在真空情况下有点像球形鸡,但这是有意的,以避免对字段大小的切题讨论,上传时间等。你能提供关于php行为的更多细节,并解释我是如何拥有一个明显与你的断言相矛盾的工作系统的吗?
       upload_max_filesize = 1G
       post_max_size = 1G
       memory_limit = 32M