Быстрый лёгкий надёжный форумный движок
Вы не вошли.
Страницы 1
Тема закрыта
Столкнулся очередной раз с идиотской проблемой отечественных хостеров (жадность до ресурсов).
Например на сервере в америке бд объемом 45мб прекрасно закачивается незапакованная и исполняется в phpMyAdmin'е без каких-либо ошибок.
У наших хостеров с этим туго. Даже если дать упакованный дамп, который нормально зааплоадится на сервер, то после распаковки во время исполнения phpMyAdmin все равно поперхнется. Ругаться с хостерами бессмысленно, уходить за океан иной раз из-за такой мелочи накладно.
Сделал скрипт, который распаковывает дамп и построчно исполняет. Может кому пригодится
Особенность скрипта - упакованный дамп должен называться sqldata.gz, скрипт работает в только связке с punbb1.3, ложить надо в корень, туда же ложить дамп.
Перед выполнением должна быть создана структура таблиц.
Порядок действий
1. Сделать дамп БД в 2 этапа:
1.2 дамп структуры
1.3 дамп данных, с опциями "полная вставка", сжатие gz
2 Создать в новой бд структуру из дампа структуры
3 Скопировать дамп данных в корень форума
4 Создать файл dbrestore.php в корне форума такого содержания:
function gunzip ($in, $out)
{
if (!file_exists ($in) || !is_readable ($in))
return false;
if ((!file_exists ($out) && !is_writable (dirname ($out)) || (file_exists($out) && !is_writable($out)) ))
return false;
$in_file = gzopen ($in, "rb");
$out_file = fopen ($out, "wb");
while (!gzeof ($in_file)) {
$buffer = gzread ($in_file, 4096);
fwrite ($out_file, $buffer, 4096);
}
gzclose ($in_file);
fclose ($out_file);
return true;
}
set_time_limit(0);
define('SQL_FILE', 'sqldata.sql');
define('GZ_SQL_FILE', 'sqldata.gz');
header('Content-type: text/html; charset=utf-8');
if (!defined('FORUM_ROOT'))
define('FORUM_ROOT', './');
@include FORUM_ROOT.'config.php';
require FORUM_ROOT.'include/dblayer/common_db.php';
if (!function_exists('gzopen'))
exit('GZ function not included!');
if (!file_exists (GZ_SQL_FILE) || !is_readable (GZ_SQL_FILE)) {
exit('No '.GZ_SQL_FILE.' file detected! ');
}
if (!gunzip(GZ_SQL_FILE, SQL_FILE))
exit('Error when gunzipped! ');
$handle = fopen(SQL_FILE, "rb");
echo 'DB restore start... '."<br>";
$num = 0;
while (!feof($handle)) {
$buffer = fgets($handle);
if (stripos($buffer,'insert')!== false){
echo ++$num.' ';
$forum_db->query($buffer);
}else {
$num = 0;
echo $buffer.'<br>';
}
}
fclose($handle);
echo 'Complete! '."<br>";
5. выполнить этот скрипт
6. удалить скрипт, удалить sqldata.sql и sqldata.gz из корня форума
Страницы 1
Тема закрыта