Дмитрий Сергеевич (axshavan) wrote,
Дмитрий Сергеевич
axshavan

  • Location:
  • Mood:
  • Music:

Bitrixquest

Далее рассказ пойдет о тонкостях программирования на PHP под CMS Bitrix, и, думаю, ничего страшного не случится, если, дабы не мозолить никому глаза, я это спрячу под кат.

На промышленных серверах ничего не работает в IE

Действительно, так и было. Все протестировано и прекрасно работает на тестовых серверах. Перенесли скрипты на промышленный. И тут хоп! - в осле белый экран без каких-либо пояснений, в других браузерах то же место при тех же условиях работает нормально. Откатили версию обратно, подняли на том же сервере тестовую площадку и начали по ссш дебаггинг: echo '123'; ob_flush(); die(); в одном месте, потом в другом. Через несколько часов выяснилась охренительная подробность: работоспособность сайта зависит не от кода на PHP, а от статичных кусков HTML, JS и даже текста комментариев.
- Попробуй отключи компрессию, - сказал ведущий разработчик. Я отключил модуль компрессии (который закатывает HTML в gzip перед отдачей веб-серверу), и - о, чудо - все заработало. Еще примерно через полчасика проблема была решена - убали пробел в конце документа после закрывашки пхп. Он не попадал во входной буфер компрессора и просто аппендился к готовому архивированному тексту. Ну а попробуйте в архив в конце пробел дописать, не всякий деархиватор сможет его нормально прочитать. На промышленном сервере стоит IIS, у нас на тестовом - Apache. Вот так бывает.

На промышленных серверах не работают апдейты БД

Не выполняются и все тут. Выдается ошибка о неправильном синтаксисе. Причем та же самая строка без изменений, скормленная тестовому серверу MySQL, отрабатывает нормально. Ведущий разработчик разводит руками:
- Хуй знает, отчего так происходит.
Потом меня осеняет (спустя эдак полчаса):
- Там какая версия мускуля?
- Пятая.
- А у нас, небось, четвертая?
- Ну да.
Я заключил все имена полей и таблиц в специальные кавычки (`), и - о, чудо - всё заработало. В пятом MySQL добавилось новое ключевое слово CONDITION.

Не отправляется почта

Помимо стандартных агетских функций Битрикса, у нас есть свои асинхронные процедуры, которые периодически выполняются по крону. И вот выясняется, что ни агентские функции, ни асинхронные процедуры не могут отправить почтовые уведомления с сайта. Я взял класс CEvent и опять - echo '123'; ob_flush(); die(); то тут, то там. Нашел нужное место - выполняется return, если выполняются два условия. Поискал по одной ветке - нет, тут все в порядке. Поискал по другой. А другая ветка - это проверка наличия файла в кэше. Да, вот он, этот файл. Стоящий за моей спиной ведущий разработчик недоуменно крякает:
- Смотри-ка, у него атрибут ридонли!
А если у файла атрибут ридонли, то ни unlink, ни вообще никакие файловые функции, кроме чтения, ничего с ним не сделают. Ну а дальше все было просто - грохнул кэш, письма стали отправляться. А файлик этот появился в кэше из-за неправильной сборки дистрибутива... Вот как бывает.

Последний пример

Ненавижу неповторяющиеся или слабоповторяющиеся ошибки - их очень сложно отслеживать и повторять. Если только что зарегистрированным пользователем попробовать произвести бронирование, то (если до этого были чистые сессии и куки), в IE на одной из страниц сайта при нажатии кнопки "назад" из кукисов пропадает PHPSESSID. Ну что за херня, а :)
Tags: web, работа
Subscribe

  • Матрёшка

    Летом я утопил свой большой чёрный фотоаппарат. Горевал-горевал, и купил новый. А утопленник просох как следует и ожил. Я знаю про возможность…

  • Тема для следующей фотографии

    Тему для следующей фотографии я выбирал так: пошёл в книжный магазин, подошёл к полкам со всякой фантастикой и фентезятиной, некоторое время выбирал…

  • Плёнка №211

    1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27…

  • Post a new comment

    Error

    Comments allowed for friends only

    Anonymous comments are disabled in this journal

    default userpic

    Your reply will be screened

    Your IP address will be recorded 

  • 3 comments