Перейти до вмісту
Пошук в
  • Детальніше...
Шукати результати, які ...
Шукати результати в ...

мистические id-терминаторы


Recommended Posts

вот это увлекательный вечер у меня...

 

копаемся с заказчиком на тестовом поддомене, апдейтим сайт. я - файлы и прочее, он категории переименовывает и внутреннюю красоту наводит.

Вчера утром легла главная страница сайта с ошибкой 500. Естественно, первая мысль - на файлы. Но, после восстановления бекапа сайта, он не поднялся, а все исправилось после отката базы.

Заказчик был расстроен, что кучу работы переделывать.

 

а я думаю - почему база положила только главную, да еще и с internal server error?

в логах это: 

malformed header from script. Bad header=HTTP1.0/1.1 404 Not Found: index.php

в общем, так ни к чему и не пришли, решили забить данные в базу снова.

 

сегодня вечером все повторяется. Владелец сайта говорит, что в этот момент работал с фильтром товаров, уронил сайт явно он, по логам вижу.

и начались пляски  с бубном.

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

Сайт снова поднялся после отката базы.

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

 

есть таблицы:

category_option - id опции;

category_option_description -  id опции, имя опции;

category_option_value -  id значений опции, id соответствующей опции;

category_option_value_description - названия значений опции и  id опции.

 

В category_option_value_description присутствовали несколько строк с id опций 50 и 55. только их удаляю - сайт поднимается. Добавляю - ложится. никаких спецсимволов и прочего - просто текст. изменение их названий не помогло. В других таблицах - наоборот: удаляю записи - сайт падает. Добавляю - работает. Все уперлось именно в эти два айдишника.

 

Из админки добавляю им значений - ложится сайт.

удаляю вообще эти опции с этими айдишниками - ложится.

Меняю что угодно на что угодно - то же самое.

 

В общем, пока удалось через базу отключить эти опции, отвязать их от категорий (даже отключенные показывались), вытереть им значения опций. но удалить их не могу. Есть айдишники и больше 55, т.е. дальше записи идут корректно.

 

Как бы можно оставить и так и стараться никогда в админке не заходить в эти две опции. Но некрасиво же..

 

Собственно, вопросы:

1. Почему наличие этих строк ложит главную страницу?

2. Почему вообще БД роняет сайт с ошибкой 500 Internal Server Error?

3. Что это за ошибка в логе и как это он не может найти index.php?

4. Как удалить вообще все упоминания об этих опциях, ведь если записи идут дальше по порядку, значит можно?

 

Меня больше волнует второй вопрос, конечно...

Надіслати
Поділитися на інших сайтах

ошибку 500 смотрите в логах сервера, там должно быть больше информации об ошибке. 

возможно какой-то баг в этом модуле фильтра, возможно ошибка в mysql запросе, нужно изучать код модуля фильтра, но подобные модули обычно достаточно сложные для понимания логики работы, а заброшенные и написанные криво и еще сложнее.. 

Надіслати
Поділитися на інших сайтах

ошибку 500 смотрите в логах сервера, там должно быть больше информации об ошибке. 

это все, что было в логах сервера..

Техподдержка сказала - восстанавливайте рабочий бекап.

в логах сайта, естественно, ничего нет

Надіслати
Поділитися на інших сайтах

фильтр от SooR`a?

>> В category_option_value_description присутствовали несколько строк с id опций 50 и 55.

если по кол-ву языков - так и должно быть.

2. ну так смотри логи

3.

Bad header=HTTP1.0/1.1
как вариант:

сервер/браузер не поддерживает один из протоколов. найди в коде и укажи только поддерживаемый.

4. как бы... руками. смотри связи столбцов. возможно они связаны с другими таблицами.

Надіслати
Поділитися на інших сайтах

фильтр от SooR`a?

нет

 

если по кол-ву языков - так и должно быть.

 

нет, имелось в виду, что одной опции было назначено несколько значений, поэтому и несколько строк. язык один и он тут ни при чем

 

2. ну так смотри логи

логи чего? мускуля? все что было в логах, и это было в error логе Апача, в первом сообщении.

я перефразирую вопрос: как база данных может вообще вызывать 500 ошибку, если 500 ошибка - это "сервер не может обработать запрос"? База же работает, данные отдает. это же не незакрытая скобка в коде.

 

сервер/браузер не поддерживает один из протоколов. найди в коде и укажи только поддерживаемый.

Опять же, как наличие каких-то значений в таблице фильтра базы может влиять на протокол передачи данных?

 

4. как бы... руками. смотри связи столбцов. возможно они связаны с другими таблицами

попытки вычистить эти строки руками - в первом сообщении. таблицы фильтра связаны только между собой, и остальные таблицы не затрагивают. фильтра нет даже на главной странице вообще, т.е. он не должен влиять на работу главной.

 

в общем, пока эти глючные опции глубоко заныканы в админке, чтоб к ним не было доступа, все остальное работает, как и работало. баг купирован, но не вылечен, ибо хз как

Надіслати
Поділитися на інших сайтах

Rinz, первый заход в google ставит точку:

malformed header from script. Bad header=HTTP1.0/1.1 404 Not Found
ботва с генерируемым магазином заголовком (где-то в коде фильтра, судя по твоим рассказам).

смотри, что отправляется и возвращается в заголовках.

ищи, ГДЕ это формируется, и исправляй.

кроме того есть вероятность, что ты глобально запорол отдачу заголовка "404 Not Found" - попробуй вызвать его на других страницах (другим способом).

Надіслати
Поділитися на інших сайтах

Створіть аккаунт або увійдіть для коментування

Ви повинні бути користувачем, щоб залишити коментар

Створити обліковий запис

Зареєструйтеся для отримання облікового запису. Це просто!

Зареєструвати аккаунт

Вхід

Уже зареєстровані? Увійдіть тут.

Вхід зараз
  • Зараз на сторінці   0 користувачів

    • Ні користувачів, які переглядиють цю сторінку
×
×
  • Створити...

Important Information

На нашому сайті використовуються файли cookie і відбувається обробка деяких персональних даних користувачів, щоб поліпшити користувальницький інтерфейс. Щоб дізнатися для чого і які персональні дані ми обробляємо перейдіть за посиланням . Якщо Ви натиснете «Я даю згоду», це означає, що Ви розумієте і приймаєте всі умови, зазначені в цьому Повідомленні про конфіденційність.