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

安德鲁·T

从客户端文件上传到服务器到 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] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章

Arduino处理客户端无法将文件上传到PHP服务器

PHP文件上传错误tmp_name为空

通过nginx访问时,php在/ tmp / systemd-private-nABCDE / tmp中具有自己的/ tmp

文件存在于/ tmp中,但是PHP在CentOS上返回“没有这样的文件或目录”

为什么PHP 7.2 fopen(/ tmp,a)不写入文件?

PHP Curl丢弃cookie ant而不将其保存在cookie jar中

PHP / tmp文件在请求中间消失-有时

无法在Laravel中上传图片:““ C:\ xampp \ tmp \ php38A9.tmp”文件不存在或不可读。

PHPWord不将文件保存在/ tmp目录中

用php添加多个图像并将其保存在mysql中

如何返回存储在我的文件中的用户个人资料图片(保存在/ tmp文件夹中以将其放置在此处以进行临时提取)

/ tmp中以“ qipc”开头的文件是什么?

whysiyg保存在php文件中

Android客户端的PHP Web服务文件上传和下载逻辑

无法使用PHP在IE11中上传文件(UPLOAD_ERR_NO_TMP_DIR)

在PHP中:.htaccess文件是什么,它将做什么?

android使用异步Http客户端如何将多文件上传到服务器var php?

为什么我的tmp_file_upload文件不存在?我正在使用php 5.6

PHP文件上传正在创建以“ PHP”开头且扩展名为.tmp的文件名

从PHP项目的tmp文件夹下载CSV

如何从url获取图像并将其保存在mysql中作为BLOB?的PHP

将Access-Control-Allow-Origin标头添加到使用PHP客户端库上传的文件中

无法将媒体上传到服务器,出现 php tmp 文件夹错误

在html中显示qrcode而不将其保存在php中

我如何在 php 中访问 json 数组并将其保存在 .json 文件中

利用保存在 TXT 文件 (PHP) 中的数组数据

C++ [Libcurl] 从 php 服务器下载文件并将其保存在内存中

有没有办法通过 PHP 上传带有特定“tmp_name”的文件?

如何在php中重复从000到999的序列号并将其保存在txt文件中