在PHP中读取整个POST请求之前读取请求标头

时间:2017-03-16 20:16:14

标签: php

我正在通过多次验证进行非常安全且紧凑的照片上传。一切都已建立。但是我坚持限制进入的体型。我正在使用自定义方法上传,图像通常在0.5-5 MB之间,我想强制5 MB作为限制。自定义方法用作带有一些参数的传递的加密JSON数组和带有图像b64字符串的JSON字段。

$size = (float)$_SERVER['CONTENT_LENGTH']/1024*1024;
if ($size > 5) {
    die('file too big');
}

这段代码并不完全符合我的要求,因为它等待直到收到整个正文,这使得这段代码无用。有没有办法在上传POST主体之前或期间读取CONTENT_LENGTH标头,以便在必要时删除它?

2 个答案:

答案 0 :(得分:1)

我认为即使在文件到达后端服务器之前解决此问题也更好。在代理级别,对于nginx,您可以使用client_max_body_size

答案 1 :(得分:0)

首先关于你的base64图片字符串:注意它大约37%source)。

<?php $head = array_change_key_case(get_headers("http://photojournal.jpl.nasa.gov/jpeg/PIA03239.jpg", TRUE)); $filesize = $head['content-length']/1024/1024; if ($filesize > 30) { print("File is bigger than 30 MB and file size is:\n" . $filesize . ' MB'); } else { print("File is smaller than 30 MB and file size is:\n" . $filesize . ' MB'); } ?> 中的2014年意味着什么?

这里的PHP代码只检索标题而不下载:

awk

作为证明,我输入的图像链接大小约为35 MB,下载需要一些时间,但代码会立即返回大小。