浏览模式: 普通 | 列表
运行环境:
apache2.4 + mod_fcgid + php5.4 nts

故障现象:
修改httpd.conf之后重启apache,出现apache假死,访问网站无响应。

分析日志:
出现大量 mod_fcgid: can't apply process slot for php-cgi.exe 错误,看来是php-cgi.exe进程数满不能增加新的进程导致。
看上去似乎可以增加配置文件中 FcgidMaxProcesses 参数来增加进程,但是此服务器内存不大,数十万PV应该还不至于。一个php-cgi进程占15M内存,200个进程需要3G内存。实际上目前的进程数量是够用的,问题是重启apache的时候,php-cgi进程没有自动结束,应该是受制于它自己的生命周期。虽然进程失效却不能马上结束,所以导致新进程不能产生,旧进程又失效了。

解决办法:
...

阅读全文…
SQL2008转到SQL2000的步骤

1、 在sql2008上生成for 2000版本的数据库脚本

(a)数据库点右键 - 任务 - 生成脚本
(b)设置脚本编写选项 - 点高级按钮,找到"为服务器版本编写脚本"项, 选 SQL Server 2000
(c)下一步生成script.sql
 

2、 在2000中创建目标数据库
 
sql2000中新建数据库,打开sql查询分析器,运行script.sql建立数据表等

3、导入数据

方法一、在sql2008中导出数据到sql2000,全选表单击编辑映射---勾选启用标识插入,如果过程不顺利就用方法二

方法二、在sql2000中导入sql2008数据,连接sql2008需要使用sql server odbc方式,sql2000默认会启用标识插入
p.s. 由于php的缓存机制五花八门,为确保权限更改生效而不受缓存影响,需要每次修改权限后重启下IIS或者暂时停掉缓存。
1、如果出现404,则可以看看是否fastcgi没有启用,或者是关停了IISsafedog但是站点isapi中还有dll残留。
2、asp/php站的上传目录图片返回500,有可设置了不支持.net的应用程序池,然后恰好上传目录下存在web.config
关于win2003到win2008的权限组更新,可以看 win2008中ACL权限问题:IUSR和IIS_IUSRS http://blog.xg98.com/article.asp?id=2701

我们先定义相关目录如下
根目录: /ROOT
网站目录: /ROOT/WEB
日志目录: /ROOT/LOGS


【Win2003服务器】
...

阅读全文…
p.s. 安装Management Studio 2008前提条件
1、检查下系统更新,不检查应该也没事
2、安装 SQL Server 2008 Express 32位 中文简体安装包
3、安装 .net 3.5 sp1
4、安装 powershell 2.0 for win2003 (会开启和监听 5985 http 和5986 https 两个端口,外网防火墙需要做屏蔽以免被利用)
5、SQL Server Management Studio 2008 32位

特别注意:安装Management Studio过程中,需要选择执行SQL Server 2008 的全新安装,如果选择向SQL Server 2008 的现有实例中添加功能,则不会出现 管理工具 的选项

SQL Server ...

阅读全文…
p.s. 真的挺奇怪,这么常用的函数,关于类中使用网上居然很难找到有用相关资料,难道大伙都避免使用preg_replace_callback吗。有用的说明请看参考1.

下面举例说明,其中 next_year 为回调函数
function next_year($matches) { 
           // 通常:$matches[0] 是完整的匹配项,$matches[1] 是第一个括号中的子模式的匹配项, 以此类推
           return $matches[1].($matches[2]+1); 
  } 

php5.2和php5.3的类中都可以使用的标准方法:
preg_replace_callback(”|(d{2}/d{2}/)(d{4})|”,array( &$this, ‘next_year’), $str);
...

阅读全文…
p.s. win2003下fastcgi方式安装apache后也遇到些问题,做个记录。一般情况下可以依据apache和php的错误日志来做一些调整,看看修改的结果。

1、连接状态中 close_wait 太多的问题,apache服务器无响应
解决办法:
a、windows网卡防火墙的设置
windows防火墙中把80,443,apache放入例外,另外防火墙高级中选中http和https。

b、修改apache配置文件httpd.conf,加入下面语句
EnableMMAP off
EnableSendfile off
AcceptFilter http none
AcceptFilter https none
Win32DisableAcceptEx


2、并发连接数太多,导致服务器无响应
...

阅读全文…
p.s. 虽然win2003非常非常悠久,不过资源消耗低,系统稳定,运行小项目绝对没问题,特别是企业站。这里选择apache的原因是可以作为服务运行,比较方便,也支持虚拟目录Alias。并发过高还是老实点转到 centos+nginx。

首先是版本选择,根据https://www.apachelounge.com/download/win32/ 的说法,最后一个支持win2003的是vc10编译版本,可选apache2.2和apache2.4,下方有下载链接。
Build with Windows® Platform SDK 7.1 and Visual Studio C++ 2010 SP1 aka VC10. VC10 has improvements, fixes and optimizations over VC9 in areas like Performance,
...

阅读全文…
p.s.嗯。。看到这个smarty块函数插件的编译解释逻辑实在太绕了,也亏的作者能想出来。如果用原生php,几行代码的事,效率差距太大太大。

上次写过一篇关于smarty_block_name的疑惑,这次来说下它的实现原理,以便于理解这玩意怎么赋值和生效的

模板片段如下,定义一个自定义块 block
<block parent_id="6" ><li>{$item.title}</li></block>

然后在插件plugin中加上 smarty_block_block ,使用$GLOBALS[$index]定义一个全局变量来存储数组$items,入栈出栈$item
function smarty_block_block($params,   $content,   $template, &$repeat){
...
...

阅读全文…