Archive for the ‘PHP’ Category

交流的障碍

星期日, 9月 27th, 2009

Scarlett说有问题要我帮忙,当然是有偿的,于是就看了一下她所说的需求。

是要在一个WEB方式的调查问卷中搜集使用者对选项的mouseout/click/select的操作过程,而她也调研过了,建议我用mouselabweb.org的开源项目来做。

Mouselab是一个荷兰人做的开源项目,旨在提供一套web页上收集用户行为的工具。

本来我是打算用flash来满足这个需求的,然而我看了她给出来的需求,再看看mouselab的代码,觉得没问题,于是就做了一个雏形回去。

头几次的邮件交流我都觉得没问题,都是原有的需求上的一些细节定义,但快完工之前,逐渐多了一些不在第一次需求里面的内容,而有些也超出了mouselab的模板的能力,需要我全力去修改。

这样对我来说就比较难受了,一方面mouselab的代码写得风格并不好,缩进和变量定义看起来都很麻烦,而另一方面,显然Scarlett将数据采集和数据分析混淆在一起,她大概希望在代码里面将数据分析也做了,这显然不合适。

最终我只给她提供raw data的csv文件,剩下的工作则建议她好好学习用excel做好这一点。

……

尽管是朋友,但涉及到项目开发,就可以知道非工科专业的学生对项目的理解实在不同于工科的人。

php的simplexml_load_string错误

星期一, 4月 20th, 2009

在用php处理百度的新闻RSS源的时候发现,偶然rss数据中含有gbk字符的话,simplexml_load_string函数就会报错。因为百度的RSS源的xml头标明这是gb2312的数据,而其中含有gbk字符,simplexml_load_string就不干了。

看来php还是挺严格的。

处理办法,可以把rss的内容进行替换,把文件头的gb2312替换为gb18030。

也就是加上这一行:$content = str_replace('gb2312', 'gb18030', $content);

PHP的同一个数组用于二重循环

星期三, 2月 25th, 2009

今天写PHP代码碰到的问题,我有一个数组$A,首先在外部循环里面遍历$A


foreach($A as $value):
//code here
endforeach;

然后在这个循环内部,条件性的加入另一个循环,用的也是$A。

结果,问题就是当内部循环执行结束之后,外部循环没有continue下去,而是break了。为什么?

感觉像是程序中使用的$A数组的游标只有一个,当内部循环使用这个游标遍历到底部之后结束内部循环之后,外部循环还是使用这个已到底部的游标,因此外部循环也不再执行下去了。

做一个赋值操作$B=$A,内部循环使用$B,外部循环使用$A,问题解决。

IIS上PHP Expert Editor 4.3的安装与调试

星期五, 1月 9th, 2009

1.下载 PHP Expert Editor 4.3 http://ankord.com/index.php
2.安装 PHP Expert Editor 4.3 这个不赘述了
3.注册码:省略
4.汉化包(可选):http://rains.cn/dl.php?file=phpxedit_chs.zip
解压缩到安装目录\Languages下,完成后可选中文:View->Language->Simplified Chinese
5.设置字体:Options->Editor Options->Display->Editor Font,使用一种等宽字体,比如宋体或微软雅黑
建议设置,否则默认字体的中文不能完整显示,在中文上操作光标也有问题。
6.设置自动补全的快捷键:Options->Menu Shortcuts->Auto Completing,改变其默认快捷键。我改成了Ctrl+Right
建议设置,否则Ctrl+Space将与Windows默认的切换输入法冲突。
7.复制php_dbg.dll:从安装目录\DBG\PHP_DBG.DLL\下复制对应的php版本的文件(php是5.2.x的话,就对应php_dbg.dll-5.2.x)
到php的ext目录下,并重命名为php_dbg.dll。
8.修改php.ini:
增加:
extension=php_dbg.dll
……
修改
implicit_flush = On
……
修改
output_buffering = Off
……
增加
[Debugger]
debugger.enabled = true
debugger.JIT_host = 127.0.0.1
debugger.JIT_port = 7869
debugger.enable_session_cookie = false
debugger.profiler_enabled = true
打开含有phpinfo();的php文件查看dbg的安装。

出现了dbg两次就可以了,一次在开头的概述里面,dbg的版本和作者,另一个是dbg的相关参数。
9.使用IIS进行调试
Run->Options->Run & Debug->HTTP Server Options->
选中Use External HTTP Server。
假设http://localhost/xxxx为iis上的源代码调试路径,那么
Host Name填写:localhost/xxxx/
Root Directory选择xxxx实际所在的目录

使用PEE自带的http server可以运行php程序,而不能触发断点进行调试的,要调试只能使用apache/iis之类的外部web server。

10.在xxxx上建立php文件,设置断点,启动调试。

本文原始链接:http://blog.pjoke.com/2009/01/php-expert-editor-43-installation-and-debug ,转载请注明。

php expert editor

星期五, 1月 9th, 2009

长期在ultraedit上写php代码,总觉得查阅函数说明,调试起来不大方便。

于是搜了一下,下了一个php expert editor来试用,这是个共享软件,最新版本是4.3。

由于其中内建了web server,我要的只是一些简单的代码调试,因此就不需要改成和别的。

用起来还算流畅,内存占用也不大,然而缺点也是明显的:

自动补全(Auto Completing)功能需要手动按热键触发,而该热键是windows上默认用来切换有无输入法的Ctrl+Space。虽然PEE中带有修改热键的菜单,然而找不到这个功能的热键修改在什么地方。

在选项->快捷方式里面找到了这个修改,把它改成Ctrl+别的键,只要跟其他快捷方式不冲突,就OK了。

另外编辑器中的中文显示有问题,半字显示。在网上搜了一下,可以把默认字体设成一种等宽的中文字体,比如微软雅黑或者宋体,我的系统里面没有微软雅黑,就用宋体解决了。

既然都能改过来,那么赞美一下。

url encode的问题

星期二, 12月 16th, 2008

在PHP中提供了urlencode的方法,然而并不符合RFC1738里面的要求,因为它把’ ‘(空格字符),转成了一个’+'。

而我们实际上需要的是如规范里面所要求的’%20′。

而rawurlencode则是按照RFC1738来处理的,所以使用的话,尽量还是用rawurlencode。