小编row*_*att的帖子

在Apache/Nginx设置中刷新输出缓冲区

我希望我正在开发的网页的页面内容在下载时显示在屏幕上.在我的测试/开发环境中,这可以使用PHP flush()命令按预期工作.

但是,我的生产设置(WPEngine)在Apache前面使用Nginx代理,而flush()不再起作用(也没有任何其他输出缓冲命令).当我想通过发送价值4k的空白来刷新时,我已经能够通过故意填充缓冲区来获得所需的行为.

然而,这感觉就像一个黑客,并且有问题的页面需要刷新100次或更多次,因此这会为下载的总数据增加相当大的数量.

有没有办法通过发送控制字符和/或设置HTTP标头来向Nginx发送信号来刷新缓冲区(或根本不是缓冲区),这样我就可以避免发送其他不必要的空格了?

由于WPEngine是托管托管环境,因此我无法对服务器设置进行任何更改.因此,例如,通过向nginx服务器配置添加指令来关闭Nginx缓冲不是一种选择.

我目前这样做的方式如下: -

<?php
//turn off server content compression for this page
header('Content-Encoding: none;');

//turn off PHP output buffering
ob_end_flush();

//make padding to fill buffer
$buffer = str_repeat(" ", 4096*8);

$start = time();

do
{
    printf( 'Time: %s secs<br>', time() - $start );
    echo $buffer;
    sleep(1);
} while( (time() - $start) < 10 );
?>
Run Code Online (Sandbox Code Playgroud)

php nginx output-buffering

7
推荐指数
2
解决办法
5079
查看次数

WordPress站点上的APC缓存碎片

我最近在Web服务器(Centos 5.7,PHP 5.3,1.5Gb RAM)上安装并激活了APC缓存,该服务器主要用于中等流量(30k唯一访问者/ mo)运行W3Total Cache的WordPress站点,该站点设置为使用APC数据库和对象缓存(页面,缩小使用磁盘).

服务器的APC信息页面显示存在严重的碎片.例如,重新启动httpd后,11小时后碎片率高达75%,而且几天后我已经看到它达到100%.我从未见过超过40%的高速缓存使用,服务器一直运行在大约400Mb内存,1100Mb空闲( - /+缓冲区/缓存,由free -m报告).所以它似乎没有导致碎片的内存不足.

我从默认的APC和W3TC配置开始,尝试了以下更改的各种组合: -

  • apc.ttl减少到1800(从7200)
  • apc.user_ttl设置为0(唯一使用用户缓存的是W3TC并设置自己的TTL)
  • W3TC超时从180秒增加到7200秒
  • apc.filters阻止timthumb

这些变化似乎都没有太大的区别,尽管到目前为止,Google网站站长工具测量的主观性能和页面加载时间似乎都没有受到任何影响.

我应该担心吗?虽然目前的性能表明没有,但我宁愿在服务器负载/站点流量上升之前对其进行排序.如果引起关注,我可以采取哪些措施来解决?

编辑: - 这是完整的apc.ini配置文件: -

; Enable apc extension module
extension = apc.so

; Options for the APC module version >= 3.1.3
; See http://www.php.net/manual/en/apc.configuration.php

; This can be set to 0 to disable APC. 
apc.enabled=1
; The number of shared memory segments to allocate for the compiler cache. 
apc.shm_segments=1
; The size of each shared memory segment, with M/G suffixe
apc.shm_size=256M
; …
Run Code Online (Sandbox Code Playgroud)

php wordpress apc

3
推荐指数
1
解决办法
5508
查看次数

从裸远程仓库克隆时丢失提交

我有一个小的 PHP 库,我编写它来支持各种 Web 项目。这些项目都在 git 中,库是每个 repos 的子模块。Web 项目使用 git push 部署,部署脚本需要访问库子模块 repo 以更新库。

有时对于任何给定的项目,库都会有自己的分支,直到我将这些更改合并回主分支。

我已经为该库设置了一个裸远程仓库,并且能够将库子模块推送到远程仓库。效果很好,我可以在远程仓库中看到这些提交。但是,当我尝试部署时,找不到这些提交。事实上,如果我自己克隆远程仓库,我找不到那些提交。

例如,远程仓库看起来像这样:-

git log --graph --oneline --date-order

* 9c9b880 (BRANCHA)
* e88ee92
* 07260c9
* 40b0963
*   35b6533 (tag: dev/0.0.2, master) Merge branch 'refs/heads/development'
|\  
| * ba3c1bd (HEAD, development)
| * eefa611
| *   1b87828 Merge branch 'refs/heads/BRANCHB' into development
| |\  
| | * 9078c1c (BRANCHB)
| |/  
| * 834e715
| * a000cd7
|/  
* 5985fc9 Initial commit
Run Code Online (Sandbox Code Playgroud)

但是,如果我按如下方式克隆远程仓库:-

git clone …
Run Code Online (Sandbox Code Playgroud)

git git-bare

3
推荐指数
1
解决办法
604
查看次数

标签 统计

php ×2

apc ×1

git ×1

git-bare ×1

nginx ×1

output-buffering ×1

wordpress ×1