дамп данных из MySQL
возникла задача реализовать на сайте возможность загрузки полного дампа данных из БД в файл клиента. MySQL средства аля SELECT … INTO OUTFILE не подходят по причине отсутствия (гипотетического) прав на сохранение… Решил писать свое лисапедо
Вот что получилось:
define("ROOT", str_replace("\\", "/", realpath(dirname(__FILE__)."/../../")));
$result = mysql_list_tables(MYSQL_DBNAME);
$zip = new ZipArchive();
$filename = ROOT."/dumps/dump_".time().".zip";
if ($zip->open($filename, ZIPARCHIVE::CREATE)!==TRUE) {
exit("cannot open <$filename>\n");
}
while ($row = mysql_fetch_row($result)) {
$fcontent = "";
$sql = "SELECT * FROM {$row[0]};”;
$inner_result = mysql_query($sql);
while ($inner_row = mysql_fetch_row($inner_result)) {
for ($i = 0; $i < count($inner_row); $i++) {
$inner_row[$i] = mysql_escape_string($inner_row[$i]);
if (strstr($inner_row[$i], “,”)) {
$inner_row[$i] = ‘”‘.$inner_row[$i].’”‘;
}
$fcontent .= $inner_row[$i].”, “;
}
$fcontent = substr($fcontent, 0, -2).”\n”;
}
$zip->addFromString(”{$row[0]}.txt”, $fcontent);
}
$zip->close();
header(”Location: /dumps/dump_”.time().”.zip”);
о производительности пока не заботился - чуть позже (после обеда) буду тестировать, да и сам код пока не вылизывал….
В приведенном участке кода могут присутствовать неопределенные переменные либо что-то типа такого, так как кусок взят из рабочего проекта просто методом “с… по …. строку копировать” ![]()
Апрель 25th, 2007 at 11:44
З.Ы. Если пользуетесь и/или правите - просьба выслать изменения на azazel.tap@gmail.com - будем приводить в нормальный вид вместе