Задавайте вопросы, мы ответим
Вы не зашли.
Уважаемые господа!
Помогите пожалуйста в решении моей проблемы!
У меня есть динамический сайт с авторизацией, почти каждая страница включает в себя строки include("inc/db_connect.php");
Вот db_connect.php
<?php
//if(!defined("INSIDE")){ die("attemp hacking");}
$admin_login="*****";
$admin_pass="******";
$img_server="/img";
$now = time();
$link=mysql_pconnect("localhost","****","*****");
mysql_select_db("*****",$link) or die ("Ошибка соединения с БД!");
mysql_query("SET CHARSET cp1251");
$uri=GetEnv("REQUEST_URI");
$uri=explode("fable.hut.ru,$uri);
$ips=GetEnv("HTTP_X_REAL_IP");
$ip=explode(".",$ips);
extract($_POST);
extract($_GET);
extract($_COOKIE);
if (($ip[0] == 62 && $ip[1] == 183 && $ip[2] == 53) || $ips=="80.66.247.94" || $ips=="89.189.141.71") {
echo"You are died Go back ";
exit;
}
?>
Я предполагаю что у меня база данных накапливает соединения и "падает". А вот как это исправить не знаю! Помогите!
Неактивен
$link=mysql_pconnect("localhost","****","*****");
А зачем вы используете постоянное соединение? Используйте mysql_connect
Неактивен
Дайте я немного позащищаю pconnect pconnect — очень хорошая и нужная
штука, но надо уметь ее готовить. В частности, mysql.max_persistent Вас спасет.
А со стороны MySQL посмотрите на max_connections.
Неактивен
#1135 - Can't create a new thread (errno 12); if you are not out of available memory, you can consult the manual for a possible OS-dependent bug
Конкретно вот такую ошибку мне выдает база данных, после использования сайта минут где то через 40!
В файле my.cnf строка max_connections у меня выставлено 500
В каждом файле где у меня прописано include("inc/db_connect.php");
В конце я добавляю строчку <? mysql_close($link); ?>
Правильно?!
mysql.max_persistent Где искать этот параметр?
Задача сделать чтобы база данных сайта не падала каждые 40 минут!
Неактивен
Я пробовал использовать mysql_connect, в этом случае база "падает" быстрее и уже с другой ошибкой!
Неактивен
А какой смысл использовать постоянные соединения если вы хотите их закрывать в конце работы каждого скрипта?
Кстати, mysql_close не закрывает постоянные соединения.
Неактивен
kpachbiu написал:
Я пробовал использовать mysql_connect, в этом случае база "падает" быстрее и уже с другой ошибкой!
Так напишите, что за ошибка возникает в этом случае.
Неактивен
Включил базу и сайт сейчас когда появится ошибка напишу ....
Неактивен
kpachbiu написал:
mysql.max_persistent Где искать этот параметр?
Я там специально ссылки прописываю, чтобы искать было проще
Неактивен
Еще один вопросик
Есть код PHP:
<?
if ($Attack) {
if (empty($login)) $msg = "Укажите логин!";
else {
$chl=mysql_fetch_array(mysql_query("SELECT 'id', 'v_time', 'k_time', 'user', 'room', 'level', 'hp_now', 'battle', 'last_battle', 'vitality', 'travma', 'rank', 'lpv', 'rase_skill' FROM `players` WHERE 'user'='".addslashes($login)."'"));
if ($chl['user'] == $stat['user']) $msg="Нападение на самого себя - это уже мазохизм...";
elseif ($chl['rank'] !=60) $msg="Персонаж <u>$login</u> не является ботом!";
elseif ($stat['travma']>$now) $msg="С травмой в бой нельзя!";
elseif ($stat['level']!=$chl['level']) $msg="Выбери равного противника!";
elseif ($chl['room']!=2) $msg="Для нападния Вам необходимо находится в одной комнате!";
elseif ($stat['hp_now']<(($stat['hp']+$stat['vitality']*5)*0.33)) $msg="Вы слишком ослаблены для боя!";
elseif ($chl['hp_now'] <= 5 && $chl['rank']<>60) $msg="Персонаж <u>$login</u> слишком слаб для поединка!";
elseif (((time()-$chl['lpv'])<10) && ($chl['battle'] == $chl['last_battle'] || !$chl['battle']) && $chl['rank']==60) $msg="Бот <u>".$chl['user']."</u> еще не восстановил свой уровень жизни!";
else {
require_once("inc/chat/functions.php");
insert_msg("Разъярённый <b><u>$stat[user]</u></b> собрался с силами и напал на Вас!","","","1",$chl['user'],"",$chl['room']);
$battime="$now";
и так далее ?>
Есть HTML форма:
<b>Действия</b><HR color=silver>
<input type=button class=input value='Нападение' style='WIDTH: 120px' onclick=\"javascript:ShowForm('Нападение','trening.php?Attack=$now','','','1','attack','1','0');\">
Почему то когда нападаешь на бота пишут что - Персонаж Стражник не является ботом!
Хотя ранг у него выставлен 60
НЕ могу понять в чем ошибка!?
Неактивен
Ошибка в коде
s/chl/stat/ в нужном месте; Ну и, конечно, это ни разу не связано с MySQL. И даже с пхп не связано.
Неактивен
C Mysql свзязано в самом начале! (просто не весь код привел)
в начале следующее:
include("inc/db_connect.php");
$stat = mysql_fetch_array(mysql_query("SELECT * FROM `players` WHERE `user` = '".$_COOKIE['user']."' AND `pass` = '".$_COOKIE['pass']."' LIMIT 1"));
mysql_query("SET CHARSET cp1251");
Почему с пхп не связано?
$chl, $stat не в том месте стоят?
Неактивен
paulus написал:
Дайте я немного позащищаю pconnect pconnect — очень хорошая и нужная
штука, но надо уметь ее готовить.
Правильно ли я понимаю, что постоянное соединение действует только в рамках дочернего процесса апача, и при обработке следующего http запроса другим дочерним процессом придется устанавливать новое постоянное соединение?
Насколько велики затраты на создание соединения в сравнении с выполнением самого запроса? Я считал, что они пренебрежимо малы. Понятно, что нет смысла сравнивать с невменяемым запросом, а в случае простого запроса: маленькая таблица, выборка по ключу.
Реально ли улучшение производительности за счет использования pconnect? Я полагал, что это бесполезная штука, но задумавшись сейчас понял, что не знаю источника этого сокровенного знания
Неактивен
2 Кпачбиу:
Если в тексте программы где-то используется MySQL, это не значит, что
вопрос по MySQL. А вопросы по пхп имеет смысл задавать на webew.ru.
2 Вася:
Про апач ничего сказать не могу — зависит от реализации. Думаю, что таки все
процессы апача делят между собой соединения. В fastcgi-варианте, вроде, делят.
Улучшение производительности — разумеется, реальное на большом количестве
запросов. С другой стороны, в приложении, в котором не работает логика, тюнить
количество запросов — дело, наверное, излишнее
Неактивен
Спасибо за ссылку!
Неактивен
Похоже что информаци из базы данных не передается!!
Я пробую записать после $chl=mysql_fetch_array(....) строку
print_r($chl);
И никакая информация о значениях массива не выводиться!!!!!
Неактивен
Две функции в PHP неспроста — как раз для того, чтобы отслеживать ошибки между
ними. Вопросы по пхп таки надо задавать на webew.ru.
Неактивен
Спасибо я именно так и сделал!
Неактивен