PHP中 HTTP_HOST 和 SERVER_NAME 的区别
2010.07.02 // 1 Comment
最近在开发站群软件,用到了根据访问域名判断子站点的相关问题。PHP获取当前域名有两个变量 HTTP_HOST 和 SERVER_NAME,我想知道两者的区别以及哪个更加可靠。 首先我想说,百度上那些转来转去的文章都是扯淡! 有说相同的,有说不同的,都没说明原因,没经过验证就互相转来转去的,浪费观众时间。 下面说说本人经过亲自验证 + 查阅官方文档 + 官方BUG列表 + 官方邮件列表 + sitepoint + webmasterworld + google的总结: 相同点: 当满足以下三个条件时,两者会输出相同信息。 1. 服务器为80端口 2. apache的conf中ServerName设置正确 3. HTTP/1.1协议规范 不同点: 1. 通常情况: _SERVER["HTTP_HOST"] 在HTTP/1.1协议规范下,会根据客户端的HTTP请求输出信息。 _SERVER["SERVER_NAME"] 默认情况下直接输出apache的配置文件httpd.conf中的ServerName值。 2. 当服务器为非80端口时: _SERVER["HTTP_HOST"] 会输出端口号,例如:mimiz.cn:8080 _SERVER["SERVER_NAME"] 会直接输出ServerName值 因此在这种情况下,可以理解为:HTTP_HOST = SERVER_NAME : SERVER_PORT 3. 当配置文件httpd.conf中的ServerName与HTTP/1.0请求的域名不一致时: httpd.conf配置如下: <virtualhost *> ServerName mimiz.cn ServerAlias www.mimiz.cn </virtualhost> 客户端访问域名www.mimiz.cn _SERVER["HTTP_HOST"] 输出 www.mimiz.cn _SERVER["SERVER_NAME"] 输出 mimiz.cn 所以,在实际程序中,应尽量使用_SERVER["HTTP_HOST"] ,比较保险和可靠。
zend framework 框架中自定义父控制器
2010.05.28 // 5 Comments
今天简单的聊聊ZF框架中的控制器。 大家都知道ZF中不可以使用__construct()构造方法,类的初始化操作需要用init()方法完成, 原因大部分朋友都应该了解,在php中,当子类有构造方法时,父类的构造方法不会被调用, 通过阅读zend/controller/Action.php的__construct()可以知道,它通过使用$this->init(),类似注入的方式,避免了这种情况。 那么在一个项目中,若干的controller可能会做一些同样的动作,比如初始化session、实例化一些对象等等, 如果在每个controller的init()中,写一些重复的代码,当controller比较多时,一来比较麻烦,二来不方便后期维护。 怎样解决这个问题呢?可以把这些代码写到一个文件中,然后include(),也可以OOXX,但我不认为这是个好办法,我的方法是,自定义一个父控制器。 例如:在library目录中新建一个Mylib/Controller/Parent.php文件,让这个文件继承zf的Controller,这样写: class Mylib_Controller_Parent extends Zend_Controller_Action { public function init() { parent::init(); // Your custom code } } 以后在每个项目controller中不要继承ZF的默认控制器了,直接继承我们自己的Parent: class DefaultController extends Mylib_Controller_Parent { public function init() { parent::init(); // Your custom code } } 就是这么简单。 第一篇关于Zend Framework的文章,没什么技术含量,以后我会把项目中常用到的、实用的ZF经验技巧写下来,谢谢大家支持。
php pdo 连接 sql server 2005 的方法
2010.04.22 // 2 Comments
注意,本文告诉你如何更好的用pdo连接sql server 2005 而不是 2000。 废话不多说,只说重点,按步骤来: 1. 确保正确安装sql server 2005 , 开启sql server的远程连接访问,检查防火墙,确认在本地可以通过SQL Server Configuration Manager连接到服务器。 2. 修改 php.ini 开启相关扩展(php_pdo.dll ,php_pdo_mssql.dll ,php_mssql.dll),重启apache后,一定要用phpinfo()检查是否成功加载。 3. 修改php.ini中:mssql.secure_connection = Off ,网上很多人说改为On,那是扯淡,改为Off就对啦。 4. (重点) 如果是连接sql server 2000,只需要把php根目录下的ntwdblib.dll文件copy到apache/bin/或者windows/system32/, 但是连接 sql server 2005 必须使用2000.80.194.0以上版本的ntwdblib.dll文件, 在sql server 2005 安装光盘中可以找到。 (下载地址:http://download.pchome.net/dll/n/detail-171972-0.html) 5. PDO连接mssql的字符串服务地址后加“,端口号”,注意是逗号,不是冒号。 例如: $db = new PDO (“mssql:host=192.168.0.1,1433;dbname=testdb”,”sa”,”pw”);
phpMyAdmin出现PHP has encountered an Access Violation at XXXXXXXX
2009.09.20 // 2 Comments
昨天在帮朋友配置IIS+PHP环境的时候,安装phpMyAdmin出现了PHP has encountered an Access Violation at XXXXXXXX的错误。 由于第一次碰上这种问题,只好去百度搜索答案,然而每次用百度解决技术问题都令我很失望,同时也越来越感慨国内Copy精神的强大。 翻遍了百度前10页的内容,得出错误可能原因如下: 1. ZendOptimizer和php不兼容 2. session_save_path路径不存在或没有足够的权限 3. 内存不足 4. libmysql.dll版本不兼容 5. php或IIS相关文件权限不够 看来不能指望百度,于是又去google继续搜,翻译结果如下: 1. 这是一个PHP的版本bug,是php典型的bug 2. 据说此bug已经修复近4年,仍未完全解决 3. 老外们在使用IIS时经常碰到同样的错误,不同的内存地址 4. 老外的论坛中有很多人提问相同问题,但没有回帖的,没有很好的解决方法。 5. 可以参考:http://bugs.php.net/bug.php?id=28929 看来这个错误没有固定的解决方法,只能靠自己摸索了。 我尝试了所有搜索到的、可能的方法,但仍然没有解决问题。 最后抱着试试看的态度,下载了一个最新版本的phpMyAdmin,问题解决了。 总结: 1. 造成此错误的随机性太强,不要期望有固定的解决方法 2. 根据硬件、软件环境,具体情况具体分析 3. 重点检查权限问题和兼容性问题 4. 不要仅仅考虑php、Zend等服务环境的兼容,网站代码的兼容性也不能放过 5. 遇事冷静思考,没有解决不了的问题
对 Zend Studio 7.0 失望了(用了一段时间后,感觉ZS7挺顺手的,推荐使用)
2009.08.25 // 9 Comments
Zend Studio 7.0出来几个月了,一直都没空试用它,今天看了Zend官方的一篇文章,又恰好有些空余时间,心里稍微蠢蠢欲动一下,就把7.0安装到了硬盘上。 官方文章中描述的总是令人心潮澎湃,罗列了7.0的一堆优点,并建议用户升级,就文字方面的描述,确实很有吸引力。但当你用过之后,就像一盆冷水浇到了发烫的脑袋上,除了很爽之外还会让你很郁闷。 Zend Studio作为一个历史悠久的IDE,从诞生以来就BUG不断,5.5版本算是最经典的,从6.0开始使用了eclipse架构,虽然提高了系统的兼容性,但是Java那东西太耗费系统资源了,没有强悍的硬件支持,跑一个Zend Studio 7 简直是折磨。 折磨就折磨一下吧,卡一点,慢一点还可以忍受,if、while等语句不能折叠这我也能忍受,偶尔有点中文乱码我也勉强忍受了,但是最最不能忍受的是代码提示慢,我代码都敲完了,他的代码提示还没出来,总不能逼我按Alt+/去手动打开代码提示吧。 Zend Studio 6.x 已经很失败了,7.0虽有亮点但依然鸡肋,不知未来的8.0会不会那么让人失望。 把Zend Studio 7 OOXX了一下,不过按照惯例还是提供一下注册码: User Name:mimiz_cn License Key:3B9B9BB76C218B98BB76C218 官方下载地址:http://downloads.zend.com/studio-eclipse/7.0.0/ZendStudio-7.0.0.exe 20090826: 很抱歉我错怪了 ZendStudio7,既然是基于Eclipse开发的东西,同样也继承了eclipse的优点,在Window -> preferences -> PHP -> Editor -> Content assist -> Auto-Activation 中,可以调整自动提示的时间,我把它改为0,提示超快,哇咔咔~~~ 20090920: 使用Zend Studio 7.0一个多月,越来越顺手了,现在他已经成了我最主要的php开发集成环境,甚至我的CentOS上面也把Eclipse换Zend Studio 7 20100118: 不少朋友说代码提示慢,确实,跟5.5比是慢多了,但这个是跟硬件环境成正比的,硬件在飞速的发展,软件当然也越做越大,越来越耗费资源,目前我用双核U,3G内存,没有任何不妥,硬件配置不高的朋友,建议回到5.5的平台,或者试试 NetBeans 和 Komodo 。古董机的话,还是用Editplus或者Dreamweaver吧。
Zend Studio for Eclipse 6 最优秀的PHP开发环境
2009.04.23 // No Comments
Zend Studio一个屡获大奖的专业 PHP 集成开发环境,具备功能强大的专业编辑工具和调试工具,支持PHP语法加亮显示,支持语法自动填充功能,支持书签功能,支持语法自动缩排和代码复制功能,内置一个强大的PHP代码调试工具,支持本地和远程两种调试模式,支持多种高级调试功能。 自从Zend Studio 5.5 之后,Zend Studio 基于 Eclipse 和 PDT 开发,改为Zend Studio for Eclipse,加入了ZendStudio的专用特性,ZF框架,ZendCore Zend Platform等。 关于 Zend Studio 5.5 的详细信息请看这里:http://mimiz.cn/index.php/web/php-integrated-development-environment-zendstudio/ 目前最新版Zend Studio for Eclipse 6.1.2下载地址: Windows: http://downloads.zend.com/studio-eclipse/6.1.2/ZendStudioForEclipse-6.1.2.zip Linux: http://downloads.zend.com/studio-eclipse/6.1.2/ZendStudioForEclipse-6.1.2.tar.gz 提供几个注册码: User Name / Order:mimiz.cn License Key:7B2E609E216668150000 User Name / Order:mimiz_cn License Key:6F4CFCAD286663810000

