在xmpp的官网上,有一个基于xmpp协议的服务器的列表,其中有一些是开源的,当然也有商业的。所以,如果你需要自己架设xmpp服务器,可以考虑搞一款开源的(可以用来做内部聊天室,内部联络方式,也不用担心这些帐号会遗失之类的。)
官网的地址在这里:http://xmpp.org/xmpp-software/servers/
懒得移步的人,可以直接看下面的地址,当然要注意其中哪些是商业版的哪些是开源的。
嗯,大部分都是java的。如果你用win服务器就太轻松了。
纯笔记,在使用ActiveRecord的时候一点注意事项。
本来在处理缓存的时候想对一些数据做强制缓存的,但结果预想的目标和我不一样。
我的$cachekey = md5(serialize($model).$parameter);
然后在调用的时候发现$model对象中的一些信息都消失了。起初以为参数没有传递,但测试了一下之后发现全部正常,那问题出在哪里呢?
再一步步的调试,发现出在serialize后对象就变了。于是看了一下CActiveRecord的源码,果然发现了源码中有定义__sleep(),纠结啊。
看来以后要注意一下,不能随便把model给序列化了。
在项目中,难免会在项目中调用一个不存在的类(偶尔,偶尔,当这个类的类名是程序生成的时候,偶尔会出现这种情况啦),在new 这个类时,都会直接报fatal错误,然后程序就终止了,怎么办?怎么避免这种情况发生?
注:下面的例子其实是指有autoload的情况下所触发的。如果没有autoload,也就相当于不会触发一个include文件的操作。直接就报FATAL错误了。而如果有autoload,则是报include文件的错误,这个时候才能被捕获,多谢神仙的指正
于是看手册set_error_handler,调用一个callback,处理完后,在这个方法里重新生成一个空类就OK了。看了一下手册上的例子
PHP代码
- <?php
-
- function myErrorHandler($errno, $errstr, $errfile, $errline)
- {
- if (!(error_reporting() & $errno)) {
-
- return;
- }
-
- switch ($errno) {
- case E_USER_ERROR:
- echo "<b>My ERROR</b> [$errno] $errstr<br />\n";
- echo " Fatal error on line $errline in file $errfile";
- echo ", PHP " . PHP_VERSION . " (" . PHP_OS . ")<br />\n";
- echo "Aborting...<br />\n";
- exit(1);
- break;
-
- case E_USER_WARNING:
- echo "<b>My WARNING</b> [$errno] $errstr<br />\n";
- break;
-
- case E_USER_NOTICE:
- echo "<b>My NOTICE</b> [$errno] $errstr<br />\n";
- break;
-
- default:
- echo "Unknown error type: [$errno] $errstr<br />\n";
- break;
- }
-
-
- return true;
- }
看了一下,结果,发现只有$errstr中才有类名出现,但还是文件名,难道我要用正则?又仔细看了一下手册,发现callback还有一个第五个参数
XML/HTML代码
- errcontext
- The fifth parameter is optional, errcontext, which is an array that points to the active symbol table at the point the error occurred. In other words, errcontext will contain an array of every variable that existed in the scope the error was triggered in. User error handler must not modify error context.
输入第五个参数,原来,这是一个数组,如果我是类的话,里面就有className这个下标数组,直接就是类名了
同时还有一个很重要的问题,如果callback return false的话,会自动调用原来的出错处理。这 其实是影响我们的操作的。
最终代码如下:
PHP代码
- set_error_handler(function($errno,$errstr,$errfile,$errline,$clsname){
- if(isset($clsname['className'])&&$errno == 2&&!class_exists($clsname['className'])){
- $clsname = $clsname['className'];
- eval("class ".$clsname ." { static public function model(){return null;} }");
- }
- return true;
- },7);
- $result = mmmm::model();
- restore_error_handler();
-
在最后一行恢复了原来的出错处理,不影响原先程序结构。
终于可以直接用了。
一般情况下,我们刚装好的ubuntu时区都是US(默认语言为英文时),而且,它本身就是使用UTC格式作为标准时间格式,如果在Linux下运行程序,且在程序中指定了与系统不一样的时区的时候,可能会造成时间错误。 如果是Ubuntu的桌面版,可以直接在图形模式下修改时区信息,如果是Server版呢,则需要通过tzconfig来修改时区信息了。只是这样的方式会相对比较麻烦,
使用方式 (如将时区设置成Asia/Chongqing):
sudo tzconfig
然后按照提示选择 Asia对应的序号,选完后会显示一堆新的提示—输入城市名,如Shanghai或Chongqing,最后再用 sudo date -s “” 来修改本地时间。
但事实上,并不需要这么复杂的处理,一个偷懒的方法就是,直接:cp /usr/share/zoneinfo/Asia/ShangHai /etc/localtime,用shanghai的时区文件覆盖localtime。灰常方便,这时候看一下date,时间是不是正确了?
元旦其实过的很快,不上班比上班还累,这是有小孩的人都会这么想的吧?
元旦期间,手被烫伤
小孩很听话,只是偶尔问他,爸爸对你凶不凶,在想了一会之后都是很坦然的说:很凶
最近一直在尝试改变,对小孩不要那么凶,确实没有什么太大的意义。何必呢?毕竟大我时候,都是丈母娘他们在带着孩子。
元旦带小孩去买了点衣服,想着过年回家的时候可能会穿。
元旦还处理了一些旧书,40多斤的书,只折成了20多块钱,原价大约600多吧。想想也确实可惜,买不如借,借不如租,租不如偷,袁枚当初就是这样说的吧?他当然不会说租不如偷。所幸卖掉的这些书,我都看完了。否则心更痛。
整理书的时候发现原来我有那么多书没有看完过。大于等于10本书没有看全,只看了几章的也有。这时候就在迷惘我是该慢慢看完,还是确实就扔在那里?想看的时候再看?
带着孩子还去了游乐场,小孩子其实没玩多少,反而都是我和我老婆在玩。好象有点不太厚道。。。。
新的一年初始,还算是不错,唯一就是半夜小孩起来尿尿的时候,尿了一床,嗯,没对准塑料面盆,有点纠结。总体还是不错。