Войти

Показать полную графическую версию : Проблемы с перекодировкой данных из MYSQL


Di_Mon
16-12-2005, 15:40
Мне дали готовый сайт + дамп базы который успешно работает, размещен в инете.

Но когда я поставил его у себя дома, начала выдаватся ошибка 500. Проблема в файле .htaccess, а конкретно с этими строчками:

RewriteEngine On

RewriteBase /

RewriteRule ^([a-z]{2})/?$ index.php?LANGUAGE=$1 [L]
RewriteRule ^([a-z]{2})/([a-zA-Z_/-]+)/$ index.php?LANGUAGE=$1&cat=$2 [L]
RewriteRule ^([a-z]{2})/([a-zA-Z_/-]+)/(.+)/$ index.php?LANGUAGE=$1&cat=$2&page=$3 [L]
RewriteRule ^([a-z]{2})/([a-zA-Z_/-]+)/([0-9]{4})/([0-9]{2})/([0-9]{2})/(.+)/$ index.php?LANGUAGE=$1&cat=$2&nyear=$3&nmonth=$4&ndate=$5&page=$6 [L]
RewriteRule ^([a-z]{2})/([a-zA-Z_/-]+)/([0-9]{4})/([0-9]{2})/([0-9]{2})/(.+)\.html index.php?LANGUAGE=$1&cat=$2&nyear=$3&nmonth=$4&ndate=$5&eid=$6 [L]
RewriteRule ^([a-z]{2})/([a-z_/-]+)\.html index.php?LANGUAGE=$1&cat=$2 [L]
#RewriteRule ^([a-z]{2})/([a-z_/-]+)/(.+)\.html index.php?LANGUAGE=$1&cat=$2&page=$3 [L]
#RewriteRule ^([a-z]{2})/([a-zA-Z_/-]+)/\.html? index.php?LANGUAGE=$1&cat=$2 [L]
#RewriteRule ^([a-z]{2})/([a-zA-Z_/-]+)/$ index.php?LANGUAGE=$1&cat=$2 [L]

Файл убал, но после этого данные из базы вставляются в страничку знаками вопроса :(

Подскажите плз, что это за директивы, и как заставить апач их разуметь :)

Igor_I
16-12-2005, 20:06
С Rewrite я не знаком, но по ходу в сайте есть переменная LANGUAGE и вот отсутсвие ее приводит к таким последствиям. Лучше бы ты разобрался с ошибкой 500. Посмотри лог веб-сервера.

Di_Mon
17-12-2005, 13:25
Invalid command 'RewriteEngine', perhaps mis-spelled or defined by a module not included in the server configuration, referer: http://site/

Вот такая вот ошибочка :)

Di_Mon
17-12-2005, 13:44
В httpd.conf расскоментировал такую строчку:

LoadModule rewrite_module modules/mod_rewrite.so

Теперь ругается и выдает 403 ошибку :(

Это логи:

Options FollowSymLinks or SymLinksIfOwnerMatch is off which implies that RewriteRule directive is forbidden: E:/My Documents/My Website/site/site1/, referer: http://site/

benya
17-12-2005, 15:53
А у вас включен контроль директив из .htaccess??? В виндовс при установке апача они по умалчанию запрещены. Поправьте в httpd.conf строчку AllowOverride All
И будет Вам счастье. Кажется так.

mar
17-12-2005, 16:00
во-первых, скрорей всего benya прав.
во-вторых, ежели русским языком сказано Options FollowSymLinks or SymLinksIfOwnerMatch is off , что вызывает и так далее по тексту, так включите их (хотя не очень понимаю, как это Вам поможет под win :[ )

Di_Mon
19-12-2005, 02:25
Подправил httpd.conf - теперь все директивы в .htaccess Апвач понимает, но проблема с кодировкой не ушла :( В чем проблема может быть?

mar
19-12-2005, 11:17
Di_Mon
хорошо. несколько вопросов:
- в какой кодировке база (можно проверить через phpmyadmin)
- в какой кодировке выходят страницы сайта?
- какие значения получает переменная LANGUAGE в GET-запрсах (url из дериктивы .htaccess)?
- не стоит ли какой-нибудь дефолтной кодировки апача?

Igor_I
19-12-2005, 19:48
Di_Mon
Без обид, но по-моему mar задала слишком мудренные вопросы :)
если немного попонятнее
1 скриншот базы в phpmyadmin
2 charset=??? на странице исходного кода в броузере
3
4 а вот здесь у меня косяк, не нашел я где ставится дефолтная кодировка, только AddCharset - штук 6

Хотя на самом деле - какая версия базы, если MySQL 4.1.* то http://phpclub.ru/faq/wakka.php?wakka=Mysql41Rus

Di_Mon
19-12-2005, 20:56
Без обид, но по-моему mar задала слишком мудренные вопросы

Igor_I ну, ты меня недооцениваешь! :D

Версия MySQL 4.1.14-nt

Кодировки перепробывал все! Сейчас Значения такие

<quote>
Переменная Значение сессии Глобальное значение
character set client utf8 cp1251
character set connection cp1251 cp1251
character set database cp1251 cp1251
character set results utf8 cp1251
character set server cp1251 cp1251
character set system utf8 utf8 </quote>

Кодировка странички charset=windows-1251

какие значения получает переменная LANGUAGE в GET-запрсах (url из дериктивы .htaccess)?

Вот это поподробнее. Как я понимаю речь про ПХП?

И некоторые директивы из httpd.conf


DefaultLanguage ru
...
AddLanguage ru .ru
...
LanguagePriority ru ua en...
...
AddCharset WINDOWS-1251 .cp-1251 .win-1251
AddCharset CP866 .cp866
AddCharset KOI8-r .koi8-r .koi8-ru
AddCharset KOI8-ru .koi8-uk .ua
AddCharset ISO-10646-UCS-2 .ucs2
AddCharset ISO-10646-UCS-4 .ucs4
AddCharset UTF-8 .utf8

Igor_I
19-12-2005, 23:16
Igor_I ну, ты меня недооцениваешь! :D
Ну извини :)
Ссылку читал?

Di_Mon
20-12-2005, 20:57
Читал. Наиболее перспективным показался этот путь:

Заставить My SQL автоматом выполнять этот запрос при каждом коннекте к нему. Для этого нужно в файле my.cnf/my.ini (где их искать — в документацию) в раздел [server] добавить следующую строку: init-connect="SET NAMES кодировка"

Однако, следует заметить, что это НЕ будет работать, если пользователь, которым вы подключаетесь к базе имеет привилегию SUPER (а стандартный пользователь root к таким относится, так же как и все созданные через «GRANT ALL PRIVILEGES ON *.* TO ...»). Это сделано для того, чтобы в случае ошибки в этом запросе (а его можно изменить во время работы), хоть кто-то мог подключиться к базе и исправить его.

Внимание! Функция mysqli_client_encoding() и сотоварищи, отображает кодировку клиента на момент соединения и не меняют возвращаемое значение в процессе работы. Поэтому не стоит кричать, что кодировка не меняется. Просто делайте что говорят и смотрите результат работы скрипта. Получить нужное значение можно SQL-запросом “SHOW VARIABLES LIKE 'character_set_client'".

В # SERVER SECTION
Вставил вот эту строчку
init-connect="SET NAMES cp1251"

Но проблему это не решило. Видимо из за root

Скриптов очень много да и не силен я в ПХП :)

Подскажите что б еще попробывать :sorry:

vadimiron
20-12-2005, 21:35
Видимо из за root
А вы не пользуйтесь базой данных под root-ом, создайте юзера с правами на чтение и запись в базу, всё остальное всё равно не нужно, и тогда используйте эту строчку в ини-файле, у меня тоже самое было и теперь всё работает

Igor_I
20-12-2005, 21:55
Видимо из за root
Действительно, это же дыра, черт знает каких размеров. :)

Di_Mon
20-12-2005, 22:16
Кстати, phpMyAdmin показывает что есть проблемы:

Директива $cfg['PmaAbsoluteUri'] должна быть установлена в Вашем конфигурационном файле!

The mbstring PHP extension was not found and you seem to be using multibyte charset. Without mbstring extension phpMyAdmin is unable to split strings correctly and it may result in unexpected results.

Как это безобразие исправить?

vadimiron
20-12-2005, 23:51
Активировать это самое расширение в php.ini и проконтролировать, лежит ли файл данного расширения в папке расширений PHP




© OSzone.net 2001-2012