我对PHP缓冲如何工作有点困惑.
假设你在PHP.ini中有一个PHP页面foo.PHP和output_buffering = 4096,Apache收到foo.PHP的get请求. foo.PHP开始执行,一旦准备好4096个字节,它们就会被发送到Apache. Apache开始向客户端发送这4096个字节.
这是我不明白的:当有一些讨厌的跟踪器标注,javascript或发送到浏览器的图像时会发生什么.浏览器被挂断了,并且暂时没有回到Apache,并坚持下去. Apache没有发布MySQL线程,它正在显示为“睡眠者”.这是正确的还是我完全不在这里?
解决方法:
你完全离开了基地:)
what happens when there’s a some nasty tracker callout, a
javascript or an image that was sent to the browser
这不会影响服务器端的任何内容.
每个通过PHP运行的请求都会
>编译所需的PHP文件以进行选择代码(除非缓存是一个)
>执行PHP选择代码
>将PHP opt-code的字符串结果返回给浏览器
您正在谈论的缓冲发生在步骤2和3之间.因此,让我们采取您的方案.
>请求提供PHP URL
>编码选择代码
> PHP执行开始并开始返回html字符串
>创建一个缓慢加载img标记的字符串
>> PHP继续向apache提供输出>为图像(或javascript代码,或其他等)制作单独的http请求
这是单独的请求,在这里无能为力.所有PHP和Apache正在做的是将HTML返回给浏览器.此HTML可能会生成一个img或javasript标记,该标记将回调到同一个Web服务器,但这些请求将与为现有页面生成HTML的请求分开处理.