PHP . SU
Программирование на PHP, MySQL и другие веб-технологии
Страниц (1): [1]
Найдено сообщений: 8
Seruy
Отправлено: 14 Декабря, 2009 - 04:43:35 • Тема: Проблема с Mysql после обновления Linux • Форум: SQL и Архитектура БД
Ответов: 1 Просмотров: 24
Обновился сетевой ДС портал (он на Cobreeder), вернее его площадку, изменилось:
PHP 5.3.1 (cli) (built: Nov 28 2009 08:37:48)
Copyright (c) 1997-2009 The PHP Group
Zend Engine v2.3.0, Copyright (c) 1998-2009 Zend Technologies
и
Server version: Apache/2.2.3
Server built: Nov 12 2009 18:43:41
Начинаю в админке править опции, данны не пишутся в Mysql я полез в phpmyadmin, нашёл таблицу опций, окрываю, меняю к примеру даже название сайта, нажимаю Ок и выдаёт:
Цитата: Ошибка
Вероятно, SQL-запрос содержит ошибку. При наличии таковой, ниже будет выведена ошибка MySQL-сервера, облегчающая диагностику проблемы.
ERROR: Незакрытая кавычка @ 89
STR: '
SQL: SELECT * FROM `cobreeder`.`cb_options` WHERE CONVERT(`cb_options`.`name` USING utf8) = \'name\' AND CONVERT(`cb_options`.`group_name` USING utf8) = \'site\';
SQL-запрос:
SELECT * FROM `cobreeder`.`cb_options` WHERE CONVERT(`cb_options`.`name` USING utf8) = \'name\' AND CONVERT(`cb_options`.`group_name` USING utf8) = \'site\';
Ответ MySQL:
#1064 - You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near '\'name\' AND CONVERT(`cb_options`.`group_name` USING utf8) = \'site\'' at line 1
Какая кавычка, вот таблица базы данных чистая, ничего не понимаю:
CODE (
text ):
скопировать код в буфер обмена
DROP TABLE IF EXISTS `cb_options`;
CREATE TABLE IF NOT EXISTS `cb_options` (
`name` varchar(50) NOT NULL default '',
`group_name` varchar(50) NOT NULL default '',
`title` varchar(255) NOT NULL default '',
`value` text NOT NULL,
`type` enum('integer','string','text','boolean') NOT NULL default 'string',
`extra` text NOT NULL,
`position` smallint(5) unsigned NOT NULL default '0',
PRIMARY KEY (`name`,`group_name`)
) TYPE=MyISAM;
Я пошёл другим путём, ставлю чистую базу данных, и тоже самое. Что за ошибка появилась ума не приложу, нет вроде её, и работало php 5.1 постарее. Кодировки не менялись, Mysql был тоже 5 до этого и всё работало.
Вот часть куска кода php который отвечает за передачу данных в mysql и выдаёт: Опции не переданы!
CODE (
text ):
скопировать код в буфер обмена
public function edit()
{
$Template = Registry::instance()->Template;
$Options = Registry::instance()->Options;
$options = request('options', 'P');
if (!$options)
{
$Template->error('Опции не переданы!');
}
$all_options = $Options->getAll();
$clean = array();
foreach ($options as $option_group => $options)
{
foreach ($options as $option => $value)
{
if (!isset($all_options[$option_group]['options'][$option]))
{
continue;
}
$clean[$option_group][$option] = $value;
}
}
Но я не пойму почему phpmyadmin не даёт править даже если ошибка, ведь по теории лезешь править её, накой его тогда вообще придумали...
Ещё самое интересное, в phpmyadmin делаешь Анализ таблицы или Проверить таблицы - пишет что норм, читаемо и в порядке.
Я пошёл другим путём, ставлю чистую базу данных, и тоже самое. Что за ошибка появилась ума не приложу, нет вроде её. Уже 5 утра, ничего не могу придумать, может у кого есть мысли?
(Добавление)
Есть одно но, когда ставлю в любом месте, либо php.ini либо в .htaccess показывать ошибки, портал вообще не отрывается "Не отобразить страницу". Если написать в options.php в самом начале скрипта две строчки
ini_set('display_errors',1);
error_reporting(E_ALL ^E_NOTICE);
Эти две строки заставят выводить сообщения обо всех критических ошибках на экран.
Если никаких ошибок не выведется, надо написать
error_reporting(E_ALL); - вообще админка не открывается.
В коде собак нет, есть емейл в опциях, но уже в админке, но как убрать если не даёт phpmyadmin редактировать теблицу?
Пошёл бы я к разабам, но они давно закрыты, Кобры вообще существовали несколько лет и свернулись. Портал вообщем работоспостобный, постят сетевики пабли и каменты а вот опции , основные, названеи сайта и т.д., не хотел редактироваться. Вот и пришёл к вам.
Seruy
Отправлено: 17 Сентября, 2009 - 10:07:33 • Тема: PHP Notice: Use of undefined constant _ROTATE_ • Форум: Регулярные выражения
Ответов: 3 Просмотров: 774
Парни а что в этом скрипте нужно поправить, чтобы бекапы сохранялись не ежедневно а ежемесячно.
Щас он в крон записан на ежедневное исполнение и хранит исправно 30 бекапов за 30 последних дней, и я его оставлю в работе.
Но хочу его переименовать, подправить\изменить на ежемесячное исполнение в кроне, и чтобы он подстраховал скажем делая бекапы раз в месяц за последние пол года.
mysqldbbackup.php выглядит так:
Спойлер (Отобразить )
CODE (
text ):
скопировать код в буфер обмена
#!/usr/bin/php
<?php
###########################################################################################
## MySQL DB Backup v 1.0 ##
###########################################################################################
## Copyright (c) 2008, Silver Ghost ##
## ##
## Это программа является свободным программным обеспечением. Вы можете ##
## распространять и/или модифицировать её согласно условиям Стандартной ##
## Общественной Лицензии GNU, опубликованной Фондом Свободного Программного ##
## Обеспечения, версии 3 или, по Вашему желанию, любой более поздней версии. ##
## Эта программа распространяется в надежде, что она будет полезной, но БЕЗ ##
## ВСЯКИХ ГАРАНТИЙ, в том числе подразумеваемых гарантий ТОВАРНОГО СОСТОЯНИЯ ПРИ ##
## ПРОДАЖЕ и ГОДНОСТИ ДЛЯ ОПРЕДЕЛЁННОГО ПРИМЕНЕНИЯ. Смотрите Стандартную ##
## Общественную Лицензию GNU для получения дополнительной информации. ##
## Вы должны были получить копию Стандартной Общественной Лицензии GNU вместе ##
## с программой. В случае её отсутствия, посмотрите <http://www.gnu.org/licenses/>. ##
## ##
###########################################################################################
#########################################################################################
## НЕ РЕДАКТИРУЙТЕ НИЧЕГО НИЖЕ ЭТОЙ СТРОКИ, если не знаете, что Вы делаете !!!
#########################################################################################
GetConfig();
if(!_ROTATE_){
echo "!!! NOTICE: Rotate of files not configured in this day.\n";
}
# Разбираем массив со списком баз
while(list($id, $db) = each($dblist)){
# Установлены ли переменные
if($db['db'] && $db['archpath']){
# Удаляем последний слеш в пути к бекапу
RemoveTS($db['archpath']);
# Существует ли путь и есть ли возможность записи
if(file_exists($db['archpath']) && is_writable($db['archpath'])){
echo "\n[ Processing database id '".$id."' ]\n";
$file = $db['archpath']."/".$db['db']."_".date("Y-m-d").".sql.bz2";
# Необходима ли ротация
if(!_ROTATE_){
echo " Removing old backups...\n";
Rotate($db);
}
echo " Dumping database '".$db['db']."'...\n";
exec("mysqldump --user=".$config['dbuser']." --password=".$config['dbpass']." ".$db['db']." | bzip2 -".$config['compress']." > ".$file);
echo " Restoring owner...\n";
exec("chown ".$db['owner']." ".$file);
} else {
echo " ERROR: Directory ".$db['archpath']." not exist or not writable.\n";
}
} else {
echo " ERROR: Check database name or path for backup for database id ".$id."\n";
}
}
# Читаем файл конфигурации
function GetConfig(){
global $config, $dblist, $bd;
# Читаем ini-файл
$pathtoini = dirname(__FILE__);
$ini = parse_ini_file($pathtoini."/mysqldbbackup.ini", true);
# Переносим в конфиг опции
$config = $ini['Options'];
# Составляем список баз для бекапа
while(list($key, $val) = each($ini)){
if($key != 'Options'){
$dblist[$key] = $val;
}
}
# Прибиваем переменную. Она больше не нужна
unset($ini);
# Парсим дни для ротации файлов и проверяем необходимость ротации
# Если в конфиге "*", то ставим флаг ротации
if($config['removedays'] == '*'){
define("_ROTATE_", 1);
# если нет, то вызываем функцию проверки необходимости ротации
} else {
$bd = split(',', str_replace(' ', '', trim($config['removedays'])));
VerifyRotateDay($bd);
}
}
# Проверяем совпадение дня ротации
function VerifyRotateDay(&$bd){
if (in_array(date('w'), $bd)){
define(_ROTATE_, 1);
} else {
define(_ROTATE_, 0);
}
}
# Производим ротацию
function Rotate(&$opt){
global $config;
# Вычитываем список файлов
$files = split("\n", trim(`ls -lt ${opt['archpath']} | awk {'print($8)'} | grep ${opt['db']} | grep sql | grep bz2`));
$i = count($files);
while($config['nob'] < $i){
# Удаляем лишнее
unlink($opt['archpath']."/".$files[$i-1]);
echo " Removed file ".$files[$i-1]."\n";
$i--;
}
}
# Удаляем замыкающий слеш
function RemoveTS(&$str){
if(substr($str, -1, 1) == '/'){
return substr($str, 0, -1);
}
}
?>
Файл настроек бекапа mysqldbbackup.ini выглядит так:
Спойлер (Отобразить )
CODE (
text ):
скопировать код в буфер обмена
## Настройки создания резервных копий
[Options]
removedays = *
nob = 30
compress = 9
dbuser = root
dbpass = pass
## Список баз данных для создания резервных копий
[magneto]
db = magneto
archpath = /var/backup/
owner = root:root
[forum]
db = forum
archpath = /var/backup/
owner = root:root
[mysql]
db = mysql
archpath = /var/backup/
owner = root:root
[verlihub]
db = verlihub
archpath = /var/backup/
owner = root:root
- removedays отвечает за настройку дня недели, в которые будет проводиться удаление
старых файлов резервных копий. Дни недели указываются через запятую (0 - воскресенье). Можно
указать "*", что означает каждый день;
- nob (number of backups) отвечает за количество хранимых бекапов;
- compress - коэффициент сжатия (0 - 9);
- dbuser - имя суперполльзователя (обычно root);
- dbpass - пароль для указанного пользователя.
Seruy
Отправлено: 30 Августа, 2009 - 18:11:54 • Тема: DB Error: no such field • Форум: PEAR и PECL
Ответов: 6 Просмотров: 6519
Champion пишет: вывести - это вставить echo в нужное место. Потом надо скопировать и вставить PMA или чем ты еще пользуешься. Если это SELECT, ничего плохого не произойдет. Он только читает и ничего не меняет.
А тем более запрос даже не выполняется, а выдает ошибку. Ничего плохого тем более не произойдет))
Обязательно попробую завтра на работе и отпишусь. Спасибо за помощь
Seruy
Отправлено: 29 Августа, 2009 - 10:21:33 • Тема: DB Error: no such field • Форум: PEAR и PECL
Ответов: 6 Просмотров: 6519
Если я правильно пошёл запрос:
CODE (
text ):
скопировать код в буфер обмена
$DB = Registry::instance()->DB;
// first get violation types
$evaltypes = $DB->getAll("SELECT `id`, `description`, `points` FROM ".PREFIX."evaluation_types ORDER BY `id` ASC");
//second get list of violations
$evaluations = $DB->getAll("
SELECT
`e`.`id`,
`e`.`date`,
`e`.`comment`,
`e`.`publication_link`,
`u`.`username` AS `investigated`,
`et`.`description`,
`et`.`points`,
`m`.`username` AS `moderator`
FROM
`".PREFIX."evaluations` e,
`".PREFIX."users` u,
`".PREFIX."users` m,
`".PREFIX."evaluation_types` et
WHERE
`e`.`user_id`=`u`.`id`
AND
`e`.`evaluation_type_id`=`et`.`id`
AND `e`.`moderator_id` = `m`.`id`
AND `u`.`id`='".request("user_id")."';");
//print_r($evaluations);
$total_points = 0;
if ($evaluations)
{
for($i=0;$i<count($evaluations);$i++)
{
$total_points += $evaluations[$i]["points"];
}
}
$actions = $DB->getAll("SELECT `more_or_less`, `than_value`, `move_to_usergroup` FROM `".PREFIX."action_list`;");
$usergroups = $DB->getAll("SELECT `id`, `title` FROM ".PREFIX."usergroups ORDER BY `id` ASC");
$Template = Registry::instance()->Template;
$Template->assign('total_points', $total_points);
$Template->assign('user_id', request('user_id'));
$Template->assign('evaluations', $evaluations);
$Template->assign('evaltypes', $evaltypes);
$Template->assign('action_report', $action_report);
$Template->assign('actions', $actions);
$Template->assign('usergroups', $usergroups);
а уже как возмёт инфу с БД то уже формирование в тимплейт страницу:
Ща сгляну что там в БД. Жаль логги не пишет БД об ошибке, сразу бы узнать на чём затык.
Seruy
Отправлено: 28 Августа, 2009 - 23:34:07 • Тема: DB Error: no such field • Форум: PEAR и PECL
Ответов: 6 Просмотров: 6519
При открытии статистики любого пользователя сайта, вылетает ошибка: DB Error: no such field
Прошёлся по Рунету, вычитал это т.к., сайт использует PEAR:
This prints:
DB Error: no such field
To print out an error message and then quit, use PEAR_ERROR_DIE. You can also use the PEAR_ERROR_CALLBACK constant to run a custom function when an error is raised. This custom function can print out even more detailed information:
function pc_log_error($error_obj) {
error_log(sprintf("%s (%s)",$error_obj->message,$error_obj->userinfo));
}
$dbh->setErrorHandling(PEAR_ERROR_CALLBACK,'pc_log_error');
$sth = $dbh->query("SELECT aroma FROM zodiac WHERE element LIKE 'fire'");
Сама страничка privatecase.php, что должна выводить информауию выглядит так:
Спойлер (Отобразить )
CODE (
text ):
скопировать код в буфер обмена
<?php
require_once './global.php';
require_once INCLUDES.'/Controller.php';
require_once INCLUDES.'/PM.php';
class PrivateCase_Controller extends Controller
{
private $user_id;
private $post_hash;
private $redirect;
public function __construct($action)
{
$Template = Registry::instance()->Template;
header('Content-Type: text/html; charset=UTF-8');
$user_id = (int) request('user_id');
if ($user_id)
{
if (!(($user_id == $_SESSION['user']['id'] AND
$_SESSION['user']['permissions'] & CAN_SEE_OWN_PRIVATE_CASE) OR
($user_id != $_SESSION['user']['id'] AND
$_SESSION['user']['permissions'] & CAN_SEE_PRIVATE_CASE)))
{
die($Template->l('You don\'t have the right to see this private case!'));
}
$this->mode = 'view';
$this->user_id = $user_id;
$Template->assign('user_id', $user_id);
$this->redirect = WEB_ROOT.'/privatecase.php?user_id='.$user_id;
}
else
{
die($Template->l('Query error!'));
}
parent::__construct($action);
}
public function view($action_report = "")
{
$violations=FALSE;
$violtypes=FALSE;
$DB = Registry::instance()->DB;
// first get violation types
$evaltypes = $DB->getAll("SELECT `id`, `description`, `points` FROM ".PREFIX."evaluation_types ORDER BY `id` ASC");
//second get list of violations
$evaluations = $DB->getAll("
SELECT
`e`.`id`,
`e`.`date`,
`e`.`comment`,
`e`.`publication_link`,
`u`.`username` AS `investigated`,
`et`.`description`,
`et`.`points`,
`m`.`username` AS `moderator`
FROM
`".PREFIX."evaluations` e,
`".PREFIX."users` u,
`".PREFIX."users` m,
`".PREFIX."evaluation_types` et
WHERE
`e`.`user_id`=`u`.`id`
AND
`e`.`evaluation_type_id`=`et`.`id`
AND `e`.`moderator_id` = `m`.`id`
AND `u`.`id`='".request("user_id")."';");
//print_r($evaluations);
$total_points = 0;
if ($evaluations)
{
for($i=0;$i<count($evaluations);$i++)
{
$total_points += $evaluations[$i]["points"];
}
}
$actions = $DB->getAll("SELECT `more_or_less`, `than_value`, `move_to_usergroup` FROM `".PREFIX."action_list`;");
$usergroups = $DB->getAll("SELECT `id`, `title` FROM ".PREFIX."usergroups ORDER BY `id` ASC");
$Template = Registry::instance()->Template;
$Template->assign('total_points', $total_points);
$Template->assign('user_id', request('user_id'));
$Template->assign('evaluations', $evaluations);
$Template->assign('evaltypes', $evaltypes);
$Template->assign('action_report', $action_report);
$Template->assign('actions', $actions);
$Template->assign('usergroups', $usergroups);
$Template->display('privatecase.tpl');
}
public function index()
{
$Template = Registry::instance()->Template;
die($Template->l('This action is not supported!'));
}
public function add()
{
$evaluations=FALSE;
$evaltypes=FALSE;
$DB = Registry::instance()->DB;
$Template = Registry::instance()->Template;
if(!($_SESSION['user']['permissions'] & CAN_EDIT_PRIVATE_CASE))
die($Template->l('You don\'t have the right to add evaluations!'));
$evaluation = array
(
'user_id' => request("user_id"),
'moderator_id' => $_SESSION['user']['id'],
'evaluation_type_id' => request("evaltype"),
'date' => date('Y-m-d'),
'comment' => request("modercomment"),
'publication_link' => request("publink"),
);
$result = $DB->autoExecute(PREFIX.'evaluations', $evaluation, DB_AUTOQUERY_INSERT);
$PM = new PM;
$total_points = $DB->getOne("
SELECT
SUM(`".PREFIX."evaluation_types`.`points`)
FROM
`".PREFIX."evaluations`,
`".PREFIX."users`,
`".PREFIX."evaluation_types`
WHERE
`".PREFIX."evaluations`.`user_id`=`".PREFIX."users`.`id`
AND
`".PREFIX."evaluations`.`evaluation_type_id`=`".PREFIX."evaluation_types`.`id`
AND
`".PREFIX."users`.`id`='".request("user_id")."';");
//echo($total_weight);
$evaltypecap = $DB->getAll("
SELECT
`".PREFIX."evaluation_types`.`description`,
`".PREFIX."evaluation_types`.`points`
FROM
`".PREFIX."evaluation_types`
WHERE
`".PREFIX."evaluation_types`.`id` = ".request("evaltype"));
//perform all action as in list
$actions = $DB->getAll("SELECT `more_or_less`, `than_value`, `move_to_usergroup` FROM `".PREFIX."action_list`;");
$action_done = FALSE;
$action_report = $Template->l("No actions executed.");
foreach ($actions as $action)
{
switch ($action["more_or_less"])
{
case "0":
if ($total_points <= (int)$action["than_value"])
{
$current_ug = $DB->getOne("SELECT `usergroup_id` FROM `".PREFIX."users` WHERE `id` = ".request("user_id"));
if ($current_ug != $action["move_to_usergroup"])
{
$data["usergroup_id"] = $action["move_to_usergroup"];
$DB->autoExecute(PREFIX.'users', $data, DB_AUTOQUERY_UPDATE, 'id = '.request("user_id"));
$action_done = TRUE;
}
}
break;
case "1":
if ($total_points >= (int)$action["than_value"])
{
$current_ug = $DB->getOne("SELECT `usergroup_id` FROM `".PREFIX."users` WHERE `id` = ".request("user_id"));
if ($current_ug != $action["move_to_usergroup"])
{
$data["usergroup_id"] = $action["move_to_usergroup"];
$DB->autoExecute(PREFIX.'users', $data, DB_AUTOQUERY_UPDATE, 'id = '.request("user_id"));
$action_done = TRUE;
}
}
}
if ($action_done)
{
//prepare message on action done
$usergroup = $DB->getOne("SELECT `title` FROM `".PREFIX."usergroups` WHERE `id` = ".$action["move_to_usergroup"].";");
$action_report = $Template->l("User was moved to group [b]USERGROUP[/b].");
$action_report = str_replace("USERGROUP", $usergroup, $action_report);
break;
}
}
//print_r($violtypecap);
$clean = array();
$clean['user_id'] = (int) $_SESSION['user']['id'];
$clean['receiver_id'] = (int) request("user_id");
$clean['sent_unixtime'] = NOW;
$clean['unread'] = 1;
$clean['title'] = $Template->l("Report on act evaluation");
$temp = $Template->l("[u]Act evaluation report[/u]<br /><br />Date: [b]CURRDATE[/b]<br />Type: [b]VIOLTYPE[/b]<br />Points: [b]1WEIGHT[/b]<br />Total points: [b]TOTALWEIGHT[/b]<br />Comment: [b]ACOMMENT[/b]<br />Publication link: [b]PUBLINK[/b]<br />Moderator: [b]ADMIN[/b]<br />Consequences: [b]CONSEQ1[/b]");
$temp = str_replace("<br />", "\r\n", $temp);
$temp = str_replace("CURRDATE", date('Y-m-d'), $temp);
$temp = str_replace("VIOLTYPE", $Template->l($evaltypecap[0]["description"]), $temp);
$temp = str_replace("1WEIGHT", $evaltypecap[0]["points"], $temp);
$temp = str_replace("TOTALWEIGHT", $total_points, $temp);
$temp = str_replace("ACOMMENT", request("modercomment"), $temp);
$temp = str_replace("PUBLINK", "[url]".request("publink")."[/url]", $temp);
$temp = str_replace("ADMIN", "[url=".WEB_ROOT."/users/".$_SESSION['user']['id']."]".$_SESSION['user']['username']."[/url]", $temp);
$temp = str_replace("CONSEQ1", $action_report, $temp);
//echo $temp;
$clean['content'] = $temp;
//print_r($clean);
// $result=FALSE;
$PMres = $PM->add($clean);
if (!$result&&!$PMres)
{
return FALSE;
}
else
{
$this->view($action_report);
}
}
public function edit()
{
die($Template->l('This action is not supported!'));
}
public function delete()
{
$DB = Registry::instance()->DB;
$Template = Registry::instance()->Template;
if(!($_SESSION['user']['permissions'] & CAN_EDIT_PRIVATE_CASE))
die($Template->l('You don\'t have the right to remove evaluations!'));
$result = $DB->query('
DELETE FROM '.PREFIX.'evaluations
WHERE id = ?
', request("eval_id"));
if (!$result)
{
return FALSE;
}
else
{
$this->view();
}
}
}
new PrivateCase_Controller(request('action'));
?>
Это страничка отрывает "Личное дело" (зарегистрированных пользоваталей) , кто сколько нафлудил, публикаций оставил и т.д.
Есть надежда узнать что он просит?
Seruy
Отправлено: 25 Августа, 2009 - 15:20:59 • Тема: PHP Notice: Use of undefined constant _ROTATE_ • Форум: Регулярные выражения
Ответов: 3 Просмотров: 774
На что то ругается PHP в скрипте дамба Mysql, непойму что ему не нравится.
Сама ошибка выводится в консоли при дампе, цитата:
# ./mysqldbbackup.php
PHP Notice: Use of undefined constant _ROTATE_ - assumed '_ROTATE_' in /var/backup/mysqldbbackup.php on line 88
[ Processing database id 'dle' ]
Removing old backups...
Dumping database 'dle'...
Restoring owner...
[ Processing database id 'magneto' ]
Removing old backups...
Dumping database 'magneto'...
Restoring owner...
Всё успешно задампилось, но ошибка грозит на строку 88 а line 88 такова: define(_ROTATE_, 1);
Весь скрипт дампа:
Спойлер (Отобразить )
CODE (
text ):
скопировать код в буфер обмена
#!/usr/bin/php
<?php
###########################################################################################
## MySQL DB Backup v 1.0 ##
###########################################################################################
## Copyright (c) 2008, Silver Ghost ##
## ##
## Это программа является свободным программным обеспечением. Вы можете ##
## распространять и/или модифицировать её согласно условиям Стандартной ##
## Общественной Лицензии GNU, опубликованной Фондом Свободного Программного ##
## Обеспечения, версии 3 или, по Вашему желанию, любой более поздней версии. ##
## Эта программа распространяется в надежде, что она будет полезной, но БЕЗ ##
## ВСЯКИХ ГАРАНТИЙ, в том числе подразумеваемых гарантий ТОВАРНОГО СОСТОЯНИЯ ПРИ ##
## ПРОДАЖЕ и ГОДНОСТИ ДЛЯ ОПРЕДЕЛЁННОГО ПРИМЕНЕНИЯ. Смотрите Стандартную ##
## Общественную Лицензию GNU для получения дополнительной информации. ##
## Вы должны были получить копию Стандартной Общественной Лицензии GNU вместе ##
## с программой. В случае её отсутствия, посмотрите <http://www.gnu.org/licenses/>. ##
## ##
###########################################################################################
#########################################################################################
## НЕ РЕДАКТИРУЙТЕ НИЧЕГО НИЖЕ ЭТОЙ СТРОКИ, если не знаете, что Вы делаете !!!
#########################################################################################
GetConfig();
if(_ROTATE_){
echo "!!! NOTICE: Rotate of files not configured in this day.\n";
}
# Разбираем массив со списком баз
while(list($id, $db) = each($dblist)){
# Установлены ли переменные
if($db['db'] && $db['archpath']){
# Удаляем последний слеш в пути к бекапу
RemoveTS($db['archpath']);
# Существует ли путь и есть ли возможность записи
if(file_exists($db['archpath']) && is_writable($db['archpath'])){
echo "\n[ Processing database id '".$id."' ]\n";
$file = $db['archpath']."/".$db['db']."_".date("Y-m-d").".sql.bz2";
# Необходима ли ротация
if(_ROTATE_){
echo " Removing old backups...\n";
Rotate($db);
}
echo " Dumping database '".$db['db']."'...\n";
exec("mysqldump --user=".$config['dbuser']." --password=".$config['dbpass']." ".$db['db']." | bzip2 -".$config['compress']." > ".$file);
echo " Restoring owner...\n";
exec("chown ".$db['owner']." ".$file);
} else {
echo " ERROR: Directory ".$db['archpath']." not exist or not writable.\n";
}
} else {
echo " ERROR: Check database name or path for backup for database id ".$id."\n";
}
}
# Читаем файл конфигурации
function GetConfig(){
global $config, $dblist, $bd;
# Читаем ini-файл
$pathtoini = dirname(__FILE__);
$ini = parse_ini_file($pathtoini."/var/backup/mysqldbbackup.ini", true);
# Переносим в конфиг опции
$config = $ini['Options'];
}
}
# Прибиваем переменную. Она больше не нужна
unset($ini);
# Парсим дни для ротации файлов и проверяем необходимость ротации
# Если в конфиге "*", то ставим флаг ротации
if($config['removedays'] == '*'){
define(_ROTATE_, 1);
# если нет, то вызываем функцию проверки необходимости ротации
} else {
$bd = split(',', str_replace(' ', '', trim($config['removedays'])));
VerifyRotateDay($bd);
}
}
# Проверяем совпадение дня ротации
function VerifyRotateDay(&$bd){
if (in_array(date('w'), $bd)){
define(_ROTATE_, 1);
} else {
define(_ROTATE_, 0);
}
}
# Производим ротацию
function Rotate(&$opt){
global $config;
# Вычитываем список файлов
$files = split("\n", trim(`ls -lt ${opt['archpath']} | awk {'print($8)'} | grep ${opt['db']} | grep sql | grep bz2`));
$i = count($files);
while($config['nob'] < $i){
# Удаляем лишнее
unlink($opt['archpath']."/".$files[$i-1]);
echo " Removed file ".$files[$i-1]."\n";
$i--;
}
}
?>
Скрипт делает дампы, всё номруль, но хочется ошибку убить, подскажите что ему не нравится в ROTATE?
Страниц (1): [1]
Powered by ExBB FM 1.0 RC1. InvisionExBB