iis下PHP扩展安装scws手记/PHP Startup: Unable to load dynami library

iis下PHP扩展安装scws手记
最近学习中文分词,SCWS是一个比较小巧的分词系统,以php扩展的形式安装到web服务器上,官方释放出的是unix tar包,有人以此编译出windows版的dll扩展。电脑上同时安装有iis与apache两个web服务器,因为公司服务器使用的是iis,所以大多数的开发工作还是在iis下进行的。
SCWS安装很简单。首先安装完成后到iis下测试,没有载入扩展,甚至重启电脑也不行;查看window日志里面没有相关信息。
命令行下运行apache/bin/目录下的httpd.exe,可以显示一些出错信息。于是到apache下查找出错原因,先修改php.ini里display_startup_errors = On,命令行下运行,非常正常没有错误,浏览器打开apache下的phpinfo.php文件(里面只有phpinfo();一行程序代码),运行测试程序也没有问题,完全可以正常分词。
怀疑SCWS不支持iis.
再到iis里运行,弹出这样的对警示框错误
PHP Startup: Unable to load dynami library ‘C:\php52\ext\php_scws.dll’ – 拒绝访问。

看来是没有权限,查看这个dll跟其它dll,果然权限不一致,少了guests跟users两个组的权限。
想起来原来安装这个dll的过程:从网上下载文件,解压缩后,剪切到这里的,“剪切-粘贴”时文件权限还是原来的权限。
于是关闭apache,在ext目录里就地复制文件php_scws.dll,然后把原php_scws.dll文件删掉,把“复件 php_scws.dll”改名为php_scws.dll,重启iis,成功。

原因分析:
为什么apache下可以载入dll运行,但iis下却不行?
iis的运行权限好像比较复杂,(或者说比较混乱),它在各自站点有iis用户,还有一个iis服务的系统用户,之间关系不是很明白,也没有兴趣查阅相关文档(对windows不是很感冒)。而apache的运行有两个apache进程,其中一个是另一个的父进程,apache启动后,它要再启动一个子进程(如果站点多,是否会启动多个子进程?没仔细研究),而该子进程是以system用户运行的,php_scws.dll对system用户有权限,所以apache下是可以载入该扩展的。

发表评论

此站点使用Akismet来减少垃圾评论。了解我们如何处理您的评论数据