Thursday, August 12, 2010

PHP 5.3 无法连接 MySQL localhost 服务器问题

最近在 Windows 7 上搭建 WEB 开发环境,下载了各组建最新的版本:
  • Apache httpd 2.2.16
  • MySQL 5.1.49
  • PHP 5.3.3
  • phpMyAdmin 3.3.5

照常安装好以后,phpinfo() 运行一切正常但是在 phpMyAdmin 中却无法连接本机的 MySQL。点击“登录”按钮后,页面等待很长时间,然后出现白页。

经过多番搜寻,终于找到了问题的原因。PHP 升级到 5.3 版本后开始使用 native 的 MySQL 驱动,该驱动连接 MySQL 服务时的行为和之前的 libmysql.dll 有所区别,新驱动对 localhost 的解析,似乎是基于 Windows 自己的 hosts 文件的。而在 Windows Vista / Windows 7 以及 Windows Server 2008 上,hosts 文件里 localhost 解析为 ::1,而非传统的 127.0.0.1。开一个 CMD 的窗口执行 ping localhost 即可验证。从而导致函数 mysql_connect() 无法解析和链接到 localhost。

不仅 phpMyAdmin,用 PHP 5.3.x 在任何时候连接 MySQL 的 localhost 服务器都会出现类似问题,例如:
$db = new PDO('mysql:host=localhost;dbname=windia', DB_USER, DB_PASS);

解决的办法有两个:
  • 在代码中避免使用 localhost 而使用 127.0.0.1
  • 将 Windows 的 hosts 文件中
    ::1          localhost
    改为
    127.0.0.1    localhost

Thursday, March 04, 2010

Blogger FTP 迁移工具发布

今天下午 2 点左右,Blogger 专门发布 FTP 功能关闭及转移相关信息的 Blog “Blogger FTP Info”发布消息说 Blogger FTP 的迁移工具上线了Twitter 上的 Blogger 官方帐号也同步发布了这条消息。

目前这个迁移工具还在试用和观察阶段,因此仅在“Blogger in draft”有效。如果你的 Blogger 是基于 FTP 发布且开启了 Blogger in draft,那么现在登录你的 Dashboard,就会发现如下图的一块提示信息,告诉你 FTP 发布功能将会关闭,建议迁移到 BlogSpot 或者用 Custom Domain 功能代替。

Blogger FTP 移植工具提示框

消息以及以上提示框中都提到,FTP 发布功能停止的期限是 2010 年 5 月 1 日,比起先前通知的 2010 年 3 月 25 日,期限又宽限了一个多月。

这则消息还提供了一个视频,用来指导用户如何使用迁移工具对 FTP 发布的 Blog 进行迁移。主要包括以下步骤:
  • 用户选定一个 BlogSpot 二级域名或者 Custom Domain 的域名
  • 如果是 Custom Domain,则需要把自己选定的域名的 CNAME 记录指向 ghs.google.com
  • Blogger 根据用户选定的方案和域名创建新的站点
  • Blogger 向原 FTP 服务器重新发布所有的页面,给所有 HTML 页面添加两条标签:rel-canonicial,用来指示页面的新 URL;meta-refresh,当读者访问旧页面时自动跳转到新的 URL。如果文章数量很多的话,该操作会花费很长时间。工具提供了一个选项,可以让该操作完成时发送邮件通知你。
  • Blogger 向原 FTP 服务器发送一篇新文章,告知所有的读者该 Blog 发生了迁移,同时也通知所有的订阅读者更新订阅地址
  • Blogger 随机请求一些原 FTP 服务器上的页面,确保迁移跳转的内容添加成功
  • 迁移完成,读者用新的地址访问 Blog

总的来讲迁移过程还算简便,对原 Blog 的影响应该说也降到了最低。但其中涉及到重新发布所有页面的环节,对于文章数量很多的博主来说,这个过程及有可能会中断或者失败。至少最近几个月以来,我发布文章时,FTP 上传操作几乎没办法一次成功,更何况是重新发布整个 Blog。

我之前有篇文章提到 Blogger FTP 发布功能关闭的应对措施,因为 BlogSpot 和 Custom Domain 功能在国内都因被墙而无法使用,另外 Blogger 提供的 Layout 模版管理对于我来讲仍然不够灵活,没有对整个网站所有文件的完全控制权,因此我无法,也不会将目前 FTP 发布的 Blog 迁移到 BlogSpot 或者 Custom Domain。解决方案是利用 Blogger 提供的 Feed 接口将所有文章数据同步到本地数据库,然后自己写一些 PHP 脚本利用这些数据直接在服务器上生成静态 HTML 文件。这样,既可以继续使用 Blogger 网站来编辑文章,保存文章;读者访问时直接访问静态页面或使用本地数据库,页面打开速度仍然有保证;我也可以按照自己的方式随心所欲编辑模版,开发各种功能,可谓一举数得。目前这个工作已经开始了,加上 Blogger 又宽限些时间,因此一定可以赶在 FTP 发布功能失效前完成。

Tuesday, March 02, 2010

NOKIA 手机安装 MIDlet 时出现“Conflicting application”错误及解决

最近发现在某些诺基亚(NOKIA)手机上安装带有 Push Registry 功能的 MIDlet 时,会发生安装失败的情况。错误信息有可能是“Push registry failure”(S60v3),或者“Conflicting application”(S40v6),出现这个错误的直接原因,应该是安装程序在执行 Push Registry 注册时失败,认为要注册的目标端口已经被其它应用程序占用。

实际的情况是之前安装过同样的 MIDlet 的旧版本并已经删除。然而,无论是软格机、硬格机,用 Nokia Software Updater 重装/升级 Firmware,都无法解决。

最后发现一个简单但有效的解决办法:
  • 将 JAD Property 的 MIDlet-Push-1 中 Push Registry 的端口改成别的端口
  • 这时 MIDlet 应该能够正常安装。如果你的应用并不在乎使用哪个具体的端口,那么到这里问题就已经解决了
  • 如果应用必须使用之前的那个固定端口,那么将安装好的 MIDlet 删除(卸载)掉,将 JAD 中的端口再改回去,然后就可以正常安装了

Wednesday, February 10, 2010

Windows x64 下 Cisco VPN Client 的替换方案

买了新机器,为了解决硬盘问题重装了系统,顺便装了 Windows 7 x64,绝大多数情况下都没有软件兼容的问题,唯独碰到 Cisco VPN Client 不兼容 Windows x64 且没有提供 64 位的版本。

Google 了一番,发现 Cisco 为 Windows x64 的操作系统提供了一个名为 Cisco AnyConnect VPN Client,但官网上需要特殊的认证用户才能下载,而几经搜索也没找到其它的下载网站。

最后,发现有个国外的论坛有人回复说用 Shrew VPN Client 可以正常的在 Windows x64 下运行。下载下来试用,发现真的不错。安装运行都很简单,关键是还能够直接导入 Cisco VPN Client 的 pcf 配置文件,不用花精力去研究参数配置。所以如果你也需要在 x64 的 Windows 下运行 VPN 客户端又无法安装 Cisco VPN Client,不妨试试这个 Shrew VPN Client。

Friday, February 05, 2010

西数 EARS 绿盘使用心得

这周新配了台电脑,主板:微星 P55-CD53 / CPU:Intel i5 750 / 内存:金士顿 DDR3-1333 2G / 显卡:影驰 GTS250 黑将版 / 硬盘:西数 1TB/64M 绿盘(WD10EARS)。

买回来整体感觉非常好,除了这块西数的新技术 EARS 绿盘。从装 Windows 7 系统开始,到更新系统、安装驱动,系统反应都让人难以忍受。在我 06 年买的笔记本上装 Win7,仅花了不到半个小时,而在这台机器上花了一个多小时。另外用迅雷下载一个几十兆的驱动压缩包,点“开始下载”后,要过 2-3s 界面才会有反应。在使用过程中,硬盘灯大部分时候都长亮,开关机时间也很长,远比我的笔记本开关机慢,系统整体毫无性能可言。这完全不像一台 i 平台的电脑该有的情况。

经过多番搜索查找,到论坛上询问与讨论,做了如下改进和设置,现在虽然硬盘性能仍不尽如人意,但也算可以忍受。打电话到卖电脑的商家,说硬盘本身没问题不给换,要换也是同样型号的硬盘,因此也只能忍了。

这里分享一下我做的改进和设置,希望对同样使用西数 EARS 硬盘忍受暴差性能的朋友能有所帮助。

“高级格式化”技术和 WD Align 软件
从最近推出的 EARS 系列(有 1.0T/1.5T/2.0T 三个型号)硬盘开始,西数推出了一项称为“高级格式化”的技术,简单的理解,就是将传统硬盘每扇区 512 字节改为每扇区 4K 字节。由于 Vista / Win7 系统都能很好的管理 4K 的扇区,因此如果是在 Vista / Win7 下安装格式化,则不需要做任何特别的设置和操作即可发挥硬盘性能,而在 Windows XP 系统下,则需要用西数提供的专门的软件 WD Align。

西数官方网站 WD Align 下载页面详细给出了哪些情况需要使用 WD Align 软件的情况。我的这块硬盘当时装机时是装机师傅用 Ghost 分区然后克隆的操作系统,因此理论上并未发挥硬盘性能。所以特地在 Win7 下安装并执行 WD Align 软件。

安装和执行过程比较简单,根据提示操作即可。安装完开始执行,程序会自动检测系统中的 EARS 硬盘,确认执行 Alignment 操作后系统重启并进入 WD Align 软件界面。执行转换的过程不需要人工干预。我 1TB 的硬盘,只有 C 盘有大约 5GB 的数据,转换过程耗时约 30 分钟。转换完成后会自动重启,进入 Win7 系统,WD Align 软件自动启动,检查转换是否顺利完成,然后退出。

执行完 WD Align 的转换操作后,感觉系统性能有明显的提升。桌面窗口、菜单操作明显不像之前有那么多卡顿的感觉。

开启主板 AHCI 模式及 NCQ 功能
AHCI(Serial ATA Advanced Host Controller Interface / 串行ATA高级主控接口),是在Intel的指导下,由多家公司联合研发的接口标准。使用该技术可让 SATA 储存设备启用高级 SATA 功能,例如原生指令队列(NCQ, Native Command Queuing)及热插拔。

据 Wikipedia 资料:使用 NCQ 功能,通过硬盘固件、硬盘控制器以及操作系统三者的互相配合,改善硬盘内部磁区的读取顺序,可以提高硬盘效能约30%,亦能够轻微减轻硬盘损耗的速率。

从主板 P55-CD53 的说明书上可以看到该主板已经支持 AHCI 模式,而这块新出的硬盘以及 Windows 7 操作系统也理所当然的支持。于是我重启系统到 BIOS 中将 ATA 控制器模式由 IDE 改为 AHCI,重新引导系统,结果 Windows 7 蓝屏,并立即重启了。

纳闷之余搜索了一番,了解到 AHCI 必须在安装操作系统之前就开启,否则安装后 Windows 7 会认为没有使用 AHCI 模式而屏蔽相关的驱动。不过也搜到一篇文章,讲解通过修改注册表,再开启 BIOS 的 AHCI 模式,然后进入 Windows 7 后,系统就会自动开始安装驱动,从而开启 AHCI 模式。具体的注册表路径为:
HKEY_LOCAL_MACHINE\System\CurrentControlSet\Services\Msahci
将值由原来的 3 改为 0 即可。

照此修改后确实可行,但 AHCI 开启后,HD-Tune、Everest 等软件均无法获取硬盘信息。想起在一篇论坛的帖子中有人提到,安装系统后再开启 AHCI,看起来好像是启用了,但实际对性能并无实际提升。想到目前反正系统也是刚装的,因此索性就在 BIOS 开启 AHCI 的状态下把 Windows 7 重装了一遍,顺便换上了 x64 的版本。

重装后 HD-Tune 和 Everest 都能顺利查出硬盘信息了,另外安装主板驱动提供的 Intel Matrix Storage Manager 软件后,可以查询到硬盘的 NCQ 功能已经开启。

至此,整个系统使用起来感觉比刚开始性能有不小的提升。窗口、菜单操作没有明显的卡顿,开关机速度也有非常明显的改观,至少比我笔记本上同样的 Win7 旗舰版要快。尽管从 HD-Tune 的读取测试,FastCopy 软件的文件拷贝测试来看,性能和速度比起网上给出的西数黑盘有较大差距,但这“较差的性能”已经到了一个可以忍受的范围内,毕竟绿盘的卖点是节能、低噪而不是性能和速度。

最后对于这块西数的新技术 EARS 绿盘,感觉买的比较后悔。或许作为仓库盘来用是不错的选择,但如果是系统盘,完全不值得推荐,价格相差仅几十元的 WD1001FALS 黑盘应该是更好的选择。

Monday, January 25, 2010

Blogger 将关闭 FTP 发布功能及应对措施

Blogger Buzz 上周末发布消息称 Blogger 将于 2010 年 3 月 26 日停止 FTP 发布功能,原因是目前所有的活跃 Blogger 用户中,仅有 0.5% 的用户使用 FTP 发布,而 Blogger 用于支持这一功能的资源则远超过这个比率。

我的 Blog 从 2005 年开始就一直使用 Blogger 的 FTP 功能发布,已经有四年多的时间,也因为这样所以一直可以相对正常的访问。说“相对”是因为 blogger.com 域名被封,时不时的也会引起页面的外部 CSS / JavaScript 资源无法访问,Feed 内容无法访问引起评论失败等问题。现在 Blogger 官方宣布将彻底停止 FTP 功能的支持,将会对我这两个 Blog 带来四年来最大的一次冲击。

不过可以肯定的是,我不会关闭这两个 Blog,也不回搬家到别家 BSP。其实最近一两年,随着文章数量的增加,利用 FTP 发布已经变得越来越困难,平均十次发布,至少要失败五次。而按现在 Blogger 的机制,无论是发布文章还是有网友发表评论,首页、文章页面以及相关的标签页面都会重建,如果修改模版,则所有的页面都需要重建,这样高的失败率,让人很难觉得这是一个好用的产品。

由于页面代码优化的需要以及应对 blogger.com 域名从国内无法访问的问题,我已经建立起一套机制实现从 Blogger Feed 下载文章的数据保存到本地数据库,用 PHP 扫描页面进行 XHTML 修改以及用 AJAX 获取相关文章 / 热门文章的功能,现在其实要保持 Blog 继续正常运行,只需要:
  • 在数据同步时将正文部分也下载
  • 利用下载的数据在本地用 PHP 重写 Blog 内容,或生成静态页面

这样不但免去了等待漫长的 FTP 发布以及高失败率的问题,也让我维护 Blog 变得更加灵活。

离 Blogger 停止 FTP 功能还有大约两个月的时间,我想已经足够我做这些改进了。