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