PHP的interface有什么用
在强类型的语言中,interface可以实现多态的特性,但PHP本身是个弱类型语言,那interface这个关键字有什么用? Read more…
在强类型的语言中,interface可以实现多态的特性,但PHP本身是个弱类型语言,那interface这个关键字有什么用? Read more…
上一篇我贴出了一段令人恶心的代码,自然要思考一下这样的代码是如何形成的。显示,每个人都不希望这样的代码出自自己的手中,所以我更倾向于认为这种代码的出现是一种迫不得已的结果。 Read more…
今天下午,tonsh给我看了一篇文章:关闭了register_globals 如何自动创建变量?。看完后,自己的感觉很奇怪:难道真的分不清什么是好的习惯,什么是不好的习惯吗? Read more…
在最近的工作中感觉很多PHP程序员对软件架构的知识了解不多,PHP语言也一直被人认为是一种简单快速的Web语言,这没有错,错就错在“简单快速”不能等同于“没有章法”。 Read more…
这两天时不时的鼓捣一下Google的账户验证机制,也就是传说中的AuthSub,产生了一个我觉得不错的副产品:Http_Fetch类。这是我从大量的重复代码中提出来的。 Read more…
昨天在有图片的页面上出现个两个大大的Warning:
一看是我写的Image Max Width插件出错了。我挺奇怪,为什么前天晚上还好好的?我用FTP把插件的代码拽了下来,在本机上测试,一切都没有问题。最后在Google上搜索了一番,把PHP #11058找了出来,看样子不是PHP本身的问题,而是由服务器的网络设置不当引起的。这我就没办法了,只好联系Lunarpages的技术支持。回复挺快,说他们的技术人员已经意识到了这个问题,正在加紧解决。大约四个多小时后,问题才被排除。
看一下问题是怎么引起的吧。我在代码中用了getimagesize($src)来取得图片的宽和高,而$src是一个图片的URL。PHP里的getimagesize是支持网络协议,可以直接用图片的网址作为参数。既然用到了网络,就会依赖于网络服务器。PHP需要得到域名的IP地址,这需要DNS的配合。如果服务器的DNS设置不正确,PHP也就无能为力了,只能报错:php_network_getaddresses: getaddrinfo failed。
值得一提的是,当时美国的时间应该是半夜。半夜里解决这种问题居然这么快,而且还是由一个PHP函数引发的问题。可见Lunarpages还是有一些技术人才的。从我和Lunarpages打交道的经验感觉,Lunarpages在客服方面还是很不错的。如果你决定使用Lunarpages,可以通过下面的链接购买:

昨天写了一个用Javascript限制图片的方法。正如在那篇文章中说的,用这种方法浏览器必须要下载完大图片后才能得到图片的宽度,进而用Javascript去调整。所以会出现先展现出大图片,而后突然变小的现象。这种感觉不爽。 Read more…
WordPress的缓存类在wp-includes目录下的cache.php里。缓存的实现方法非常简单,就是利用一个二维数组$cache来存储需要缓存的东西。 Read more…
Zend Framework提供了一些常用的校验类(Validators),不过都是针对单个的输入域的。但常见的注册表单上往往有两个密码输入框,只有两次输入相同的密码才算验证通过,这需要比较两个输入域的内容是不是相同,不过Zend Framework里并没有提供这样一个现成的校验类。但提供了一种机制可以让我们自己去实现这种功能。 Read more…
在上一篇Hello World的例子中,Zend Framework在调用完一个Action后,会自动去寻找并且显示相应的视图文件。因此在第一个Hello World的例子中,为了直接在控制器的Action中输出“Hello World”,在echo语句后用了一个die(),显得很不美观:
<?php class IndexController extends Zend_Controller_Action{ public function indexAction(){ echo 'Hello World!'; die(); } } ?>
显然,有些时候并不需要Zend Framework这样“自作主张”,因此需要取消它自动加载视图的功能。
Zend_Controller_Front类有一个setParam方法可以用来设置前端控制器的一些参数。要取消Zend Framework的自动加载视图的功能,可以在整个应用程序的入口文件处设置“noViewRenderer”参数的值为“true”:
$frontController=Zend_Controller_Front::getInstance(); // .... $frontController->setParam('noViewRenderer',true);
这样,所有的Action方法在执行完后都不会自己去加载视图。
如果只是要在某一个控制器内取消这个特性,可以在控制器的init方法或者preDispatch方法内调用
$this->_helper->viewRenderer->setNoRender();
例如:
public function preDispatch(){ $this->_helper->viewRenderer->setNoRender(); }
再进一步,如果只是想在某个Action方法中取消自动加载视图,把上面的setNoRender()放在相应的函数里面就行了。