目前服务安装模式:Apache2.2.8(win32)+php5.2.5+win2003,以cgi模式安装,同时还张加上了svn1.4.5(server)+mod_ssl+openssl/0.9.8g,在遇到本问题之前,一切都工作良好.项目要求使用已有的USB-KEY来实现身份验证,使用系统时必须插入该USB-KEY,这个硬件证书里,存储着用户的姓名--中文和其他一些信息,配置好了服务器证书,在apache的配置文件里写好了ssl相关配置,在开启必须请求客户端证书(SSLVerifyClient require)之前,服务器证书已经能够正常工作。项目进展到这一步时遇到了麻烦:
为了完美地解决xml的导出和导入并正确地支持中文,于是便将所有的php、js、css等全部转为了utf8编码,而随后,将ssl客户端证书请求开启后(去掉 SSLVerifyClient require 的注释),一访问https://127.0.0.1/ 就出现500错误,查看apache日志为:(22)Invalid argument: utf8 to ucs2 conversion failed on this string: REDIRECT_SSL_CLIENT_S_DN_CN=\x8duR\xc7
[notice] Child 3052: Child process is exiting
[Mon Apr 28 13:13:28 2008] [error] [client 192.168.10.80] (22)Invalid argument: couldn't create child process: 22: php-cgi.exe
[Mon Apr 28 13:13:28 2008] [error] [client 192.168.10.80] (22)Invalid argument: couldn't spawn child process: G:/php525/php-cgi.exe而如果仅访问htm文件,如 https://127.0.0.1/t.htm 则能够正常显示。简单分析,很有可能是php报出来的错,网上到处找了找,据说是php5以后的版本有此问题,也有说是apache2.0版本之前的有此问题,网上有很多反映get中文出错,但是都没有解决办法,还找了些英文的,也没有办法。另外,如果是程序本身的编码问题,倒可以简单地通过urlencode处理一下就OK,但是由于是在usb-key里的汉字,没有办法更改。尝试过以下一些方法,但是问题依旧:
1、换php版本为4.4.8
2、php4.4.8+修改所有的程序编码回gb2312
3、php5.2.5+程序编码utf8
4、视图用apache1.3.*,拙,没找到这个问题已经好多天时间了,依然没有解决。
我的问题:
1、是apache的错,还是php的错?
2、是版本的错?还是我本身配置的错?
3、又或者是证书方面使用的问题 ?
4、怎么解决?