正确的方法来响应一个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来实现它是非常简单和方便的解决方案。

+0

实际上,在另一台服务器上托管文件并不安全,因为这是一个商业文件,不太了解ngix。 –

+0

文件将保存在您的服务器上。我想,你使用'Apache'(httpd)和PHP来运行你的web服务。所以'Apache' **是一个Web服务器,就像'Nginx'一样,它只是用来响应HTTP请求的软件 – wormi4ok