PHP文件传输错误3

时间:2018-08-14 22:03:54

标签: php file http

我正在开发一个将“自制” HTTP传输发送到我的网页的应用程序。

"POST /file.php HTTP/1.0\r\n"
"Host: xxxx.com\r\n"
"Content-type: multipart/form-data; boundary=\"Abcdefghijklmnopqrstuvwxyz\"\r\n"
"Content-Length:163\r\n"
"\r\n"
"--Abcdefghijklmnopqrstuvwxyz\r\n"
"Content-Disposition: form-data; name=\"file\"; filename=\"myfile.txt\"; content-Type:text/plain\r\n"
"\r\n"
"test"
"--Abcdefghijklmnopqrstuvwxyz--\r\n"
"\r\n"

这是我的HTTP POST请求。似乎很好,但是当我执行请求并得到响应时,PHP脚本文件在文件“ 3”上指示错误。 意思是“ UPLOAD_ERR_PARTIAL”,但我不知道为什么它指示这样的消息。有效负载长度与Content-Length值匹配。

你能帮我吗? 谢谢。

1 个答案:

答案 0 :(得分:1)

您的POST请求的问题是边界语法中缺少一个CRLF。

multipart / form-data在RFC7578中定义 Section 4.1中对边界语法的描述如下:

  

与其他多部分类型一样,这些部分用   边界定界符,使用CRLF,“-”和   “边界”参数。

让我们检查一下您当前的POST请求。

POST /file.php HTTP/1.0
Host: xxxx.com
Content-type: multipart/form-data; boundary="Abcdefghijklmnopqrstuvwxyz"
Content-Length: 163

--Abcdefghijklmnopqrstuvwxyz
Content-Disposition: form-data; name="file"; filename="myfile.txt"; content-Type:text/plain

test--Abcdefghijklmnopqrstuvwxyz--

根据规范,最后一行应为两行。 在每个边界之前必须始终有一个CRLF和-,以便最后一行应如下所示:

test
--Abcdefghijklmnopqrstuvwxyz--

因此可接受的POST请求是这样的:

POST /file.php HTTP/1.0
Host: xxxx.com
Content-type: multipart/form-data; boundary="Abcdefghijklmnopqrstuvwxyz"
Content-Length: 165

--Abcdefghijklmnopqrstuvwxyz
Content-Disposition: form-data; name="file"; filename="myfile.txt"; content-Type:text/plain

test
--Abcdefghijklmnopqrstuvwxyz--

我之所以称其为“可接受”,是因为实际上还有另一个错误,但这是次要的。 我的服务器只是忽略了小错误,并毫无问题地接受了请求。