PHP   发布时间:2022-04-09  发布网站:大佬教程  code.js-code.com
大佬教程收集整理的这篇文章主要介绍了如何在PHP中检测X-Accel-Redirect(Nginx)/ X-Sendfile(Apache))?大佬教程大佬觉得挺不错的,现在分享给大家,也给大家做个参考。
关于申请

我正在PHP中使用电子商务应用程序.为了保持URL的安全,产品下载链接保留在PHP之后.有一个文件,例如download.PHP,它通过GET接受几个参数,并对数据库进行验证.如果一切顺利,它在PHP中使用readfile()函数提供文件.

关于问题

现在问题出现在要传递给readfile()的文件大于在PHP.ini中设置的内存限制
由于此应用程序将被许多用户在共享托管中使用,因此我们无法继续更改PHP.ini设置.

在我们努力找到解决方法的时候,我第一次以为我们可以在while循环中执行fread()调用,但是似乎会强加这些问题以及这里突出显示Sending large files reliably in PHP

所以我最好的选择是检测/检查服务器是否支持x-accel-redirect(在Nginx的情况下)/ X-Sendfile(在Apache的情况下)

如果服务器支持x-accel-redirect / X-Sendfile,我可以使用它们,而在其他块我可以让系统管理员了解PHP.ini执行的内存限制

理想情况下,我想尽可能地使用像x-accel-redirect / X-Sendfile这样的服务器端支持,如果这样做不起作用 – 我想要有一个备用代码来读取没有readfile()的文件.

我还不确定while循环中的readfile()和fread()如何不同,但是似乎while循环会创建问题,再次如Sending large files reliably in PHP中的建议

希望得到一些帮助,建议,代码,指导.

谢谢阅读.

要检测是否安装了mod_xsendfile @R_419_1170@,可以尝试以下代码
if function_exists('apache_get_modules') 
      && in_array('mod_xsendfile',apache_get_modules()) { 
  header("X-Sendfile"); 
}

但这个代码只是检查模块是否安装,如果安装错误,可能会导致错误

另一种可能的方法是通过Apache的.htaccess设置服务器范围的变量:

<IfModule mod_xsendfile.c>
  <Files *.PHP>
    XSendFile On
    XSendFileAllowAbove On
    SetEnv MOD_X_SENDFILE_ENABLED 1
  </Files>
</IfModule>

检查它形式PHP代码

if ($_SERVER['MOD_X_SENDFILE_ENABLED']) {
  Header(...)
}

通常的想法与Nginx相同 – 只需将状态变量的值通过http头或CGI / FastCGI变量传递给后端.

大佬总结

以上是大佬教程为你收集整理的如何在PHP中检测X-Accel-Redirect(Nginx)/ X-Sendfile(Apache))?全部内容,希望文章能够帮你解决如何在PHP中检测X-Accel-Redirect(Nginx)/ X-Sendfile(Apache))?所遇到的程序开发问题。

如果觉得大佬教程网站内容还不错,欢迎将大佬教程推荐给程序员好友。

本图文内容来源于网友网络收集整理提供,作为学习参考使用,版权属于原作者。
如您有任何意见或建议可联系处理。小编QQ:384754419,请注明来意。