关于应用
我正在使用PHP开发一款电子商务应用程序。为了保护URL的安全,在PHP后面保留产品下载链接。有一个名为download.php的文件,它通过GET接受几个参数并根据数据库验证它们。如果一切顺利,它将使用PHP中的readfile()函数提供文件。
问题描述
当要传递给readfile()的文件大于php.ini中设置的内存限制时,问题就出现了。由于许多用户将在共享主机上使用此应用程序,因此我们不能依靠修改php.ini设置。
在我们寻找解决方法的过程中,我首先认为我们可以使用while循环中的fread()调用,但似乎这也会带来问题,正如在在PHP中可靠地下载大文件中所述。
因此,我的最佳选择是检测/检查服务器是否支持X-Accel-Redirect(在Nginx的情况下)/ X-Sendfile(在Apache的情况下)
如果服务器支持X-Accel-Redirect / X-Sendfile,则可以使用它们,并且在else块中,我可以让系统管理员知道php.ini实施的内存限制
理想情况下,我希望在可能的情况下使用服务器端支持,例如X-Accel-Redirect / X-Sendfile,如果无法使用,则希望拥有读取文件而不使用readfile()的备用代码。
我还不确定readfile()和while循环中的fread()有何不同,但似乎while循环会产生问题,正如在PHP中可靠地下载大文件中所建议的那样。
希望得到一些帮助、建议、代码、指导。
感谢您的阅读。