Peaceful mind Where there is a will, there is a way!

3Sep/100

php command line

从php4.3.0开始,php提供了一个称为cli的服务器应用接口sapi(Server Application Programming Interface)。在linux编译php时,如果--with-apxs或者--disable-cgi的话,最后安装的php就是cli方式,如果指明--enable-cgi并且没指定--with-apxs编译指令,最后安装的php就是cgi方式。因为默认情况下cli和cgi都是默认支持的。而这二种方式有什么用呢?就是可以在命令行下不依赖诸如apache等服务器从而单独执行php程序。而在php4的window版本中的安装中,cli/php.exe就是cli方式的,主安装目录下的php.exe是cgi方式的。这种方式在php5的window版本有了改变,在 window下主目录下有php_cgi.exe(cgi方式)和php.exe(cli方式),接下来告诉你如何查看自己的php处于哪种方式
linux环境中,用/usr/local/php4/bin/php -v 返回cli/cgi,或者
/usr/local/php4/bin/php -r 'echo php_sapi_name();echo PHP_SAPI;'
window环境中,用cli/php -v (cli方式) php -v(返回cgi_fcgi)
通过页面执行时获得的都是apache/apache2Handler
也就是PHP_SAPI常量目前比较常用的就是cli,cgi,apache/apache2Handler

下面介绍不利用web服务器(比如apache,IIS)如何执行/调试php程序?说白了也就是我们常说的php的cli模式
记得我们每次安装完php查看php的相关信息是如何查看的吗?用phpinfo函数,好主意。但我们怎么在命令行下查看呢?用php -i就可以了。
还有一个就是我们在编译扩展库的时候经常要用到的,我怎么知道用phpize编译的扩展库是否编译进php了呢?写程序当然可以,,太麻烦,本人比较懒,其实用php -m查看下就可以了。那些编译进去了,那些没有编译进去,一目了然了。
下面再介绍个重量级的,那就是php -f了,这可是我们在命令行下调试php的必备哦。比如你有个php程序test
(呵呵,其实这个和php -i是一个效果),
我们用php -f test.php;就可以看到你想要的结果了。如果你还想偷懒的话,可以把-f省掉也是可以的,当然还有一个更简单的方法
就是在test文件的开头加上
#!/usr/local/php4/bin/php -q ,然后chmod +x;使test能像shell/Perl脚本那样直接运行了。这里的-q其实就是向下兼容以前老的cgi程序。

可能有人要问了。如果test.php有语法错误或者存在不定义的函数调用我怎么知道呢?实际上,经过本人试验,用-f参数执行test.php时,即使文件中有错误或者存在非法调用时,命令行下没有任何输出,郁闷,写了都不知道错在哪?幸好php不会这么笨。。我们可以利用下面的方法查看是否正确。。
使用php -l test.php检查是否存在错误,如果存在错误,再利用
php -c /usr/local/php4/lib/php.ini test.php
或者 php -d display_error=on -f test.php查看错误的具体信息

如果懒的写文件,就直接在命令行下写 php -r "phpinfo();" ;php -r "get_defined_constants();"等

至于其它的参数有啥子意思,由于平时用的少。就不介绍了。感兴趣的用php -h就可以查看到了。

更复杂的可以参考IBM上面的一篇文章:http://www.ibm.com/developerworks/cn/opensource/os-php-command/

Filed under: php No Comments
23Aug/100

hospital

最近耳朵越来越不适,于是打算专门跑医院一趟。哪知道刚跨进医院门口,就有病人家属在哪挂横幅:黑社会医院,还我孙儿右臂。。触目惊心,本想转身就走,但偶一想,既来之,则安之,龙潭虎穴也得闯一闯。更何况自认为病应该没什么大碍,我倒要看看你怎么个医法。。于是上二楼找医生。一看招牌,都是副主任医师,随便找了个坐进去。医生也没看我,问:"哪里有问题",答曰:耳朵最近洗澡后很痒,而且有时候会有脓出来。。那医生拿起一个器械,插进我耳朵,探个眼睛瞄了二下,然后就开始在电脑上打药方了,我暗想,不错啊,医院都这么先进了,啥都用上打印机了(怪只怪我好久没去过医院,以前我记得医生都是手写的啊),我拿起一看,一个清洗项目和2个检查项目,才29.5的,我心想,都说医院黑,我觉得还可以啊。不到30就把咋耳朵治好了。。于是跑去划价。然后到治疗室治疗。。治疗室的医生照例用一个工具在我耳朵里捣腾了不到10分钟,说好了,效率不是一般的高。2个检查也不知道做了没,就搞了个清洗,还说咱这个耳朵比较难清洗,弄的痛死了,谁让咱是鱼肉呢。。也不好说什么,你想怎么宰就怎么宰吧。弄完后又跑去找刚才看病的副主任,副主任又拿起刚才那个器械,又仔细端详了半天说:你这估计是中耳炎,要开点药吃。于是又用电脑打药方,刷刷几下。我一看药方,我靠,又花了60多,看来30块搞定俺耳朵的想法是多么的天真,居然药方里面还有滴眼液。。我这时的心情是无比复杂,最后一咬牙,算了,还是缴费买了再说。。结果回家后,除了滴眼液我再用之外,其它的药我都不敢用,因为说明书上写的跟我耳朵基本上没关系,不知道因为我是病盲,还是因为医生水平太高超,但我也不想随便吃药。是药三分毒啊。我还是想等等,如果没好转,再去大医院复查下。。顺便咨询下那药能不能吃。。

Filed under: diary No Comments
16Aug/100

myisam vs innodb(reprint)

1.InnoDB支持事务,而MyISAM非也

2.InnoDB行锁(row-level),MyISam表锁(table-level),但InnoDb的行锁不是绝对的,也可以转换为表锁

3.InnoDB不支持fulltext索引

4.delete操作InnoDB一行一行删除

5.select操作InnoDB扫描整个表

6.AUTO_INCREMENT列在InnoDB中必须建索引(该索引只包含这列),myisam可以建多列索引(包含该列即可)

Filed under: database No Comments
15Aug/100

php’s header function

用这个header指令来解决URL重写产生的404 header
# header('HTTP/1.1 200 OK');
#

# // 页面没找到
# header('HTTP/1.1 404 Not Found');
#

# // 访问受限
# header('HTTP/1.1 403 Forbidden');
#

# // The page moved permanently should be used for
# // all redrictions, because search engines know
# // what's going on and can easily update their urls.
# //页面被永久删除,可以告诉搜索引擎更新它们的urls
# //PS:第一次碰到这个指令,不知道能不能用来把自己的站点从搜索引擎中删除呢?
# header('HTTP/1.1 301 Moved Permanently');
#

# // 服务器错误
# header('HTTP/1.1 500 Internal Server Error');
#

# // 重定向到一个新的位置
# header('Location: http://www.example.org/');
#

# // 延迟一段时间后重定向
# header('Refresh: 10; url=http://www.example.org/');
# print 'You will be redirected in 10 seconds';
#

# // 也可以使用HTML语法来实现延迟
# // http://www.example.org/ />
#

# // 覆盖 X-Powered-By value
# header('X-Powered-By: PHP/4.4.0');
# header('X-Powered-By: Brain/0.6b');
#

# // 内容语言 (en = English)
# header('Content-language: en');
#

# // 最后修改时间(在缓存的时候可以用到)
# $time = time() - 60; // or filemtime($fn), etc
# header('Last-Modified: '.gmdate('D, d M Y H:i:s', $time).' GMT');
#

# // 告诉浏览器要获取的内容还没有更新
# header('HTTP/1.1 304 Not Modified');
#

# // 设置内容的长度 (缓存的时候可以用到):
# header('Content-Length: 1234');
#

# // 用来下载文件:
# header('Content-Type: application/octet-stream');
# header('Content-Disposition: attachment; filename="example.zip"');
# header('Content-Transfer-Encoding: binary');
# // 加载要下载的文件:
# readfile('example.zip');
#

# // 禁止缓存当前文档:
# header('Cache-Control: no-cache, no-store, max-age=0, must-revalidate');
# header('Expires: Mon, 26 Jul 1997 05:00:00 GMT'); // Date in the past
# header('Pragma: no-cache');
#

# // 设置内容类型:
# header('Content-Type: text/html; charset=iso-8859-1');
# header('Content-Type: text/html; charset=utf-8');
# header('Content-Type: text/plain'); // plain text file
# header('Content-Type: image/jpeg'); // JPG picture
# header('Content-Type: application/zip'); // ZIP file
# header('Content-Type: application/pdf'); // PDF file
# header('Content-Type: audio/mpeg'); // Audio MPEG (MP3,...) file
# header('Content-Type: application/x-shockwave-flash'); // Flash animation
#

# // 显示登录对话框,可以用来进行HTTP认证
# header('HTTP/1.1 401 Unauthorized');
# header('WWW-Authenticate: Basic realm="Top Secret"');
# print 'Text that will be displayed if the user hits cancel or ';
# print 'enters wrong login data';

Tagged as: No Comments
14Aug/100

cgi

cgi只是一个标准,可以用任何一种语言编写。在linux下一般使用perl,bash shell,php等编写;在window平台下一般使用c/c++来编写,一个典型的用php编写cgi程序如下:
#!/usr/local/php_cgi/bin/php
phpinfo(); #这里可以用任何符合php语法的程序
?>

修改apache配置文件httpd.conf即可。和cgi有关的指令

    ScriptAlias /cgi-bin/ "/usr/local/apache/cgi-bin/"
    
        AllowOverride None
        Options None
        Order allow,deny
        Allow from all
    
    AddHandler cgi-script .cgi   //默认是关闭的,打开即可

使用http://192.168.115.118/~lizl/cgi-bin/cgi-test可以测试是否支持cgi程序,一般需使用 chmod 755 cgi-test修改该文件权限,否则提示没有权限访问。

实际上,我们有时候

Tagged as: No Comments
11Aug/100

how to regulate vps time

[root@srv html]# rm -rf /etc/localtime
[root@srv html]# date
Wed Aug 11 06:23:09 UTC 2010
[root@srv html]# ln -s /usr/share/zoneinfo/Asia/Shanghai /etc/localtime
[root@srv html]# date
Wed Aug 11 14:23:27 CST 2010
Tagged as: No Comments
9Aug/100

派遣证

最近为调户口的事情搞的焦头烂额,我不明白是那个环节上出了问题,我的派遣证居然丢了,抑或压根学校就没给我发。。。

派遣证,美其名曰干部身份,其实什么用都没有!!!而且居然没有别的办法补救,人才市场说2年就不能补办。

这几天一直打电话,学校就业指导中心一直没人接,想找个人问问也找不到。同学帮忙问一次,就不想帮忙了,也很烦。。说让我问清楚。。我也想啊。。但我问公司,公司说可以办,结果办到现在全部都是瞎忙活。真操蛋有关部门,哪怕你早点告诉我不能办我也死了这条心啊。

网上不断的查资料,反正是没有一点心情工作了。。老哥请人家吃饭也白吃了,大清早打电话说我的不是,没搞清楚瞎弄。。难道是我故意不想弄好?好像都是我的错。说什么饭都吃了,事情又不办。。我难道不想一次弄好。。最后总结下来,也只能怪自己了。。怪自己读的是专升本。。一切都过去了。现在还能怎样?

Filed under: diary No Comments
29Oct/090

在centos5.2 (i386) 上安装xen虚拟机(转载)

有兴趣的可以查看英文原版:http://www.howtoforge.com/installing-xen-on-centos-5.2-i386

如果是全新安装。最好能单独生成用于保存虚拟机的分区

如果只是做测试用.随便指定保存虚拟机的分区即可。但必须有足够的空间

step1:修改/etc/sysconfig/selinux文件中 "SELINUX=disabled"

step2: reboot

step3:yum install kernel-xen xen(在网络连接正常情况下)

step4:查看/boot/grub/menu.lst配置

step5:reboot

step6:uname -r查看内核版本是否带xen标志

step7:xm list

step8:使用向导virt-install安装(必须要求内存大于512M,否则总是提示失败)

step9:cat /etc/xen/vm01

常用命令:

xm create -c /path/to/config - Start a virtual machine.
xm shutdown <name> - Stop a virtual machine.
xm destroy <name> - Stop a virtual machine immediately without shutting it down. It's as if you switch off the power button.
xm list - List all running systems.
xm console <name> - Log in on a virtual machine.
xm help - List of all commands.
Tagged as: , No Comments
2Jun/090

delete如何写?

废话少说,直接进入主题
比如有2个表t1和t2

create table t1(int i,int j);
insert into t1 values(3,4),values(5,8);
create table t2 (int k,int j);
insert into t1 values(6,4),values(7,9),values(10,11);

我们要求也很简单,需要删除t1中j在t2中的数据:
如果是以前,我想都不用想就这么写:

delete from t1 where t1.j in (select j from t2);

在翻了手册后,才发现原来还可以这么写

delete t1 from t1,t2 where t1.=t2.j
delete t1 from t1 inner join t2 on t1.j=t2.j;
delete from t1 using t1,t2 where t1.j=t2.j;
delete t1 from t1,t2 where find_in_set(t1.j,t2.j);

暂时只想到这么多,大家还有什么方法都可以讨论下,^_^

Tagged as: , No Comments
5May/050

2005 mind

本人一直觉得做个程序员没什么意思,虽然是科班出生,但比起那些半路出家的同行来说,我的技术能力真的不敢恭维,我很羡慕那些说起程序来一套一套的程序员,他们都有自己的一些东西,我出来能给老板打工写代码外,很少能有自己对程序的见地,所以一直抱着干一天是一天的态度,到个适当的年龄转行好了。工作第一年,做php的,当时进公司连php都没听说过,还好笔试时考的是数据库和软件工程的知识,我编程水平不咋样,但这些可是我大学考80分的科目啊,所以很庆辛的进了目前所在的公司。工作第一年,公司产品改造,我就在原有程序的基础上添添补补,刚开始干的还有几分热度,毕竟以前都不明白php是个啥,这样耗了一年,总算是入门了。第二个年头,春节过后,部门开年度计划,说要继续改造产品,以推向国外。当时就觉得怎么还改造啊,这一年不又要被我混过去了,又碰上wow横空出世,就和几个同事每天在网上逍遥快活,整整玩了三个月。人是越完越累,每天可做的事情又少,我对未来也是越来越迷茫,干技术又静不下心来学,干别的好象什么都不会。整个人在不断的思考,但又思考不到出路,就这样一天天的混。

2005年11月7号 星期一 晴
终于嗑磕碰碰的把第一阶段的事情做完了,但感觉问题多多,需要以后多多注意.人也累的够呛,效果又不明显,真是让人痛苦.没办法,看着大虾们做也能学到不少东西滴.以后的路自己还要走撒,不能吃饱了没事干,哈哈.

2006年3月18日 星期六 阴
你说天地下咋这么多无聊的人呢?没事就在网上用木马盗别人qq号,偶的qq号都用了5年,好不容易挂了一个太阳,二个月亮加一个星星.现在一刻之间化为乌有.以前别人跟我说qq被盗,我还在一旁偷着乐呢,我想我这qq怎么从没丢失过呢!这下可好,轮这自己哭了. 上面的几百号人也跟着烟消云散了.现在想想未尝不是一件好事,反正有些人根本一辈子就没打算再见我,虽然我还是能够想起她;当然我也有些人不想见,毕竟再见面对大家都不好,保持现在这个样子挺好的,我有充分的时间去思考一些东西.而且以后恐怕聊qq的时间也少了.毕竟自己看起来长的不小了,呵呵:).不过还是希望各位兄弟姐妹见到那个盗我qq号12307700的家伙,帮我鄙视一下,实在是心痛啊!

昨天去买了手提,以后不用再面对我那可恶的15寸球面显示器了,鸟枪换炮,希望是个好的开始.我最后选择了ASUS W3Z,希望它不要负我.

Filed under: diary No Comments