我在运行PHP作为Apache 2.2模块时遇到了非常具体的问题。当运行PHP作为CGI时,一切正常,但速度慢。我在这种情况下获得的输出是:
但是当在同一环境中运行PHP作为Apache模块时,我得到以下输出:
唯一的区别是我在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
答案 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
这解决了大多数问题。