xlex
Guest
PHP lost variables mining
Скажите, пожалуйста, может кто сталкивался: PHP 4/5 вдруг "теряет" значение переменной.
Выражается это в логах такого толка:
========================
[27-Feb-2005 23:29:39] PHP Warning: mysql_real_escape_string(): Can't connect to local MySQL server through socket '/tm
p/mysql.sock' (2) in /home/xlex/includes/core/db.inc on line 19
[27-Feb-2005 23:29:39] PHP Warning: mysql_real_escape_string(): A link to the server could not be established in /home/
xlex/includes/core/db.inc on line 19
[27-Feb-2005 23:29:39] PHP Warning: mysql_real_escape_string(): Can't connect to local MySQL server through socket '/tm
p/mysql.sock' (2) in /home/xlex/includes/core/db.inc on line 19
[27-Feb-2005 23:29:39] PHP Warning: mysql_real_escape_string(): A link to the server could not be established in /home/
xlex/includes/core/db.inc on line 19
[27-Feb-2005 23:29:39] PHP Warning: mysql_real_escape_string(): Can't connect to local MySQL server through socket '/tm
p/mysql.sock' (2) in /home/xlex/includes/core/db.inc on line 19
[27-Feb-2005 23:29:39] PHP Warning: mysql_real_escape_string(): A link to the server could not be established in /home/
xlex/includes/core/db.inc on line 19
[27-Feb-2005 23:29:39] PHP Warning: mysql_query(): Can't connect to local MySQL server through socket '/tmp/mysql.sock'
(2) in /home/xlex/includes/core/db.inc on line 34
[27-Feb-2005 23:29:39] PHP Warning: mysql_query(): A link to the server could not be established in /home/xlex/inclu
des/core/db.inc on line 34
========================
Итак весь лог. Для тех кому лениво читать, поясню: в определённый момент PHP решает, что функциям mysql* ничего не передаётся и надо использовать аргументы по умолчанию и лезть по локальному сокету.
Идиотизм/непонятность ситуации усугбляется тремя факторами:
-1. Код (PHP) не менялся;
-2. По утверждению хостера софт (Apache, PHP, MySQL) не изменялись;
-3. в коде стоят проверки на пустые аргументы функций, например, функция db_query(), через которую происходят все обращения к базе данных, выглядит так:
Сама ошибка возникает только у меня (среди многих клиентов), без какой-либо систематики...
Помогите, пожалуйста: ни я ни хостер не знаем куда копать... Может кто сталкивался с подобным, или просто какие идеи будут?
-~{}~ 02.03.05 10:05:
Никаких идей так и не появилось, но хостер предложил такое (с моей точки зрения - неправильное, но в данной ситуации красивое) решение - в .htaccess прописать строки:
php_value mysql.default_user USER
php_value mysql.default_password PASS
php_value mysql.default_host HOST
вроде пока работает...
Скажите, пожалуйста, может кто сталкивался: PHP 4/5 вдруг "теряет" значение переменной.
Выражается это в логах такого толка:
========================
[27-Feb-2005 23:29:39] PHP Warning: mysql_real_escape_string(): Can't connect to local MySQL server through socket '/tm
p/mysql.sock' (2) in /home/xlex/includes/core/db.inc on line 19
[27-Feb-2005 23:29:39] PHP Warning: mysql_real_escape_string(): A link to the server could not be established in /home/
xlex/includes/core/db.inc on line 19
[27-Feb-2005 23:29:39] PHP Warning: mysql_real_escape_string(): Can't connect to local MySQL server through socket '/tm
p/mysql.sock' (2) in /home/xlex/includes/core/db.inc on line 19
[27-Feb-2005 23:29:39] PHP Warning: mysql_real_escape_string(): A link to the server could not be established in /home/
xlex/includes/core/db.inc on line 19
[27-Feb-2005 23:29:39] PHP Warning: mysql_real_escape_string(): Can't connect to local MySQL server through socket '/tm
p/mysql.sock' (2) in /home/xlex/includes/core/db.inc on line 19
[27-Feb-2005 23:29:39] PHP Warning: mysql_real_escape_string(): A link to the server could not be established in /home/
xlex/includes/core/db.inc on line 19
[27-Feb-2005 23:29:39] PHP Warning: mysql_query(): Can't connect to local MySQL server through socket '/tmp/mysql.sock'
(2) in /home/xlex/includes/core/db.inc on line 34
[27-Feb-2005 23:29:39] PHP Warning: mysql_query(): A link to the server could not be established in /home/xlex/inclu
des/core/db.inc on line 34
========================
Итак весь лог. Для тех кому лениво читать, поясню: в определённый момент PHP решает, что функциям mysql* ничего не передаётся и надо использовать аргументы по умолчанию и лезть по локальному сокету.
Идиотизм/непонятность ситуации усугбляется тремя факторами:
-1. Код (PHP) не менялся;
-2. По утверждению хостера софт (Apache, PHP, MySQL) не изменялись;
-3. в коде стоят проверки на пустые аргументы функций, например, функция db_query(), через которую происходят все обращения к базе данных, выглядит так:
PHP:
function db_query($Query = NULL) {
if (!is_string($Query)) {global $ErrMsg; func_error_handler(array(__FUNCTION__, func_get_args(), $ErrMsg['InvalidArgs'])); return FALSE;}
debug_log('SQL', $Query);
$QueryResult = mysql_query($Query);
if ($QueryResult) {return $QueryResult;}
else {
$ErrorNo = mysql_errno();
$ErrorDescription = db_string_escape(mysql_error());
$Query = db_string_escape($Query);
makelog('MySQL', mysql_get_server_info(), "SQL query failed. Error ($ErrorNo): \'$ErrorDescription\'.\nQuery: [i]\'$Query\'[/i]", 1, 0);
return FALSE;
}//if(!mysql_errno
}//function
Помогите, пожалуйста: ни я ни хостер не знаем куда копать... Может кто сталкивался с подобным, или просто какие идеи будут?
-~{}~ 02.03.05 10:05:
Никаких идей так и не появилось, но хостер предложил такое (с моей точки зрения - неправильное, но в данной ситуации красивое) решение - в .htaccess прописать строки:
php_value mysql.default_user USER
php_value mysql.default_password PASS
php_value mysql.default_host HOST
вроде пока работает...