Warning: curl_exec() has been disabled for security reasons in /pub/host/sunboyu/sunboyu/www/wp-includes/http.php on line 1022
PHP 一个程序猿 孙小一,孙小二,PHP,MYSQL,LINUX,APACHE,原创技术,扯淡

给代码打上版本号

作者 : admin 于 2009年03月03日, 23:55:20
2009
03-3

这个版本号,当然不是svn的版本号。

写程序再多,很多情况还是考虑不清楚。有时候代码耦合度并不能合理权衡,一旦升级某项功能,大改一下也是难免。但大换血式的更改代码是很忌讳的,尤其是运行很稳定的程序。

迫不得已,流程要修改,而且可能是截断了某个流程,创建分支,这时候,如果有一个版本的控制,那只需要更新特定的版本文件,即可实现无缝升级。当然,如果不稳定,可以迅速实现代码版本的回滚。

不过这种情况要求程序模块松散耦合,当你有紧耦合代码需要调整的时候,可以享受版本切换带来的享受。

重写框架

作者 : admin 于 2009年03月01日, 12:06:52
2009
03-1

其实我有两个框架,一个是比较简单的框架,适用于多人生产,只是拿出了框架的一些基本特性,便于由程序员自由发挥,又不缺乏一个基本的规则。

另一个是cakephp的“高仿版”,虽然是一个完整的框架,但学习成本高,另外扼杀了程序员的天性,所以,不再更新。

这次更新的是第一个框架,因为投入了生产,暴露了很多问题,这次的目标,首先是一个完善的框架系统,另外继承很多的应用实例。

另外一些LAMP应用脚本也会适当集成,当然得是拥有root的人才能使用这些功能。

主框架依然是PHP类库,路由,JS库(考虑是否集成JQUERY)

发现问题,PHP中时间的一些细节

作者 : admin 于 2009年02月01日, 21:53:18
2009
02-1

php中,时间戳和date取得的时间是不同的。

时间戳是时间段,不受时区影响,无论哪个时区,取得都是格林威治的时间段。

date,是取得的系统时间,也就是加了时区的。

为了保持一致,php的头文件应该首先声明时区。

犯个错误,还得导数据库……

服务器性能负载记录工具

作者 : admin 于 2009年01月14日, 17:15:38
2009
01-14

服务器突然发生了崩溃,老板开始找我了。

找了半天居然没找到问题在哪里,一咬牙,写了个性能和负载的记录工具,再出事我可有记录了-,-||

备注:只能在linux下用。

  1. < ?php
  2. date_default_timezone_set('Asia/Shanghai');
  3. define('SLEEPTIME',10);       //10秒记录一次
  4. $memfile  = "/proc/meminfo";
  5. $loadfile = "/proc/loadavg";
  6. $logfile  = sprintf("/var/www/html/log/%s.log",date('Y-m-d'));
  7. while(1)
  8. {
  9. $log = getload();
  10. $log .= getmem();
  11. $log .= mymem();
  12. $log .= "\n\r".date("Y-m-d H:i:s");
  13. $log .= "\n\r\n\r";
  14. $handle = fopen($logfile,'a');
  15. fwrite($handle,$log);
  16. fclose($handle);
  17. sleep(SLEEPTIME);
  18. }
  19.  
  20. function getload()      //获得负载
  21. {
  22. global $loadfile;
  23. return file_get_contents($loadfile);
  24. }
  25. function getmem()      //获得内存占用
  26. {
  27. global $memfile;
  28. $mem = file($memfile);
  29. return $mem[0];
  30. }
  31. function mymem()       //程序本身内存占用
  32. {
  33. $pid = getmypid();
  34. exec("ps -eo%mem,rss,pid | grep $pid", $output);
  35.         $output = explode(" ", $output[0]);
  36.         return $output[1] * 1024;
  37. }
  38. ?>

什么是框架:字典中框架指架构,骨架结构,框子,底座等,从字面意思,不难理解,框架指一个基础,而在程序开发中,框架指基于底层语言而逐步向上层应用进行的一些功能实现。其并没有实现具体的功能,而是简化了开发过程,任何模块中常用的功能都被框架进行封装或者扩充,给开发人员以最简的操作实现。

常用的PHP框架:Cakephp Flexphp Thinkphp

什么是脚手架:脚手架通常使用在框架的数据抽象层,数据脚手架可以很直观得给开发者或者使用者数据结构的表现。脚手架同样可以表现在一些具体应用上。但脚手架的功能只是把数据或者应用的最终结果能用简单的方式表现,但并没有达到最终的应用效果,常用在建模或结构设计的初期。脚手架的优势就是给最终用户一个直观的产品但中间并没有经过大量的开发,以减少需求变更所带来的反复开发。

常用脚手架:CI框架中数据脚手架

什么是应用资源包:应用资源包就是具体的应用了,比如bbs,blog,用户管理,资源管理等一些具体的应用。应用资源包侧重完成了一个完整的功能,而面向开发的应用资源包又提高了可迁移性,使一些项目的功能模块直接修改应用资源包的接口而达到快速开发。

常用案例:xoops中功能模块包。

揭发一个写程序以来自己常犯的错误

作者 : admin 于 2009年01月06日, 23:05:24
2009
01-6

从来没发现这个错误,今天突然想到。

数据库中时间,我习惯使用时间戳来保存,取某天或者某小时的数据时,采用 sql 的 between and 方法。

  1. < ?php
  2. #某天的数据
  3. $time[0] = strtotime(date('Y-m-d'));
  4. $time[1] = $time[0]+86400;
  5. $sql = "SELECT * FROM TABLE WHERE TIME BETWEEN $time[0] AND $time[1]"  //伪代码
  6. ?>

乍看这样是没有什么问题的,取某天的时间段。实践证明,在数据时间的分布比较疏松的时候,的确没什么问题,但如果数据分布十分密集,每秒都有若干数据的时候,问题就出来了。根据between的规则,实际的时间就是 $time[1]-$time[0]+1 = 86401

每条语句多算了一秒……汗

解决方案,时间段的计算一律 $time[0] + 60*60*24*x -1

2008
12-25

最近又跟P友讨论PHP的多进程问题,解决的方案,一般都是建立新的系统进程去处理,而linux的nohup命令可以创建新的进程,如果主程序需要处理很多数据,比如一个队列,把这些记录分布开,可以提高主程序的响应,能更快的使主程序结束。

这个方案最早出现在这哥们的博客里,大家可以参考 http://blog.s135.com/read.php/311.htm

而我处理,基本基于PHP的cli模式,使用$argv传递参数而非url,在一些涉及轮询的程序中,可以尽快得把负载分散,使单一的轮询程序来处理下一次的轮询。

PHP引用机制和垃圾回收机制详解

作者 : admin 于 2008年12月12日, 22:16:09
2008
12-12

PHP对变量的跟踪,其实是采用引用,比如 $a = “test” 那么就是在内存中开辟一个存储区,保存 test,$a 做为test的引用。

同时我们可以 $b = &$a,$b作为 $a的引用,他们同时指向test存储空间。

在文章 http://www.sunboyu.cn/2008/11/19/php%E4%B8%AD%E5%8F%98%E9%87%8F%E5%BC%95%E7%94%A8%E8%AF%A6%E8%A7%A3.shtml 中,我们做了一个应用的测试,当删除一个引用后,变量并不消失,是因为PHP使用一个引用计数的东东。当$a=”test”建立后,test的引用计数就是1,建立 $b=&$a后,test的引用计数就是2,删除任何一个引用后,引用计数为1.

只要是引用计数不为0的数据,则为当前有效的数据。然而,当数据的引用计数为0的时候,系统就会识别此数据为垃圾数据,需要回收,这也就形成了PHP的垃圾回收机制。

山穷水复疑无路,柳暗花明又一村

作者 : admin 于 2008年12月07日, 00:13:48
2008
12-7

学习就是这样,突然发现了PHP居然有ssh2的模块,这样远程连接linux服务器就很容易,我正头疼用socket写个ssh2的连接类,突然就发现了这个玩意。手册看得还是少,罚吃巧克力一块。
官方文档:http://www.php.net/manual/en/book.ssh2.php

CentPHP V1.0 release

作者 : admin 于 2008年12月05日, 22:06:54
2008
12-5

1.0不发布,1.1就不会出来,折腾了半月,终于写了个简单的框架,虽然只有简单的几个类,但基本实现了全OOP的操作。这个归功于网上众多的开源软件,没有这些资源的帮助,就不会有我的进步。

取名CentPHP,是因为我希望它像CentPHP一样强大稳定,而且免费开源。

最终把session的数据库保存方式给去了,因为太麻烦,模板引擎基本没什么功能,只有传值和显示,虽然进行了一些优化,但没有彻底跟踪排查资源调用情况,这个在以后版本要逐渐修正。
下边是相关文件列表,源码~~~~~~~~~等实现完一个项目后放出……

F:.
│ Index.php

├─lib
│ └─kernel
│ CentPHP.php
│ Class.Controller.php
│ Class.CP.php
│ Class.Mysql.php
│ Class.Router.php
│ Class.URI.php
│ Class.View.php
│ Common.php

├─usr
│ ├─config
│ │ Config.Mysql.php
│ │ Config.View.php
│ │
│ ├─controllers
│ │ welcome.php
│ │
│ ├─lib
│ │ Class.Session.php
│ │
│ └─views
│ welcome.php

└─var

 Page 5 of 10  « First  ... « 3  4  5  6  7 » ...  Last »