月度归档:2010年01月

ubuntu9.10安装 备忘

ubuntu9.10安装 备忘

人生的意义在于折腾,生命不止,折腾不止
于是在体验了一把window7后,又把自己的开发环境换到了ubuntu下,安装完系统后安装一些常用软件及开发环境

1、安装kupfer: sudo apt-get install kupfer
2、终端命令 xfce下面是Alt+F2,输入 xfce4-terminal GNOME下也是Alt+F2,输入gnome-terminal
3、安装esvn:
sudo apt-get install esvn
4、安装nginx+php 移步:http://www.linuxidc.com/Linux/2008-07/14419.htm

QUOTE:
php-cgi: /usr/bin/php-cgi
php5-cgi: /usr/bin/php5-cgi
cgi config: /etc/php5/cgi/php.ini

conf: /etc/nginx/nginx.conf
bin:/usr/sbin/nginx
vhost: /etc/nginx/sites-enable/default
cgi-params: /etc/nginx/fastcgi-params

spawn-fcgi -a 127.0.0.1 -p 9000 -C 5 -u www-data -g www-data -f /usr/bin/php-cgi
sudo /etc/init.d/nginx start

5、安装gvim : sudo apt-get install gvim
6、chm阅读器: sudo apt-get install chmsee (不支持索引查找,针对一些本身有乱码的,但是在window下可以正常查看的文件不能正常显示)

命令备忘:
1、sudo fdisk -l 查看磁盘信息(此处需要使用sudo,否则权限不够,不会看到任何信息)
2、mount -t vfat /dev/sda5 /media/windows -o codepage=936,iocharset=utf8

PHP源码阅读笔记五:array 数组的创建

PHP源码阅读笔记五:array 数组的创建

在PHP的调试环境中使用cli执行PHP文件
一步一步跟踪代码,由于对C和词法分析不熟悉
所使用PHP文件如下:

1
2
3
 <?PHP
$a = array(1, 2, 3);
var_dump($a);

代码简单跟踪如下:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
 
 
===>php_execute_script(&file_handle TSRMLS_CC);     //php_cli.c line1130
==> retval = (zend_execute_scripts(ZEND_REQUIRE TSRMLS_CC, NULL, 3, prepend_file_p, primary_file, append_file_p) == SUCCESS);    //    main.c 2023行
==> EG(active_op_array) = zend_compile_file(file_handle, type TSRMLS_CC);      //    zend.c 1126行
==> compiler_result = zendparse(TSRMLS_C);   //    zend_language_scanner.c  3420行
==> zend-language_parse.c     2773==>case 382:     { zend_do_init_array(&(yyval), &(yyvsp[(1) - (1)]), NULL, 0 TSRMLS_CC); }    //    zend_language_parser.c  4689行
    ==>void zend_do_init_array(znode *result, znode *expr, znode *offset, zend_bool is_ref TSRMLS_DC)    //    zend_compile.c 3348行
 
 
 
==>case 380:    { zend_do_add_array_element(&(yyval), &(yyvsp[(3) - (3)]), NULL, 0 TSRMLS_CC); }//    zend_language_parser.c  4684行
    ==>void zend_do_add_array_element(znode *result, znode *expr, znode *offset, zend_bool is_ref TSRMLS_DC)    //    zend_compile.c 3371行

在代码跟踪过程中,发现当PHP的源码生成语法树时,遇到array和第一个数字时是没有任何有关数组的操作的,当解析到1后面的逗号时才会调用zend_do_init_array函数,创建数组

以上只是一个跟踪的过程,对于代码没有解释,由于自身水平有限,对于词法分析和语法分析了解不多,
另:如果PHP程序的最后一行代码后面没有回车换行,在读取源码文件时会看到一堆乱码

待续…

MySQL中的排序

MySQL中的排序

曾经以为filesort是文件排序,后来知道这仅仅是一个排序,文件只是路人甲而已
前些日子从china-pub上买了《Mysql核心内幕》,当浏览到第4章时,以前对MySQL的排序,join buffer不理解的地方,忽然觉得懂了,只是不知道这个懂了是真懂了还是假懂了。
就如当你从一个梦中醒来,难道你就确认你一定不是在做梦了吗?

说说看了什么吧,
filesort排序算法是将一组记录或元素按照快速排序算法放入到内存缓存,然后这几个内存缓存按合并排序算法排序。(摘自《Mysql核心内幕》第82页)
filesort有两种模式:
1、直接模式,将已经数据完全读取出来,然后进行排序
2、指针模式,先根据过滤条件取出排序字段(sort_key)和可以行指针信息(row_id),根据sort_key排序后,再依据row_id取出取出查询中所请求的其他字段。
第一种算法的优势是减少了数据的二次访问,当然会消耗更多的内存,在算法上来讲是以空间换时间。
MySQL会尽量采用每一种方式,只有在每一种方式不行的情况下才会采用第二种方式(即指针模式)

然后是MySQL的三种排序方法:
1、使用索引排序
2、在单表上使用filesort排序
3、先使用临时表,再使用filesort排序
(摘自《Mysql核心内幕》第83页)