使用PHP作为Apache模块的编码不正确

时间:2011-08-08 09:11:02

标签: php encoding character-encoding module cgi

我在运行PHP作为Apache 2.2模块时遇到了非常具体的问题。当运行PHP作为CGI时,一切正常,但速度慢。我在这种情况下获得的输出是:

Good charset

但是当在同一环境中运行PHP作为Apache模块时,我得到以下输出:

Wrong charset

唯一的区别是我在httpd.conf

中将以下行添加到适当的VirtualHost中
SetEnv PHPRC "C:/PHP5/"
ScriptAlias /local-bin/ "C:/PHP5/"
AddHandler application/x-httpd-php5 php
Action application/x-httpd-php5 "/local-bin/php-cgi.exe"
<Directory "C:/PHP5/">
  Order allow,deny
  Allow from all
  <Files "php-cgi.exe">
    Allow from all
  </Files>
</Directory>

该网站使用2个数据库 - 一个MySQL和一个MSSQL。从MSSQL数据库中检索显示不正确的文本。从MySQL数据库检索的文本没有任何问题。 任何想法如何运行PHP作为Apache模块,并获得与运行PHP作为CGI相同的输出?

我的设置是:Apache 2.2; PHP 5.2.17; mssql PHP扩展7.0; mbstring PHP扩展4.4.4

CGI模式下的标题,由curl -i

返回
HTTP/1.1 200 OK
Date: Mon, 08 Aug 2011 11:56:15 GMT
Server: Apache/2.2.16 (Win32) mod_ssl/2.2.16 OpenSSL/0.9.8o
X-Powered-By: PHP/5.2.13
Expires: Thu, 19 Nov 1981 08:52:00 GMT
Cache-Control: no-store, no-cache, must-revalidate, post-check=0, pre-check=0
Pragma: no-cache
Set-Cookie: PHPSESSID=3h4kpps0l02pecfgktonq7rjd6; path=/
Transfer-Encoding: chunked
Content-Type: text/html

PHP中的标头作为模块模式:

HTTP/1.1 200 OK
Date: Mon, 08 Aug 2011 12:04:16 GMT
Server: Apache/2.2.16 (Win32) mod_ssl/2.2.16 OpenSSL/0.9.8o PHP/5.2.13
X-Powered-By: PHP/5.2.13
Set-Cookie: PHPSESSID=hi9h3skbsjvpcr7usdlf36d2t7; path=/
Expires: Thu, 19 Nov 1981 08:52:00 GMT
Cache-Control: no-store, no-cache, must-revalidate, post-check=0, pre-check=0
Pragma: no-cache
Transfer-Encoding: chunked
Content-Type: text/html

3 个答案:

答案 0 :(得分:1)

我不知道究竟是什么问题,但现在一切似乎都运转正常。我刚刚下载了新的PHP包并从头开始配置它。我没有提到的是我使用ZendServer社区版,它似乎导致了问题(顺便说一句,使用相同的PHP 5.2.17版本)。当我配置虚拟主机以使用我的全新PHP安装时 - 一切正常,但是当我使用PHP内置的ZendServer时会导致问题。

答案 1 :(得分:0)

  

如何将PHP作为Apache模块运行并获得与运行PHP作为CGI相同的输出?

通常输出因模块类型而有所不同,但由于配置原因。只需在SAPI类型中保持相同的配置即可。

  

该网站使用2个数据库 - 一个MySQL和一个MSSQL。从MSSQL数据库中检索显示不正确的文本。

看起来从MSSQL检索失败。检查数据是否在数据库中正确编码。检查客户端编码设置。这应该可以解决您的问题。

答案 2 :(得分:0)

您应该使用内容类型指明编码,例如

Content-Type: text/html; charset=utf-8

这解决了大多数问题。