今天在微博上看到一篇文章《PHP垃圾回收机制简单说明》,看了文中对于PHP中对于变量、内存和引用的关系说明,直觉告诉我,那是错误的。几年前写过一篇《PHP中=赋值操作符对不同数据类型的不同行为》,至今印象深刻。
《PHP垃圾回收机制简单说明》中说,“对变量 $a 进行 & 操作,我的理解是找到 $a 所指向的内存,并为 $b 建立同样的一引用指向,并将存放字符串 I am test. 的内存块在符号表中引用计数 加 1.”。
这是错误的,我们可以做一个简单的实验。
愿我们的梦想,像光那样,从一颗星到另一颗星!
今天在微博上看到一篇文章《PHP垃圾回收机制简单说明》,看了文中对于PHP中对于变量、内存和引用的关系说明,直觉告诉我,那是错误的。几年前写过一篇《PHP中=赋值操作符对不同数据类型的不同行为》,至今印象深刻。
《PHP垃圾回收机制简单说明》中说,“对变量 $a 进行 & 操作,我的理解是找到 $a 所指向的内存,并为 $b 建立同样的一引用指向,并将存放字符串 I am test. 的内存块在符号表中引用计数 加 1.”。
这是错误的,我们可以做一个简单的实验。
<input type=”text” /> autocomplete打开或者关闭自动完成功能。
<a hideFoucs=”fasle”> 不显示focus虚线,只对IE有效。标准浏览器用CSS样式 outline: none;
mootools-1.2.2.1-more.js
getWeek: function(){
var day = (new Date(this.get('year'), 0, 1)).get('date');//应该为get('day');
return Math.round((this.get('dayofyear') + (day > 3 ? day - 4 : day + 3)) / 7);
},
mootools-1.2.3.1-more.js
getWeek: function(){
return (this.get('dayofyear') / 7).ceil();
},
这个完全错

最近在实现一个web编辑器,于是乎用到了传说中人见人怕的iframe。经过四天的拼搏,总算是弄出了个雏形。实现了插入图片,字体修改功能没做,不打算做,个人觉得不是很必要。另外还想实现插入flash,不过最终确认不可能(完美)实现,原因请看下文。
为什么要慎用iframe?
iframe在不同浏览器的行为各异,而且几乎都存在足以把开发者折磨致死的问题。
IE(trident)
问题:
解决方案:
代码:
光标的记录与恢复
var bookmark;
var range = document.selection.createRange();
if (range.type.toLowerCase() == "text") {
bookmark = range.getBookmark();
}
var newRange = document.body.createTextRange();
newRange.moveToBookmark(bookmark);//将光标移到原来的选中区域
newRange.collapse();
newRange.select();
Firefox(gecko)
问题:
解决方案:
Opera(presto)
问题:
解决方案:
唯一能正确处理iframe的是webkit,越来越喜欢它了,chrome快点出插件,Maxthon3快点完成开发吧。
待续。。。。
经过三天的努力,终于把接口调通了。在调试的过程中,遇到了一些文档中未提到的问题。而且也发现了文档和PHP编程接口的一些缺陷和错误。
这些缺陷和错误可能给开发者带来了一些误导。
文档错误:
1)所有的文档中都把错误代码HAS_NO_PRIVILEGE(没有权限访问该服务)写成HASNO_PRIVILEGE。
文档缺陷:
1)文档《标准快速付款接口文档 V2.0》和《批量付款到帐号》中关于数字签名部分有内容不明确。
《标准快速付款接口文档 V2.0》5.2.4. 支付宝系统返回处理结果:
支付宝系统接收到商户系统发起的请求,处理成功后返回的参数中同样包含有参数sign、sign_type,商户需根据sign_type 计算sign 值,最终检验支付宝系统返回的sign 值,这里要注意的是商户需要对每一个返回参数的值先进行decode 后再验证sign。
这里的decode我的理解应该是转换编码的意思吧?!但第一次看会很直觉地以为是urldecode。
2)文档中没有提到,本地以某种编码提交给支付宝,支付宝在发通知的时候就会以该编码对数据进行编码并发回本地。虽然这是比较容易想到的,但是文档还是应该说清楚。毕竟,搞错编码是网络传输中经常会出问题。
3)支付宝返回到我的return_url中的参数中,is_success这个参数没有说明,虽然字面就看得出来,但是写到文档里也没什么不好吧。
4)文档《标准快速付款接口文档 V2.0》中没有错误代码TRADE_SELLER_NOT_MATCH,网上查了好像是网址不匹配还是什么原因,不清楚。重现方法:用测试帐号***@***.com发个out_trade_no为1的请求就会出现。
5)文档中还没提到,当网站使用非第三方权威机构签名的SSL证书时,将收不到支付宝的notify。确认已经加了notify_url。
PHP编程接口缺陷:
1)编程接口及示例代码写得过于随便,出现明显的错误
批量支付示例代码index.php中
"pay_date" => date(Ymd), //付款日期 格式20070412
应为
"pay_date" => date('Ymd'), //付款日期 格式20070412
"batch_no" => date(Ymdhms) , //批量付款订单号
应为
"batch_no" => date('Ymdhms') , //批量付款订单号
出现这个错误,说明了支付宝在发demo代码给用户时没有先测试,至少是发给我的这份没有,因为这个demo是不可能运行得起来的。
2)alipay_service.php中
if($parameter['_input_charset'] == "")
应为
if (array_key_exists('_input_charset', $parameter))
否则,当传进来的$parameter不包含_input_charset项是会出现错误Undefined index: _input_charset
3)编程接口能写得完善一些,实现DSA签名和RAS签名功能
另外,demo代码中把提交表单的按钮放到form外面了。一开始我没注意为什么要这么做,后来遇到签名错误时,弄了一个小时才发现,原来的我把提交按钮放到了FORM里面,并给了提交按钮一个name属性。这导致了提交到支付宝的数据中多了一项,导致签名错误。这是一个很隐蔽的陷阱,在文档中明确提醒集成开发者,相信会对集成开发者有很大的帮助。避免像我一样浪费了一个小时才找到错误原因。
PHP编译参数
CFLAGS="-O2" ./configure --prefix=/usr/local --with-config-file-path=/etc \
--with-apxs2=/usr/local/httpd/bin/apxs --with-libdir=lib --with-mysql=no \
--disable-ipv6 --disable-tokenizer --disable-short-tags --enable-mbstring=shared \
--with-gettext=shared --with-regex=php --with-freetype-dir=/usr/local --with-gd=shared \
--with-png-dir=/usr/local --with-jpeg-dir=/usr/local --with-pdo-mysql=shared,/usr/local/mysql \
--enable-pdo=shared --with-pdo-sqlite=shared --with-sqlite=shared --with-openssl-dir=/usr/local/openssl \
--with-openssl=/usr/local
APR编译参数
CFLAGS="-O2" ./configure --prefix=/usr/local
APR-UTIL编译参数
CFLAGS="-O2" ./configure --prefix=/usr/local/apr-util/ --with-apr=/usr/local/apr --with-mysql=/usr/local/mysql/
HTTPD编译参数
LDFLAGS="-L/usr/local/apr/lib" ./configure --prefix=/usr/local/httpd --with-apr=/usr/local/apr \
--with-ssl=/usr/local/openssl --enable-mods-shared=all --enable-so --with-apr-util=/usr/local/apr-util \
--enable-modules=all --enable-isapi=shared --enable-cgi=shared --enable-ssl=shared
GRANT ALL PRIVELEGES ON *.* TO root@'%' IDENTIFIED BY 'password';
操作系统:CentOS 5.2