本文讨论内容基于 Discuz 7, Red Hat Enterprise Linux AS 4, MogileFs Server 2.17, MogileFS Client 1.08, MogileFS Utils 2.14
MogileFS 安装和配置
安装
基本安装顺序是 mogilefs-server(服务端), MogileFS-Client(客户端), MogileFS-Utils(工具包)。安装 MogileFS 其实并不复杂,但有些耗时,因为大多数据时间都被用在安装依赖包上了。在安装 MogileFS 之前有几个包是必需的:
Sys-Syscall-0.22.tar.gz
Danga-Socket-1.56.tar.gz
String-CRC32-1.4.tar.gz
Gearman-1.07.tar.gz
Gearman-Client-Async-0.93
Net-Netmask-1.9015.tar.tar
Perlbal-1.70.tar.tar
若在安装过程中还提示其它包不存在,可以根据提示到search.cpan.org搜索相应的包装上。具体安装步骤可以参考这里或这里。
Continue reading...
最近工作需要对 Discuz 做二次开发,本着最小化改动方便以后升级的原则,我引入了 WordPress 的 Hook 机制(即 Plugin API)来降低二次开发代码与 Discuz 原生代码的耦合度。
WordPress 内部提供了许多 Hook(钩子),以便插件可以将相应的 action 或 filter 挂接上去接管或改进 WordPress 的默认处理来达到自己期望的目的,在处理完毕后将控制权重新交给 WordPress。而我们所要做的就是将这种机制移植到 Discuz 中,所幸的是,WordPress 的 Hook 机制并没有过多地依赖于它的其它核心程序,所以基本不需要做多少修改就可以拿来使用。
Continue reading...
为朋友写了个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 了。
在装上 K2 RC4 主题后,发现如果用 IE 访问 WP 后台无法保存 K2 的设置选项,点击 Save 按钮后毫无反应,Firefox、Opera、Safari则正常。看了看源代码,K2 是这样定义这个按钮的:
<button>< ?php echo attribute_escape(__('Save','k2_domain'));?></button>
之前很少使用过 <button> 标签,所以开始还以为 K2 绑定了按钮事件不支持 IE,不过浏览了一通代码也没找到,才意识到问题可能出在标签的未指定 type 属性上了,于是加上 type="submit",问题解决。
又特意找了找相关资料,W3C 对 button 标签的 type 属性定义是:
submit: Creates a submit button. This is the default value.
reset: Creates a reset button.
button: Creates a push button.
而 MSDN 中则如此解释:
button: Default. Creates a Command button.
reset: Creates a Reset button. If the button is in a form,
it resets the fields in the form to their initial values.
submit: Creates a Submit button. If the button is in a form,
it submits the form.
原来如此。fuck IE!
原先在php下写了个操作数据库的类,用jscript又重写了一遍。
// Sample
var db = new dbstuff();
db.connect(dbserver, dbuser, dbpwd, dbname);
var sql = "SELECT @@VERSION as dbv";
var query = db.query(sql);
while(arr = db.fetch_array(query)){
echo(arr["dbv"]);
}
db.close();
Continue reading...
adodb 实在太庞大了,况且也不需要那么多的功能,就自己写了一个 PHP 操作 SQL Server 的类。带有强烈的 discuz 风格。
// sample
$db = new dbstuff;
$db->connect($dbserver, $dbuser, $dbpwd, $dbname, $codepage);
Continue reading...
通常对数据的操作都需要记录日志,由于表结构的不同,每次都需要重新组织 SQL 语句则显得相当繁琐。写了几个函数来解决这个问题,不过有局限性:表的第一个字段必须为 id int identity。
// Sample
// 生成日志表
createlogtable($table);
// 生成记录操作日志的SQL语句
$logsql = genopelogsql($table, "id=$id", 'update');
// 将日志记录SQL拼接到原SQL
$sql = $logsql.$sql;
// 执行操作
$db->query($sql);
Continue reading...
Recent Comments