Заголовок сообщения: 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 раз.
Проблемы могут возникать как раз из-за mysql_pconnect и лучше его не использовать.
Насчет же mysql_connect смотрите документацию:
Цитата:
Если второй вызов функции произошёл с теми же аргументами mysql_connect(), новое соединение не будет установлено. Вместо этого функция вернёт ссылку на уже установленное соединение.
Цитата:
Error: mysql_pconnect(): Can't connect to local MySQL server through socket '/tmp/mysql.sock' (2)
gro, проблема именно с connect, я в ошибке наверху исправил! Просто уже и с pconnect пробовал, тоже не получилось, а ошибка та же выдается, хоть с connect, хоть с pconnect - разница в этой букве p в ошибке и все!
Проблема все еще актуальна, ну не хочет соединяться, хоть убей! может у кого есть какие-нибудь мысли? ну хоть намекните или заплюйте, скажите чтоб мат.часть учил, что проблема плевая или нерешаемая наоборот!
на ftp нет такой папки, а где еще искать не знаю, но такая фигня есть:
если обращаешься на прямую (т.е. в строке браузера пишешь прямой путь) к index файлу галереи, то она работает, т.е. все соединяется, все гут!
если движок обращается к нему - не пашет и выдает ошибку!
из этого вывод (мой по крайней мере) : логин пароль и т.д. - правильные, отдельно к БД он подключается, значит по идее все верно, значит не работает только при вызове этого файла двиглом... поэтому и грешу на внутреннее повторное обращение к БД.
единственное что - до этого были 2 ошибки не мог найти файлы config.inc.php и function.inc.php, т.к. путь к ним был прописан "include/config.inc.php" и "include/function.inc.php", решилась проблема путем удаления из пути "include/".
я теперь думаю, может он не может найти этот сокет, т.к. путь опять надо поправить, но где этот путь прописан и почему его физически нет на сервере я не знаю, т.к. знания php и MySQL - ниже плинтуса...
Извиняюсь, что отвечаю долго, почему-то форум пишет, что чаще чем 1 сообщение в 2ч. мне постить нельзя!
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'])); }
// 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.
значит параллельное соединение невозможно? или я не правильно понимаю?
оффтопик:
ребят, я очень уважаю ваше время и ваши знания, понимаю, что никто не обязан мне помогать и делиться чем-то, но без вашей помощи мне ну никак не обойтись!
т.е. основная проблема - что один php скрипт внутри себя вызывает выполнение другого php-скрипта, а обращается он в ту же базу данных, где сидит первый (хоть таблицы и с другим префиксом). Из-за этого получается ошибка!:amazed: что с этим делать - ума не приложу...
Ответ очевиден: не вызывать два скрипта в рамках обработки одного http-запроса.
т.е. реализовать такое не удастся? А если пойти хитрым путем, и не запускать повторное обращение 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; }
надо убрать обращение к базе и просто указать соединение которое использовать? только как?
Ответ: Есть сайт, была прикручена галлерея, но весь остальной сайт - html ручной работы. Заказчик решил поставить все на движок. галерею есть смысл оставить старую. MODx использует шаблоны, которые у него хранятся в БД, в ячейку с контентом я хочу вызвать эту галерею и вуаля - меню работает (за которое отвечает MODx), шаблон подгружает, а в центре вставлена себе спокойно старая галерея. Но это в теории так должно было в итоге получиться, а получилась такая вот ошибка... а шаблон галереи нельзя оставить старым, т.к. тогда теряется смысл установки движка (меню обновляться не будет при создании новых разделов!)
тупое решение: фрагмент с галереей грузить через readfile('http://….'); В этом случае скрипты будут работать независимо.
Crazy, СПАСИБО! ТЫ СУПЕР-МЕГА МОЗГ!!!!
Галерея загружается, во только ссылки не работают и изображения не отображаются. Насколько я понял - проблема в том, что он свои вспомогательные файлы ищет в корне сайта, а должен искать в папке "foto". Есть ли какя-нибудь возможность отправить все его запросы в эту папку? или тогда надо искать все в коде и в ручную перебивать?
Уровень доступа: Вы не можете начинать темы. Вы не можете отвечать на сообщения. Вы не можете редактировать свои сообщения. Вы не можете удалять свои сообщения. Вы не можете добавлять вложения.