[ Поиск ] - [ Пользователи ] - [ Календарь ]
Полная Версия: Ошибка 502
AlmazDelDiablo
Сегодня внезапно на одном из моих доменов стала вылезать ошибка 502. Отключил поддержку PHP на домене — все стало ок. Выводил мне вбраузер исходники php, но никаких ошибок не выводил. При включении PHP как модуля Apatche — вылезает снова 502. Обращаться в тп. хостинга не предлагайте — у меня VDS, а у них тех. поддержка VDS стоит 1000 рублей в месяц.

Подскажите, что попробовать для устранения ошибки? Может ли быть тут виновен php-скрипт?



Спустя 17 минут, 58 секунд (5.12.2010 - 19:08) inpost написал(а):
Вывод ошибок включен?

Спустя 7 минут, 32 секунды (5.12.2010 - 19:16) AlmazDelDiablo написал(а):
Да.
error_reporting( E_ALL | E_STRICT );
Но отключение не помогает.

Спустя 4 минуты, 48 секунд (5.12.2010 - 19:20) DmitryOpalev написал(а):
Извиняюсь, что не в тему, но что она означает? Плохая связь?

Спустя 2 минуты, 12 секунд (5.12.2010 - 19:23) AlmazDelDiablo написал(а):
Апатч не может ответить на запрос.

Спустя 2 часа, 31 минута, 6 секунд (5.12.2010 - 21:54) AlmazDelDiablo написал(а):
Заметил, что если удалить строку (см. ниже), тоошибка исчезает.

$check_ip = $db->query( "SELECT * FROM `".DB_PREF."_bans` WHERE `player_ip` = '$ip'" );

Спустя 55 минут, 8 секунд (5.12.2010 - 22:49) Белый Тигр написал(а):
По идее этот ответ во многих случаях означает очень долгую работу скрипта. Скорее всего в таблице банов гигантское количество IP и нет индексов.

Спустя 9 часов, 3 минуты, 2 секунды (6.12.2010 - 07:52) AlmazDelDiablo написал(а):
В базе всего одна запись, где player_ip совпадает с моим ip-адресом. Может быть, я что-то накосячил в классе $db? Вот его содержимое, относящееся к $db->query:
class db {
var $c_id = FALSE;
var $query_id = FALSE;

function connect( $host, $user, $pass, $db ) {
if( !$this->c_id ) { $this->c_id = $this->connect( $host, $user, $pass, $db ); }
echo mysql_error();
}

function query( $source ) {
if( !$this->c_id ) { $this->c_id = $this->connect( DB_HOST, DB_USER, DB_PASS, DB_NAME ); }
if( !$this->query_id ) { $this->query_id = mysql_query( $source ); }
return $this->query_id;
}

function safe( $source ) {
return mysql_escape_string( $source );
}
}


$db = new db;


А вот тут применяется:
$ip = $_SERVER['REMOTE_ADDR'];
$ip = $db->safe( $ip );
echo $ip;
$check_ip = $db->query( "SELECT * FROM `".DB_PREF."_bans` WHERE `player_ip` = '$ip'" );
if( $db->num_rows( $check_ip ) > 0 ) {
$content .= '<div class="ip_banned">
Ваш IP — '
.$ip.'<strong>Вы забанены.</strong>
</div>'
;
} else {
$content .= '<div class="ip_notbanned">
Ваш IP — '
.$ip.'. <strong>Вы не забанены.</strong>
</div>'
;
}

Спустя 1 час, 8 минут, 21 секунда (6.12.2010 - 09:00) Белый Тигр написал(а):
Попробуйте убрать из функции запроса соединение с БД. Выбрасывайте лучше исключение если оно отсутсвует.
if( !$this->query_id ) { $this->query_id = mysql_query( $source ); }

Это очень нехороший вариант работы. Вы соединяетесь, выполняете первый запрос, затем второй, а он уже не выполняется. Ведь в query_id уже есть данные.

Спустя 3 часа, 56 минут, 56 секунд (6.12.2010 - 12:57) AlmazDelDiablo написал(а):
Да уж, действительно получилась глупая система с запросом. Убрал проверку на query_id.
А убрав соединение с базой из запроса — пропала и 502-я ошибка. Для теста провел соединение соединение с базой. Результат — 502-я ошибка. Если честно, впервые такое вижу.

Спустя 1 час, 20 минут, 47 секунд (6.12.2010 - 14:18) AlmazDelDiablo написал(а):
Я идиот :D Замкнул метод connect сам на себя. Он вместо mysql_connect делал $this->connect(); Исправил и все заработало.
if( !$this->c_id ) { $this->c_id = mysql_connect( $host, $user, $pass, $db_name ); }

Спустя 18 часов, 7 минут, 49 секунд (7.12.2010 - 08:26) Белый Тигр написал(а):
Бывает biggrin.gif
Главное что ошибка найдена


_____________
Блог | VK | GitHub | Twitch
Быстрый ответ:

 Графические смайлики |  Показывать подпись
Здесь расположена полная версия этой страницы.
Invision Power Board © 2001-2024 Invision Power Services, Inc.