Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > Программное обеспечение под *NIX системы > Настройка Apache


Автор: WolfAlone 7.12.2011, 23:25
Доброй ночи! Сложилась примерно такая ситуация. Обратился человек, с очень странным вопросом: "почему вместо сайта белый лист"... Посмотрели вместе, действительно, белый экран. В браузер не выдаётся вообще ничего, при этом Google Chrome говорит, что на сервере произошла ошибка 500. Взяли его исходники, загрузили на другой хостинг - всё работает. Загрузили ещё на 4 хоста - всё работает. Стали выяснять, почему не работает у него...

Оказалось, что закачать исходники он пытается на VPS. При этом, разница между "закачкой в другое место" и закачкой на VPS заключалась в том, что файлы передавались по протоколу SFTP, а не просто FTP.

1. Настроил логи апача - в логах пусто. Ошибок нет.
2. Включил отображение ошибок в PHP, везде, где это только было возможно - ошибок нет.
3. Я подумал, что не работает Apache... Загрузил туда файл:
Код

<?php phpinfo(); ?>

всё работает!

4. Выяснил, что из себя представляет его исходник... Оказалось, исходник - это некий проект на CodeIgniter... Взяли "чистую" версию CodeIgniter, закачали на его сервер - всё прекрасно работает.
5. Загрузили его код ещё раз на другой сервер (через FTP) - всё работает отлично.
6. Загружаем к нему на сервер, через SFTP, его код ещё раз - эффект: "белый экран". При этом, загрузка оригинального кода фреймворка всё через тот же SFTP - приносит положительный результат (FTP/SFTP-клиент: FileZilla)

В какой-то момент, я вспомнил, что FTP-сервер, при загрузке файлов, принимает файлы в двух режимах: "бинарный" и "текстовый". При этом, текстовые файлы, проходят некоторую перекодировку (подозреваю, что перекодируются они в какую-то однобайтовую кодировку).

Открываю файлы CodeIgniter, смотрю оригинальную кодировку, редактор показывает: "ANSI".

Открываю его проект, смотрю кодировку правленых файлов: "UTF-8".

Подозреваю, что такой эффект возникает в следствии того, что файлы не были правильно перекодированы, так как SFTP в отличии от обычного FTP не производит подобных манипуляций (это моё умозаключение, поправьте пожалуйста, если я ошибаюсь).

На такую мысль меня навёл личный опыт (однажды, я загрузил файл .htaccess, [который был написан в кодировке UTF-8] в бинарном режиме и Apache после этого "сломался").

Установить FTP-сервер, по каким-то не ведомым мне причинам - не представляется возможным. "Нужно, что бы всё работало как есть".

Вопрос: подскажите пожалуйста, есть ли какой-нибудь выход из сложившейся ситуации? Возможно, есть какой-то готовый скрипт, который можно запустить (зайдя на сервер по SSH), который бы просканировал указанную директорию и привёл бы все файлы PHP к правильной кодировке? Или дело вообще не в этом?

Автор: bobik02 8.12.2011, 00:38
По поводу перекодировки iconv .


Автор: 1000000dollars 8.12.2011, 03:06
Цитата(WolfAlone @  7.12.2011,  23:25 Найти цитируемый пост)
При этом, текстовые файлы, проходят некоторую перекодировку (подозреваю, что перекодируются они в какую-то однобайтовую кодировку)
.
Это не так. В бинарном режиме файлы заливаются байт-в-байт, а в текстовом меняются только коды перевода строк.

Что касается кодировок, то если используется UTF-8, то имеет смысл проверить нет ли в начале BOM (если есть - убрать его).

Автор: WolfAlone 8.12.2011, 03:57
Цитата(1000000dollars @  8.12.2011,  03:06 Найти цитируемый пост)
проверить нет ли в начале BOM (если есть - убрать его). 

BOM в начале нет, проверил.

Если меняются только коды перевода строк, может ли это привести к тому, что вместо "хотя бы чего-нибудь" мы видим "чистый лист"? То есть, в браузер не выдаётся вообще ничего. При этом, ошибок ни сам PHP, ни Apache тоже не выдаёт (логи и отображение ошибок - включены).

Или... если поставить вопрос по другому: из за чего такое вообще может произойти?

Автор: 1000000dollars 8.12.2011, 09:40
В access log апача запросы видны?

Если нет - разбираемся почему запросы не доходят до сервера (резловится не правильно, файерволлы блокируют, нестандартный порт апача, nginx, ещё что-то..).
Если да - то:
1) проводим HTTP сессию через telnet и смотрим что отдаёт (и отдаёт ли вообще) сервер.
2) провеяем соответствие переводов строк на сервере
3) проверяем контрольные суммы файлов (с учётом переводов строк)

Результаты исследования - сюда, будем смотреть.

Автор: WolfAlone 8.12.2011, 14:16
Благодарю всех за участие, проблема решилась! Судя по всему, дело было в исходном коде. Прогнал весь код через программу "удаления пробелов", исходник "похудел" в 1,5 раза и стал работать нормально... Потом прогнал ещё раз, для расстановки всех переводов строк, отступов и пр. - получился читабельный, рабочий код.

Один только вопрос мне теперь не даёт покоя. Что же за такой престранный символ, мог залететь в исходник, что "ложился" сервер?

P.S. На наличие "BOM" файлы проверял специально все, его точно нигде не было!

Автор: 1000000dollars 8.12.2011, 17:01
Цитата(WolfAlone @  8.12.2011,  14:16 Найти цитируемый пост)
Что же за такой престранный символ

Вот чёрт его знает... Рад, что проблема решилась.

Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)