Чеклист: что делать, если возникли проблемы с загрузкой сайта на хостинг. 8 практических случаев
Иногда бывают проблемы с работоспособностью сайта на хостинге после его загрузки (если, конечно, на виртуальном сервере он работал стабильно). Иногда получается быстро определить проблему, а иногда ее нужно усердно искать. Я составил чек-лист, из того, что случалось на моей практике — он поможет быстро определить проблему. Может быть, что у вас проблема будет не из этого списка, но, в любом случае, исключение вопросов из списка сэкономит время при поиске.
Примечание 1: инструкция приведена для PHP-программистов
Примечание 2: хостинги имеют привычку скрывать выводимые сообщения об ошибке
1. На хостинге старая версия PHP
Если вы используете возможности PHP 5.4, а для сайта установлена PHP 5.2, появится белый экран. Определить проблему можно достаточно просто: создать файл с вызовом функции phpinfo (выводит на экран информацию о конфигурации интерпретатора) и посмотреть на версию PHP.
Примечание: иногда можно вызвать функцию в начале файла с кодом сайта, однако некоторые хостинги не выводят информации вообще, если хотя бы одна строчка кода не работает.
Решение: через биллинг изменить версию PHP, либо обратиться в службу поддержки.
2. Неправильные пути к файлам. Слеши.
Для при указании путей к файлам в Windows можно использовать и "\", и "/". В Unix только "/". У меня несколько раз возникала проблема с функцией __autorun (read manual). Но это упущение было по моей вине.
Неправильно:
define ('SITE', dirname(__FILE__).DIRSEP);
function __autoload($classname) {
$filename = 'packages/'.$classname.'.php';
include_once($filename);
}
Правильно:
define ('DIRSEP', DIRECTORY_SEPARATOR);
define ('SITE', dirname(__FILE__).DIRSEP);
function __autoload($classname) {
$filename = SITE.'packages'.DIRSEP.strtr($classname, "\\", DIRSEP).'.php';
include_once($filename);
}
Решение: протрекать проблему
3. Неправильные пути к файлам. Обращение по абсолютному пути.
Фреймворки определяют абсолютный путь к папке с файлами примерно такой конструкцией в точке входа: dirname(__FILE__). Получаем следующий результат /var/htdocs/site/. Нет, на самом деле это хорошо. Но у меня один раз было одно но: когда вызывался файл "/var/htdocs/site/package/SthClass.php" — не работало, когда "htdocs/site/package/SthClass.php" — работало.
Примечание 1: интерпретатор работает быстрее, если указывать абсолютный путь к вызываемому файлу.
Примечание 2: в данном случае хостинг, скорее всего, неким образом блокировал подключение файла с указанием абсолютного пути.
4. Не соединяется с MySQL. MySQL-сервер не дает доступ определенному IP.
Проблема решается просто: дается доступ к IP сервера, на котором лежат файлы хостинга. Кроме того, при подключении к базе в некоторых случаях нужно указывать не IP или доменное имя сервера, а значение «localhost» — MySQL-сервер дает доступ только для localhost. Если проблема не решается даже техподдержкой — переносите базу на другой хостинг.
5. Не соединяется с MySQL. Указаны данные для виртуального сервера.
При разработке сайт обычно подключается к базе на виртуальном сервере. При загрузке рабочего варианта на хостинг нужно не забывать менять параметры подключения. Если Вы обновляете сайт с помощью IDE, не забудьте игнорировать файл с конфигурацией. Лично я уже отошел от практики хранения базе на виртуальном сервере.
6. Нет используемого плагина
Иногда может случиться, что при разработке вы использовали некий плагин, а на хостинге он может не быть установлен. Иногда его можно подключить через биллинг, иногда с помощью технической поддержки. В поддержке вам могут отказать — отвечайте хостингу взаимностью.
7. Не работала функция mysqli::fetch_all ()
Эта проблема связана с тем, что на хостинге какие-то проблемы с расширением mysqlnd (при этом само расширение может быть действительно установлено, но функция может не вызываться).
Решение 1: написать пользовательскую функцию-аналог и переписать вызов всех стандартных вариантов
Решение 2: поменять хостинг (предпочтительнее)
8. Проблема с output_buffering
У меня была проблема конфликта плагина Pudio с настройками PHP, которая исправлялась установкой параметра output_buffering = 0 в файле php.ini (уточню: осредством технической поддержки).
Что еще можно попробовать:
Найти проблему в коде (протрекать проблему): выводить на экран некий символ (к примеру, «1») на экран, чтобы увидеть, на каком участке кода возникает проблема. Возможно, стоит использовать функцию exit (прекращение выполнения кода), чтобы увидеть выведенный символ, так как некоторые хостинги не выводят информации вообще, если хотя бы одна строчка кода не работает. Включить логи: если сообщения об ошибках не выводятся на экран, можно попросить техподдержку включить вывод логов в файл.
Небольшой совет: перед тем, как работать с новым хостингом, попробуйте выгрузить свой сайт на тестовом аккаунте, который обычно дается на 7-14 дней. Обычно проблемы возникают только при первой загрузке сайта на хостинг.
Выводы: работайте с одним хостингом и аргументируйте клиенту о необходимости выбора именно этого хостинга, если иное не является критическим.




