从客户端文件上传到服务器到 PHP 将上传的文件保存在 tmp 文件中的过程是什么?
即从这一点(文件上传表单):
<!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']
在将文件保存到 tmp 文件之前,是否有任何文件内容在任何时候读入内存?
上传 3 个文件enctype="multipart/form-data"
将发送如下内容:
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>
如果文件内容未读入内存,如何在不将任何文件内容读入内存的情况下对其进行解析?是否在创建另一个临时文件的地方使用了硬盘空间,该文件的作用类似于解析它的内存?
如果将文件内容读入内存,那么大文件如何处理,例如上传的文件大小为10GB,但内存只有2GB?
您不需要将完整的数据流读入内存来解析它。在这种情况下,PHP 甚至不需要理解实际的附件代码:它所要做的就是将它转储到一个位于upload_tmp_dir的临时文件中。您可以设计此过程以使用几乎尽可能少的内存,以换取 I/O 和 CPU 周期。
我不知道 C 代码的实际实现,但我记得我在学校用有限状态机编写了一个简单的解析器,用简单的英语来说,它是一组布尔变量,告诉你你在哪里(状态)和随着您不断阅读更多输入内容而获得更新。我可以设想一个文件上传解析器,它以块的形式读取输入套接字:
-----------------------------735323031399963166993862150
边界时,它可以确定有一个新的 POST 字段。filename
属性时,它可以确定该字段是一个文件Content-Disposition
。等等。
本文收集自互联网,转载请注明来源。
如有侵权,请联系 [email protected] 删除。
我来说两句