正确的方法来响应一个zip文件的请求
问题描述:
有一个从网站到我的网站使用curl/fopen的zip文件的请求。当请求到来时,我的站点中的特定php方法代码会在请求的url中获取所有查询字符串变量值,然后对这些请求进行各种检查以验证请求的有效性(有某种我不想要的检查写出于安全原因),然后下面的代码回复zip文件最后 -正确的方法来响应一个zip文件的请求
header("Expires: 0");
header('Content-Type: application/octet-stream');
header('Content-Disposition: attachment; filename="file name here"');
header('Content-Length: '.filesize("/home/ttcc/content.zip"));
header("Cache-Control: maxage=1");
header("Pragma: public");
header("Content-Transfer-Encoding: binary");
ob_clean();
flush();
if (!readfile("/home/ttcc/content.zip")) echo "some messages";
exit();
该代码的作品,但,这是正确的方式来响应一个zip文件?它有任何故障或安全漏洞吗?
答
如果在发送文件作为响应之前不需要任何额外的计算,则最好使用Web服务器来达到此目的。 Nginx将是一个很好的选择来提供静态文件。
所以请求不应该传递给PHP,并由Web服务器本身处理,如图像和其他静态文件。
如果您需要检查访问权限或针对同一请求的不同文件的响应,您可以使用您的代码并在其之前进行所有计算。通过PHP来实现它是非常简单和方便的解决方案。
实际上,在另一台服务器上托管文件并不安全,因为这是一个商业文件,不太了解ngix。 –
文件将保存在您的服务器上。我想,你使用'Apache'(httpd)和PHP来运行你的web服务。所以'Apache' **是一个Web服务器,就像'Nginx'一样,它只是用来响应HTTP请求的软件 – wormi4ok