我有一个 PHP 应用程序,但遇到了一些问题,某些页面需要很长时间才能加载。
几个小时后我发现了问题,但我不知道如何解决它。
问题似乎出在标题上Connection: keep-alive
。我使用了一个名为“Tamper Data”的 Firefox 插件,它允许你“篡改”标题和内容。一旦我使用该工具将连接标头更改为Connection: close
某些页面的延迟停止了。
在 PHP 中,我如何确保Connection: close
使用标头?
我尝试把header("Connection: close");
在 PHP 文件的顶部,然后重新加载页面。它仍然发送Connection: keep-alive
标头,而不是我要发送的标头。
我怎样才能实现我想要做的事情?
EDIT:我刚刚意识到,在这个子域上,大多数页面根本不发送内容长度标头。它仅在表单提交后立即发送,然后进行重定向。
EDIT 2:
这是页面:http://volunteer.essentialtransit.com/job/13/just-a-test-at-eta/ http://volunteer.essentialtransit.com/job/13/just-a-test-at-eta/
单击“立即申请”链接并填写一些随机 txt,无需附加文件。请注意,当您重定向回“作业”详细信息页面时,加载将需要很长时间。
您的问题与连接状态无关。它可能看起来与连接有关,因为 Apache 会自动为来自不同源的每个新请求生成一个新的子线程。通过保持活动状态,它将尝试重用前一个线程,该线程因 PHP 脚本(来自您的应用程序)而繁忙。实际上有点复杂,但这是基本的。请注意,正在发送“连接:关闭”,但它应该仅在脚本完成后(发送所有缓冲区)才关闭连接。
现在我将告诉您如何调试脚本。我这样做是因为如果您不解决问题并且获得更多流量,您的主机将因过度使用资源而将您踢出局。
So:
- Append
set_time_limit(5)
或更高版本以确认存在后台脚本问题
- 检查对本地资源的请求,仅在您的临时服务器上有效的请求(您可以使用 WireShark 来执行此操作)
- 检查外部请求、cURL、
file_get_contents()
呼叫,任何有超时的事情
- 对冗长的脚本进行基准测试和优化(您可以为此尝试 xdebug)
- 将所有 PHP 通知、警告和错误记录到文件中;你最多应该得到零错误
- 最后,对整个申请进行三次检查是一个很好的做法。第一个用于数据输入,第二个用于数据操作,第三个用于模块互连。但您应该关注无法返回输出的 AJAX 后台脚本
当然,跳过任何不适用的内容。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)