在 Windows 2003 IIS6 下跑 PHP 太不不靠谱了

为朋友写了个PHP版本的 socket 程序,在自己的机器环境(WIN2K3, IIS6, PHP4.4.6,ISAPI 模式)下测试一切 OK,到了实际环境却提示 Call to undefined function socket_create(),初步判断应该 php_socket.dll 未加载的缘故,echo phpinfo 也没有 socket 相关信息。

确认在 php.ini 文件里已经将;extension=php_sockets.dll这一行的分号去掉了,可 socket 扩展死活不加载。除了 PHP 版本有些差别(实际环境是4.4.9版本),其它设置都一样,正想将 PHP 降到 4.4.6 版本,却突然出现 Service Unavailable 提示,难不成要重装IIS?

不甘心,于是 google 解决方案。参照 Tmouse·方枪枪 的做法:

打开IIS管理器 - 网站 - 右键属性 - 服务 - 勾上"以IIS5.0隔离模式运行www服务"

IIS 的 Service Unavailable 故障消失,更为有意思的是 php_socket 扩展可以正常加载了 -_-! 要不是情况特殊,以后打死我也不用 IIS 跑 PHP 了。

自动记录操作日志

通常对数据的操作都需要记录日志,由于表结构的不同,每次都需要重新组织 SQL 语句则显得相当繁琐。写了几个函数来解决这个问题,不过有局限性:表的第一个字段必须为 id int identity。

// Sample
// 生成日志表
createlogtable($table);
// 生成记录操作日志的SQL语句
$logsql = genopelogsql($table, "id=$id", 'update');
// 将日志记录SQL拼接到原SQL
$sql = $logsql.$sql;
// 执行操作
$db->query($sql);

Continue reading