Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/templates/2.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-从上载客户端文件到PHP将其保存在tmp文件中的点的过程是什么_Php_File Upload - Fatal编程技术网

PHP-从上载客户端文件到PHP将其保存在tmp文件中的点的过程是什么

PHP-从上载客户端文件到PHP将其保存在tmp文件中的点的过程是什么,php,file-upload,Php,File Upload,从将客户端文件上载到服务器,到PHP将上载的文件保存到tmp文件,会发生什么过程 即从这一点(文件上传表单): 如果没有将文件内容读入内存,如何在不将任何文件内容读入内存的情况下对其进行解析?在创建另一个临时文件时是否使用了硬盘空间,该临时文件的作用类似于解析它的内存 如果将文件内容读入内存,那么如何处理大型文件,例如,如果上载的文件大小为10GB,但内存仅为2GB?您不需要将完整的数据流读入内存来解析它。在这种情况下,PHP甚至不需要理解实际的附件代码:它所要做的就是将其转储到一个临时文件中。

从将客户端文件上载到服务器,到PHP将上载的文件保存到tmp文件,会发生什么过程

即从这一点(文件上传表单):

如果没有将文件内容读入内存,如何在不将任何文件内容读入内存的情况下对其进行解析?在创建另一个临时文件时是否使用了硬盘空间,该临时文件的作用类似于解析它的内存


如果将文件内容读入内存,那么如何处理大型文件,例如,如果上载的文件大小为10GB,但内存仅为2GB?

您不需要将完整的数据流读入内存来解析它。在这种情况下,PHP甚至不需要理解实际的附件代码:它所要做的就是将其转储到一个临时文件中。您可以将这个过程设计为使用几乎尽可能少的内存,用它来换取I/O和CPU周期

我不知道C代码的实际实现,但我记得在学校里,我在a的帮助下编写了一个简单的解析器,用简单的英语,它是一组布尔变量,告诉你在哪里(状态),并随着你不断阅读更多的输入而更新。我可以设想一个文件上传解析器,它以块的形式读取输入套接字:

  • 当它找到
    ------------------------------------735323031399963166993862150
    边界时,它可以确定有一个新的POST字段
  • 内容处置
    标题中有
    文件名
    属性时,它可以确定字段是文件
  • 它可以确定文件在标题后面有空行时启动,并创建一个临时文件
  • 它可以一直将输入附加到临时文件,直到再次找到边界

等等。

您无需将完整的数据流读入内存即可对其进行解析。在这种情况下,PHP甚至不需要理解实际的附件代码:它所要做的就是将其转储到一个临时文件中。您可以将这个过程设计为使用几乎尽可能少的内存,用它来换取I/O和CPU周期

我不知道C代码的实际实现,但我记得在学校里,我在a的帮助下编写了一个简单的解析器,用简单的英语,它是一组布尔变量,告诉你在哪里(状态),并随着你不断阅读更多的输入而更新。我可以设想一个文件上传解析器,它以块的形式读取输入套接字:

  • 当它找到
    ------------------------------------735323031399963166993862150
    边界时,它可以确定有一个新的POST字段
  • 内容处置
    标题中有
    文件名
    属性时,它可以确定字段是文件
  • 它可以确定文件在标题后面有空行时启动,并创建一个临时文件
  • 它可以一直将输入附加到临时文件,直到再次找到边界
等等

<!doctype html>
<html>
    <h1>Upload new File</h1>
    <form method="post enctype=multipart/form-data" action="example.php">
        <input type="file" name="file">
        <input type="submit" value="Upload">
    </form>
</html>
<?php 

$filePath = $_FILES['file']['tmp_name']
POST / HTTP/1.1
[[ Less interesting headers ... ]]
Content-Type: multipart/form-data; boundary=---------------------------735323031399963166993862150
Content-Length: 834

-----------------------------735323031399963166993862150
Content-Disposition: form-data; name="text1"

text default...

-----------------------------735323031399963166993862150
Content-Disposition: form-data; name="file1"; filename="a.txt"
Content-Type: text/plain

Content of a.txt...

-----------------------------735323031399963166993862150
Content-Disposition: form-data; name="file2"; filename="a.html"
Content-Type: text/html

<!DOCTYPE html><title>Content of a.html.</title>