我目前使用php作为后台脚本的语言,很多人说php容易内存泄漏什么的,但是现在已经跑了一个月了状况良好。而且现在php已经大大改善了内存的回收机制,再加上它的简便性,实在找不到有什么理由拒绝使用。除了它不支持多线程以外,但是在一些性能要求不高的地方完全没啥问题。
我不知道我的这些考虑是否已经全面,是否有什么遗漏的地方。
@Summic 对这个回答持保留态度 ... 我自己用 php 实现过 webServer 和 socketServer ...
用到了 libevent 取代死循环 ... 用到了 shmop 缓存 ... 以及都是多进程 fork 的 ...
我用到了一切我能想到的优化 ... 但性能依然很烂 ...
socketServer 还好 ... 因为要维持长连接推送即可 ...
webServer 只能用呵呵来形容 ... 做做玩具还可以 ... 没办法真正用到生产环境去 ...
至于顶楼说的问题 ... 内存泄露什么的 ... 不敢说没有也不敢说有 ...
我只知道我的 php daemon 运行几个月 ... 也没见吃内存吃得多异常 ...
我完全没有在程序里刻意的调用 gc_collect_cycles() 或者 unset() 什么的 ...
运行也一切正常 ... 以及我觉得就 php 这种语言本身的特性而言 ...
只要你不直接去操作内存 ... 只是做普通操作的话 ... 想要内存泄露也难吧 ...
唯一需要注意的事情是 ... php 在做 daemon 的时候 ...
如果你连接了外部的服务 ... 切记要在再次打开连接之前关闭之前的连接!!
我见到的很多 php 程序员已经没这个习惯了 ... 写 daemon 需要注意的其实只有这一个 ...
基本就是这样 ... 总之 ... 嘛 ... 不管什么语言 ... 写得顺手就好了 ...
毕竟没有弱爆的语言只有弱爆的程序员 ...
既然这个问题问的是php 是否适合 做后台常驻程序,我觉得还是应该给一个非常明确的答案,即 不适合
诚如其他答案中所说,php可以实现所有功能,内存问题也逐步变好,这是好事,但这并不是php适合做这件事的理由。要说可以实现功能,采用awk + nc也可以写一个常驻后台的web server且性能不一定比php差,但实际上绝不会有人采用这种geek的技术方案。
php不适合做这件事的理由有三:
不过,php就算不适合做后台常驻程序,也并不妨碍它在某些情况下使用,比如
总之,能不使用php做后台程序就别用,如果用了且未来还会上量,最好早做用其他语言重写的打算吧。