PHP5.2.6中无法在exception_handler函数中抛出异常

在PHP bugs列表中也找到这个bug,但是似乎没有被处理,bug提出的时间是2005年,不知道新版本的有没有解决。
PHP:5.2.6
OS: Mac OS Leopard 10.5.7
Server: Apache 2.2

这个代码就有问题:
function e_handler($e)
{
throw new Exception();
}
set_exception_handler(‘e_handler’);
throw new Exception();

这将会导致
Fatal error: Exception thrown without a stack frame in Unknown on line 0

Update: 这应该属于设计问题,如果在exception_handler()函数中可以抛出异常,而这个异常又会继续调用exception_handler(),这样下去就会出现死循环,这就是为什么程序会出错的原因吧。
建议在exception_handler函数体内的代码包在try catch中,避免意外抛出异常导致出这个问题

function e_handler($e)
{
try
{
throw new Exception();
}
catch (Exception $e)
{
echo “catched…”;
}
}
set_exception_handler(‘e_handler’);

throw new Exception();

Mac下我常用的软件

习惯了Mac OS X Leopard以后发现自己已经离不开它了。像很多Linuxer一样除了上网银以外统统不用Windows,玩个CS什么的也都用Wine了,我很笨,目前在Mac 上和Ubuntu下都没有Wine成功过 :( “, 下面就介绍一些我认为在Mac下非常使用的软件吧。
1. QuickSilver

只需要Command+Space 再加上几个字母就可以方便的你的程序,通过一些插件QuickSilver能极大的提高我们的效率,强烈推荐,唯一不足的是这款软件的作者已经不继续维护这款软件了,他被Google请去做另外一款和这个类似的软件Google Quick Search Box 试用了一下还不够成熟,目前和QS比起来还是差太多了。

2. TextMate

这款软件就不用多介绍了吧,强大的编辑器。开发进度有点慢,作者对软件质量要求很高,不许诺2.0版本到底何时能出来,很多人都以为作者停止了开发,前不久作者发布了这篇文章,声明开发仍在继续,感兴趣的同学可以看这里看看TextMate2.0到底有哪些改进。这篇在2007年就发布了。实在过的有点久了。

3.Things

GTD绝佳软件,缺点不具有网络同步功能

4.Evernote

笔记软件,很方便,之前我也用Evernote来做GTD发现管理器来很不方便,后来发现上面提到的Things就放弃用Evernote做GTD了,Evernote做笔记绝对顺手,他同时提供Windows 和Mac OS 两个版本,还有Web版的,跨平台很有优势。免费用户提供40M得空间,对我来说这其实绝对够用。

5.Adium

多协议IM客户端支持:Gtalk, MSN, …QQ(因为QQ的协议是不公开的,所以可能定期会抽风,上QQ也可以用官方的 QQ for Mac)..

6.Tweetie

Twitter就靠他了,说不出那里好,就是很好用。免费版有广告。还好基本不影响用户体验。

7.iChm

看chm的电子书就靠它了。支持搜索

8.RescueTime

这个软件也有各个操作系统的版本,收集自己的时间分配,然后会有个汇总。

9.AppZapper

卸载软件用它来卸载还是比较干净的。方便快捷

10.Monolingual

帮你清除一些不需要的语言信息,节省磁盘空间。

Mac OS 启动sshd服务

[UPDATE]  系统偏号设置  -> 共享 -> 远程登陆 ,开启即可.  下面的方法不推荐使用.

想push自己写的一些代码到本地的版本库中去,看了很多的协议,都挺麻烦的,至今没有配置好一个git server,遂放弃搭建server,直接使用ssh来提交到本地

无奈Mac OS X 似乎默认不启动SSHD服务。所以我尝试启动

Leopard:etc reeze$ sshd
sshd re-exec requires execution with an absolute path
看来不行。
不过这个提示错误似乎不是很明白。上网baidu了一把。发现
只能用绝对路径启动。不知道为什么程序非得用绝对路劲启动。有时间研究下为何是这样的,或者有知道的直接告诉我:)
$ sudo /usr/sbin/sshd
服务就启动了
不能每次都这么运行一下先啊。放在 ~/.bashrc 似乎可以,不过这个得需要管理员权限
得sudo,每次输入密码很烦人。干脆放到 /etc/rc.common,

#####
/usr/sbin/sshd

网上有人说apple不推荐这么干。但是我又不知道怎么让他自动启动。先就这么放着吧。找到好方法再改。

PHP调试函数

在项目中经常要调试程序,但是我电脑上的ZendStudio总是没配置好,不能单步调试,不过有时候不一定需要让ZendStudio来帮我们调试,所以写了下面这个辅助函数来方便调试,因为有时候调试的位置加多了自己也不知道到底是加在什么地方了,下面的函数就是方便的dump对象信息,同时显示调试的问题和所在的行数。


//调试函数,方便显示调试函数的位置和文件
function p(){
$args = func_get_args();

// 调用栈,debug_backtrace()可以返回调用栈。这样 我们就可以方便的知道函数在哪里调用的。
$backtrace = debug_backtrace();

$file = $backtrace[0]['file'];
$line = $backtrace[0]['line'];
echo "

";
  echo "$file:$linen";
  foreach ($args as $arg)
  {
    var_dump($arg);
  }
  echo "

";
exit;
}