集成MSYS的Shell到Windows资源管理器右键菜单

MSYS为Windows提供了丰富的Linux工具集的移植版本,比如bash、make、gawk、grep等,为了更方便的使用其提供的命令行工具,我把它添加到了Windows资源管理器的右键菜单中。

工具准备

MSYS-CN: https://code.google.com/p/msys-cn/
这里我使用了能更好的支持中文的MSYS-CN版本

打开加加: http://www.freewebs.com/dengdun/cn/openxx.htm
一个方便添加自定义右键菜单的小工具

配置右键菜单

安装好“打开加加”,并将下载的MSYS-CN解压,我这里解压在 D:\Dev\MSYS,按下图所示配置:
Open++
为了使界面看起来更友好,我这里使用rxvt来调用msys-bash,其中的参数为:

-tn msys -sl 3000 -fn Fixedsys -fg white -bg black -sr -e D:\Dev\MSYS\bin\bash.exe --login -i

注意将路径修改为你自己的MSYS所在路径

启动目录修正

MSYS在默认情况下会把当前目录重置为虚拟的当前用户主目录,这样便失去原本想要在当前目录执行命令的便利性,为了使msys-bash启动后停留在当前目录,我们需要做一些小改动。
打开MSYS中的\etc\profile文件,找到里面最后部分的

# Enter home dirctory
cd "$HOME"

将切换到用户主目录的代码注释掉,变成

# Enter home dirctory
#cd "$HOME"

大功告成!现在尽情享用MSYS工具的便利吧!
MSYS-CN

参见:

  1. MSYS – http://mingw.org/wiki/msys
  2. MSYS-CN – https://code.google.com/p/msys-cn/
  3. 打开加加 – http://www.freewebs.com/dengdun/cn/openxx.htm

在 Windows 下为 PHP 5.4 安装 PEAR、PHPUnit 及 phpDoc2

1.安装PEAR

官方网站: http://pear.php.net/

PHP 5.4 的 Windows 包中没有自带 PEAR,下载 http://pear.php.net/go-pear.phar 到PHP目录,并运行:

php go-pear.phar

安装完成后PHP目录下会产生一个名为 pear.bat 的批处理文件,并且会在系统中添加以下环境变量(用户变量,假定PHP安装在C:\php):

PHP_PEAR_BIN_DIR=C:\php
PHP_PEAR_DATA_DIR=C:\php\data
PHP_PEAR_DOC_DIR=C:\php\docs
PHP_PEAR_INSTALL_DIR=C:\php\pear
PHP_PEAR_PHP_BIN=C:\php\php.exe
PHP_PEAR_SYSCONF_DIR=C:\php
PHP_PEAR_TEST_DIR=C:\php\tests

在写使用了 PHP 的批处理脚本时可以好好利用下这些环境变量。

在命令行输入:

pear version

如果有显示类似如下信息,说明 PEAR 已经成功安装:

PEAR Version: 1.9.4
PHP Version: 5.4.4
Zend Engine Version: 2.4.0
Running on: Windows NT ACER-TM4750G 5.1 build 2600 (Windows XP Professional Service Pack 3) i586

2.安装 PHPUnit

官方网站: http://www.phpunit.de/
PHPUnit 3.6 需要 PHP 5.2.7 (或更改版本) 但强烈推荐使用 PHP 5.3.9 (或更高版本)。

PHPUnit 使用PEAR进行安装:

pear config-set auto_discover 1
pear install pear.phpunit.de/PHPUnit

安装完成后PHP目录下会产生一个名为 phpunit.bat 的批处理文件。

在命令行输入:

phpunit --version

如果有显示类似如下信息,说明 PHPUnit 已经成功安装:

PHPUnit 3.6.11 by Sebastian Bergmann.

注意,在 PHP 官方 PEAR 频道上也有两个 PHPUnit 的包,名称分别为 PHPUnit 和 PHPUnit2 ,这两个包都是旧版本,分别是 1.x 和 2.x 的版本,如果你使用下面的方式直接安装:

pear install phpunit

那你安装的就是为 PHP 4.x 提供的旧版本 PHPUnit 1.x 了,要使用最新的 PHPUnit 3.x 版本,你需要使用 pear.phpunit.de 这个频道。

使用PHPUnit:

%PHP_PEAR_BIN_DIR%\phpunit test.php

3.安装 phpDocumentor 2

官方网站: http://www.phpdoc.org/
phpDocumentor 2 是为PHP 5.3 或更高版本的所有特性生成 API 文档而创建。

phpDocumentor 2 同样使用PEAR进行安装:

pear channel-discover pear.phpdoc.org
pear install phpdoc/phpDocumentor

安装完成后PHP目录下会产生一个名为 phpdoc.bat 的批处理文件。

在命令行输入:

phpdoc --version

如果有显示类似如下信息,说明 phpDocumenter 2 已经成功安装:

phpDocumentor version 2.3.1

使用方法,在要生成文档的项目所在目录运行:

%PHP_PEAR_BIN_DIR%\phpdoc -d . -t docs

PHP 5.4 中经 htmlspecialchars 转义后的中文字符串为空的问题

PHP 5.4.3 环境中测试了一个在 PHP 5.2 环境下运行正常的程序,却发现本应正常提交一个中文字符串到数据库的代码却提交了一个空字符串,经过排查,该字符串在经 htmlspecialchars 函数转义之前正常,而在转义之后却变成了空字符串。调用例子如下:

$str = '中文字符串';
$str_converted = htmlspecialchars($str);
echo $str_converted;

遂查看PHP手册,获知 htmlspecialchars 函数原型如下:

string htmlspecialchars ( string $string [, int $flags = ENT_COMPAT | ENT_HTML401 [, string $encoding = 'UTF-8' [, bool $double_encode = true ]]] )

更新日志里面又有提到:

5.4.0 The default value for the encoding parameter was changed to UTF-8.  
5.4.0 The constants ENT_SUBSTITUTE, ENT_DISALLOWED, ENT_HTML401, ENT_XML1, ENT_XHTML and ENT_HTML5 were added. 

PHP 从 5.4.0 版本开始第三个参数字符串编码的默认值改成了 UTF-8,而我这段代码中的中文编码正好是 GB2312 编码的,跟现在的默认参数不一致,于是更改调用参数如下:

$str = '中文字符串';
# 为了与旧环境兼容,这里第二个参数没有组合使用 PHP 5.4 新加入的 ENT_HTML401 常量
$str_converted = htmlspecialchars($str, ENT_COMPAT ,'GB2312');
echo $str_converted;

这样,“中文字符串”就可以正常显示了。为了使 PHP 5.4 之前环境中编写的代码能够向前兼容,建议调用 htmlspecialchars 函数的的时候都提供字符串编码参数。

参考: http://php.net/htmlspecialchars

启用IPv6后MySQL客户端软件无法连接localhost的问题

一次在为了尝试使用 IPv6 网络而在 Windows XP SP3 环境中启用了 IPv6 协议之后,发现 HeidiSQL、Navicat Lite 9 这两个客户端均无法连接到在本机搭建的 MySQL 服务器 localhost ,而在 Apache + PHP 环境中运行的 phpMyAdmin 却是正常,虽然知道是 IPv6 引起的,但是卸载掉 IPv6 实在是个低级的办法,于是摸索着其它解决方法,估计是由于启用了 IPv6 后 MySQL 默认绑定到了 ::1 这个 IPv6 的回环地址上,然后找到了一个办法,在my.ini添加 bind-address 配置如下:

[mysqld]

# The TCP/IP Port the MySQL Server will listen on
port=3306

# 如果启用了IPv6,默认会绑定IPv6地址,某些MySQL管理软件不支持连接到IPv6的地址(如[::1]:3306),故此处设置绑定IPv4地址
bind-address = 0.0.0.0

CentOS 5.6 中为 PHP 安装 Suhosin (扩展形式)

0.安装php-devel包

yum install php-devel

1.下载 suhosin 0.9.29 版本(经测试,0.9.30 以上版本与CentOS中的PHP 5.1.6不兼容)

wget http://download.suhosin.org/suhosin-0.9.29.tgz

如果你使用的是 PHP 5.3 版本,可以到这里找到最新的suhosin源码下载地址
Suhosin Downloads: http://www.hardened-php.net/suhosin/download.html

2.解压、编译并安装

tar xvfz suhosin-0.9.29.tgz
cd suhosin-0.9.29
phpize
./configure
make
make install

3.把suhosin扩展加入到PHP配置文件

echo 'extension=suhosin.so' > /etc/php.d/suhosin.ini

4.重启 Apache 以加载 suhosin 扩展

service httpd restart

x.确认 Suhosin 已安装

php -v

查看是否有以下信息:
with Suhosin v0.9.29, Copyright (c) 2007, by SektionEins GmbH

或者在phpinfo()信息中查找 suhosin 扩展信息(与编译安装suhosin时不一样,这里不是和Zend信息显示在一起的)

参见:

  1. http://www.cyberciti.biz/faq/rhel-linux-install-suhosin-php-protection/
  2. http://www.howtoforge.com/how-to-harden-php5-with-suhosin-on-centos-5.4