2 соединения с MySQL @ DeForum.ru
DeДверь  
Логин:  
Пароль:  
  Автологин  
   
Разместить рекламу
Письмо админу
Правила | FAQ | *Поиск | Наша команда | Регистрация | Вход
 
 
 Страница 1 из 1 [ Сообщений: 16 ] 
*   Список форумов / Начинка и техника / Программирование для WWW » ответить » создать топик « | »
Автор Сообщение
koshara
новый человек
3
Сообщения: 45
Зарегистрирован: 05.09.06
Откуда: Moscow
Заголовок сообщения: 2 соединения с MySQL
Сообщение Добавлено: 27 Февраль 2007, 22:02:53 
PHP-гуру и повелители баз-данных!

Столкнулся с такой проблемой:
сайт на движке (MODx), пытаюсь прикрутить старую галерею, которая была до установки движка (Coppermine Image Gallery). при соединении с базой данных выдает ошибку:

Цитата:
PHP error debug
Error: mysql_connect(): Can't connect to local MySQL server through socket '/tmp/mysql.sock' (2)
Error type/ Nr.: Warning - 2
File: "какой-то путь"/include/functions.inc.php
Line: 62
Line 62 source: $result = @mysql_connect($CONFIG['dbserver'], $CONFIG['dbuser'], $CONFIG['dbpass']);




Есть мнение, что это связано с тем, что эта галерея и MODx используют одну базу данных. Обратившись к поискам и первоисточникам, нашел, что проблемы действительно могут возникнуть при повторном запуске mysql_connect. Как решение предлагалось использовать mysql_pconnect, но проблема в том, что в php я не силен.

Поэтому очень надеюсь на помощь и профессиональное мнение:
1. Является ли использование mysql_pconnect выходом из этой ситуации?
2. Если да, то его надо указывать для движка (который запускается первым) или для галереи?
3. Нужно ли в таком случае использовать mysql_close и опять же где закрывать соединение?

4. Может есть другой - более простой или правильный выход?

т.к. на пальцах объяснять сложно выложу код:
обращение к базе данных (включая строку, где ошибка)
Код:
// Connect to the database
function cpg_db_connect()
{
        global $CONFIG;
        $result = @mysql_connect($CONFIG['dbserver'], $CONFIG['dbuser'], $CONFIG['dbpass']);
        if (!$result)
                return false;
        if (!mysql_select_db($CONFIG['dbname']))
                return false;
        return $result;
}


пароль, логин, хост и т.д. - работают и верны, проблема скорее всего в 2-х соединениях...
Не сочтите за труд, любые, даже самые бредовые мысли, могут помочь!!! Мозг уже окончательно вытек, если что-то важное пропустил, или не хватает информации - пишите, сразу запостю!

Many thanks!


Цитата:
извиняюсь, поправил! просто варианты подыскиваю, поэтому случайно запостил ошибку с pconnect! с connect ошибка та же, только без p соответственно! наверху все исправлено!


_________________
Ваш... дезигнер...


Последний раз редактировалось koshara 27 Февраль 2007, 22:26:55, всего редактировалось 1 раз.
gro
новый человек
17
Сообщения: 43
Зарегистрирован: 09.09.06
Сообщение Добавлено: 27 Февраль 2007, 22:10:09 
Проблемы могут возникать как раз из-за mysql_pconnect и лучше его не использовать.
Насчет же mysql_connect смотрите документацию:

Цитата:
Если второй вызов функции произошёл с теми же аргументами mysql_connect(), новое соединение не будет установлено. Вместо этого функция вернёт ссылку на уже установленное соединение.




Цитата:
Error: mysql_pconnect(): Can't connect to local MySQL server through socket '/tmp/mysql.sock' (2)


Что-то с настройками mysql, возможно.

mysql_connect вместо mysql_pconnect пробовали?
koshara
новый человек
3
Сообщения: 45
Зарегистрирован: 05.09.06
Откуда: Moscow
Сообщение Добавлено: 28 Февраль 2007, 14:44:26 
gro, проблема именно с connect, я в ошибке наверху исправил! Просто уже и с pconnect пробовал, тоже не получилось, а ошибка та же выдается, хоть с connect, хоть с pconnect - разница в этой букве p в ошибке и все!

Проблема все еще актуальна, ну не хочет соединяться, хоть убей! может у кого есть какие-нибудь мысли? ну хоть намекните или заплюйте, скажите чтоб мат.часть учил, что проблема плевая или нерешаемая наоборот! :confused:

_________________
Ваш... дезигнер...
gro
новый человек
17
Сообщения: 43
Зарегистрирован: 09.09.06
Сообщение Добавлено: 28 Февраль 2007, 15:04:17 

Цитата:
Can't connect to local MySQL server through socket '/tmp/mysql.soc'


Существует ли такой сокет и есть ли у него нужные права?
koshara
новый человек
3
Сообщения: 45
Зарегистрирован: 05.09.06
Откуда: Moscow
Сообщение Добавлено: 28 Февраль 2007, 16:48:51 
на ftp нет такой папки, а где еще искать не знаю, но такая фигня есть:

если обращаешься на прямую (т.е. в строке браузера пишешь прямой путь) к index файлу галереи, то она работает, т.е. все соединяется, все гут!
если движок обращается к нему - не пашет и выдает ошибку!

из этого вывод (мой по крайней мере) : логин пароль и т.д. - правильные, отдельно к БД он подключается, значит по идее все верно, значит не работает только при вызове этого файла двиглом... поэтому и грешу на внутреннее повторное обращение к БД.
единственное что - до этого были 2 ошибки не мог найти файлы config.inc.php и function.inc.php, т.к. путь к ним был прописан "include/config.inc.php" и "include/function.inc.php", решилась проблема путем удаления из пути "include/".
я теперь думаю, может он не может найти этот сокет, т.к. путь опять надо поправить, но где этот путь прописан и почему его физически нет на сервере я не знаю, т.к. знания php и MySQL - ниже плинтуса...

Извиняюсь, что отвечаю долго, почему-то форум пишет, что чаще чем 1 сообщение в 2ч. мне постить нельзя! :confused:

_________________
Ваш... дезигнер...
Crazy Муж.
Модератор
107
Сообщения: 14561
Зарегистрирован: 23.12.01
Откуда: Moscow
Сообщение Добавлено: 28 Февраль 2007, 19:39:06 
koshara, проверьте значение глобальной переменной $CONFIG в точке вызова pconnect. Есть мнение, что она затерта другими значениями.
koshara
новый человек
3
Сообщения: 45
Зарегистрирован: 05.09.06
Откуда: Moscow
Сообщение Добавлено: 28 Февраль 2007, 21:04:13 
Crazy, как выполнить проверку? Имеется в виду, что она вызывается до этого? Она вызывается два раза до начала соединения с базой:
Код:
/**************************************************************************
   Function for managing cookie saved user profile
 **************************************************************************/

// Decode the user profile contained in a cookie
function user_get_profile()
{
        global $CONFIG, $USER, $HTTP_COOKIE_VARS;

        if (isset($HTTP_COOKIE_VARS[$CONFIG['cookie_name'].'_data'])) {
                $USER = @unserialize(@base64_decode($HTTP_COOKIE_VARS[$CONFIG['cookie_name'].'_data']));
        }

        if (!isset($USER['ID']) || strlen($USER['ID']) != 32) {
                list($usec, $sec) = explode(' ', microtime());
                $seed = (float) $sec + ((float) $usec * 100000);
                srand($seed);
                $USER=array('ID' => md5(uniqid(rand(),1)));
        } else {
                $USER['ID'] = addslashes($USER['ID']);
        }

        if (!isset($USER['am'])) $USER['am'] = 1;
}

// Save the user profile in a cookie
function user_save_profile()
{
        global $CONFIG, $USER, $HTTP_SERVER_VARS;

        $data = base64_encode(serialize($USER));
        setcookie($CONFIG['cookie_name'].'_data', $data, time()+86400*30, $CONFIG['cookie_path']);
}

/**************************************************************************
   Database functions
 **************************************************************************/

// Connect to the database
function cpg_db_connect()
{
          global $CONFIG;
        $result = @mysql_connect($CONFIG['dbserver'], $CONFIG['dbuser'], $CONFIG['dbpass']);
        if (!$result)
                return false;
        if (!mysql_select_db($CONFIG['dbname']))
                return false;
        return $result;
}


А вообще, может движок засоряет эту функцию, у него ведь свой global config, но тогда получается мне надо каким-то образом переписать это значение.

т.е. основная проблема - что один php скрипт внутри себя вызывает выполнение другого php-скрипта, а обращается он в ту же базу данных, где сидит первый (хоть таблицы и с другим префиксом). Из-за этого получается ошибка!:amazed:
что с этим делать - ума не приложу...

я просто не понимаю реально, никогда на программиста не претендовал, а тут такая куча кода, который для меня совершенно не понятен. очень рассчитываю на помощь, ибо жесть!
В одной литературе прочитал следующее:

Цитата:
Если сделать еще один вызов mysql_connect() с теми же аргументами, в то время, когда открыто первоначальное соединение, новое соединение не открывается и возвращается идентификатор уже открытого соединения. Закрытие соединения происходит при вызове mysql_close() или завершении работы сценария php.


значит параллельное соединение невозможно? или я не правильно понимаю?

оффтопик:
ребят, я очень уважаю ваше время и ваши знания, понимаю, что никто не обязан мне помогать и делиться чем-то, но без вашей помощи мне ну никак не обойтись!

_________________
Ваш... дезигнер...
Crazy Муж.
Модератор
107
Сообщения: 14561
Зарегистрирован: 23.12.01
Откуда: Moscow
Сообщение Добавлено: 28 Февраль 2007, 21:09:40 

koshara писал(а):
т.е. основная проблема - что один php скрипт внутри себя вызывает выполнение другого php-скрипта, а обращается он в ту же базу данных, где сидит первый (хоть таблицы и с другим префиксом). Из-за этого получается ошибка!:amazed:
что с этим делать - ума не приложу...



Ответ очевиден: не вызывать два скрипта в рамках обработки одного http-запроса.
koshara
новый человек
3
Сообщения: 45
Зарегистрирован: 05.09.06
Откуда: Moscow
Сообщение Добавлено: 28 Февраль 2007, 23:05:10 
т.е. реализовать такое не удастся? А если пойти хитрым путем, и не запускать повторное обращение MySQL, а просто обратиться к таблицам с префиксам. Такое реально?
Т.е. имея код:
Код:
function cpg_db_connect()
{
          global $CONFIG;
        $result = @mysql_connect($CONFIG['dbserver'], $CONFIG['dbuser'], $CONFIG['dbpass']);
        if (!$result)
                return false;
        if (!mysql_select_db($CONFIG['dbname']))
                return false;
        return $result;
}

надо убрать обращение к базе и просто указать соединение которое использовать? только как?

_________________
Ваш... дезигнер...
Crazy Муж.
Модератор
107
Сообщения: 14561
Зарегистрирован: 23.12.01
Откуда: Moscow
Сообщение Добавлено: 28 Февраль 2007, 23:08:30 

koshara писал(а):
т.е. реализовать такое не удастся?



Начнем с начала. Вопрос: какую задачу мы хотим решить? Зачем нам на одной странице результаты работы двух совершенно разных скриптов?
koshara
новый человек
3
Сообщения: 45
Зарегистрирован: 05.09.06
Откуда: Moscow
Сообщение Добавлено: 1 Март 2007, 01:11:04 
Ответ: Есть сайт, была прикручена галлерея, но весь остальной сайт - html ручной работы. Заказчик решил поставить все на движок. галерею есть смысл оставить старую. MODx использует шаблоны, которые у него хранятся в БД, в ячейку с контентом я хочу вызвать эту галерею и вуаля - меню работает (за которое отвечает MODx), шаблон подгружает, а в центре вставлена себе спокойно старая галерея. Но это в теории так должно было в итоге получиться, а получилась такая вот ошибка... а шаблон галереи нельзя оставить старым, т.к. тогда теряется смысл установки движка (меню обновляться не будет при создании новых разделов!)

_________________
Ваш... дезигнер...
Crazy Муж.
Модератор
107
Сообщения: 14561
Зарегистрирован: 23.12.01
Откуда: Moscow
Сообщение Добавлено: 1 Март 2007, 07:08:54 
тупое решение: фрагмент с галереей грузить через readfile('http://….'); В этом случае скрипты будут работать независимо.

Столь же тупое решение -- использоать фреймы.
koshara
новый человек
3
Сообщения: 45
Зарегистрирован: 05.09.06
Откуда: Moscow
Сообщение Добавлено: 1 Март 2007, 16:03:58 

Crazy писал(а):
тупое решение: фрагмент с галереей грузить через readfile('http://….'); В этом случае скрипты будут работать независимо.



Crazy, СПАСИБО! ТЫ СУПЕР-МЕГА МОЗГ!!!! :beer:

Галерея загружается, во только ссылки не работают и изображения не отображаются. Насколько я понял - проблема в том, что он свои вспомогательные файлы ищет в корне сайта, а должен искать в папке "foto". Есть ли какя-нибудь возможность отправить все его запросы в эту папку? или тогда надо искать все в коде и в ручную перебивать?

оффтопик:
С фреймами это жесть, не люблю их и не могу с ними работать.
"-Не люблю кошек..
-Ты просто не умеешь их готовить!" ©

_________________
Ваш... дезигнер...
Crazy Муж.
Модератор
107
Сообщения: 14561
Зарегистрирован: 23.12.01
Откуда: Moscow
Сообщение Добавлено: 1 Март 2007, 18:06:26 

koshara писал(а):
Галерея загружается, во только ссылки не работают и изображения не отображаются.



Либо править шаблоны, либо изнасиловать сайт с помощью mod_rewrite.
WayBe Муж.
соучастник
38
Сообщения: 781
Зарегистрирован: 16.09.06
Откуда: www.kaniv.net
Сообщение Добавлено: 2 Март 2007, 09:52:26 
эээ... извините... IFRAME ? :confused:
и, раз уж СОЕДИНЕНИЕ УЖЕ УСТАНОВЛЕНО, зачем его ещё устанавливать?

_________________
Мышка - музыкальний инструмент
Crazy Муж.
Модератор
107
Сообщения: 14561
Зарегистрирован: 23.12.01
Откуда: Moscow
Сообщение Добавлено: 2 Март 2007, 13:16:51 
WayBe, это два разных движка. Каждый содержит код установления соединения.

Разумеется, их можно подружить. Но это требует времени и серьезного приложения сил (особливо в плане тестирования).
*   Список форумов / Начинка и техника / Программирование для WWW « | » » ответить » создать топик
 Страница 1 из 1 [ Сообщений: 16 ] 
Показать сообщения за:   Поле сортировки  
Найти:
Перейти:  
Уровень доступа: Вы не можете начинать темы. Вы не можете отвечать на сообщения. Вы не можете редактировать свои сообщения. Вы не можете удалять свои сообщения. Вы не можете добавлять вложения.
cron


ООО ДеФорум
При использовании материалов сайта ссылка на DeForum.ru — обязательна.
Проект Павла Батурина ©2001-2077; // Powered by phpBB © 2013 phpBB Group
Rambler's Top100