当用PHP处理文件上传时,数据被加载到内存中


When handling file upload with PHP is the data loaded into memory?

在PHP中使用普遍存在的文件上传范例时,例如:

<?php
if ($_FILES["file"]["error"] > 0)
  {
  echo "Error: " . $_FILES["file"]["error"] . "<br>";
  }
else
  {
  echo "Upload: " . $_FILES["file"]["name"] . "<br>";
  echo "Type: " . $_FILES["file"]["type"] . "<br>";
  echo "Size: " . ($_FILES["file"]["size"] / 1024) . " kB<br>";
  echo "Stored in: " . $_FILES["file"]["tmp_name"];
  }
?>

文件本身是否加载到内存中,或者$_FILES全局是否用作文件的引用?

如果文件没有加载到内存中,那么PHP文档中关于文件上传陷阱的这一行的目的是什么:

如果启用了内存限制,则可能需要更大的memory_limit。请确保将memory_limit设置为足够大

http://www.php.net/manual/en/features.file-upload.common-pitfalls.php

不,它没有加载到内存中——这将是真正的令人讨厌的事情。您可以通过读取$_FILES["file"]["tmp_name"],按照自己选择的方式将内容加载到内存中。

否,文件上传本身由web服务器处理。当然,web服务器需要为上传保留一些内存,但这只是读/写缓冲区大小较大时的内存。大概有点像4096字节。

文件上传后,web服务器会将上传文件的临时名称和其他一些信息填充到php中,php会在$_FILES中提供这些信息,但在内存中不会有上传的文件。