Неправильная кодировка с использованием PHP в качестве модуля Apache - PullRequest
0 голосов
/ 08 августа 2011

У меня очень специфическая проблема с запуском PHP как модуля Apache 2.2. Когда PHP работает как CGI, все работает нормально, но медленно. Вывод, который я получаю в этом случае:

Хорошая кодировка

Но при запуске PHP в качестве модуля Apache в той же среде я получаю следующий вывод:

Неправильная кодировка

Единственное отличие состоит в том, что я добавляю следующие строки в соответствующий VirtualHost в httpd.conf

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; PHP расширение mbstring 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 ]

1 голос
/ 17 августа 2011

Я не знаю, в чем была точная проблема, но теперь все работает нормально. Я только что скачал свежий пакет PHP и настроил его с нуля. Что я не упомянул, так это то, что я использую ZendServer Community Edition, и это, кажется, вызывает проблемы (кстати, с той же версией PHP 5.2.17). Когда я настраиваю виртуальный хост для использования моей новой установки PHP - все работает нормально, но когда я использую встроенный в PHP ZendServer, это вызывает проблемы.

0 голосов
/ 09 августа 2011

Вы должны указать кодировку с типом содержимого, например,

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

Это устраняет большинство проблем.

0 голосов
/ 09 августа 2011

Есть идеи, как запустить PHP как модуль Apache и получить тот же вывод, что и при запуске PHP, как CGI?

Обычно вывод не отличается из-за типа модуля, но из-за конфигурации,Просто сохраните одинаковую конфигурацию для типов SAPI, и все готово.

На веб-сайте используются 2 базы данных - одна MySQL и одна MSSQL.Текст, который отображается неправильно, извлекается из базы данных MSSQL.

Похоже, что получение из MSSQL завершается неудачно.Проверьте, правильно ли закодированы данные в базе данных.Проверьте настройки кодировки клиента.Это должно решить вашу проблему.

...