.fatemeh
دوشنبه 25 فروردین 1393, 22:59 عصر
سلام
کدی گذاشته بودم برای پشتیبان گیری توسط کاربر مشکلی نداشت کار می کرد.
ولی الان که تعداد رکوردها زیاد شده مشکل پیدا کرده.
جدول prodcut تعداد رکوردهاش 185 تاست ولی فقط تا 161 ادامه میده. رکورد 161 رو هم کامل نمی ریزه
فایل ناقصه و نمیشه import کرد.فکر کردم شاید همین رکورد مشکل خاصی داره پاکش کردم بازم جواب نداد.
کد اینه:
function backup_db($host, $user, $pass, $name, $tables = '*') {
date_default_timezone_set('Asia/Tehran');
$return = '';
mysql_connect($host,$user,$pass) or die('Connection error');
mysql_select_db($name) or die('Database error');
mysql_query('SET NAMES \'utf8\'');
mysql_set_charset('utf8');
if($tables == '*') {
$tables = array();
$result = mysql_query('SHOW TABLES');
while($row = mysql_fetch_row($result)) {
$tables[] = $row[0];
}
mysql_free_result($result);
}
else {
$tables = is_array($tables) ? $tables : explode(',', $tables);
}
foreach($tables as $table) {
$result = mysql_query('SELECT * FROM `'.$table.'`');
$num_fields = mysql_num_fields($result);
$return .= 'DROP TABLE IF EXISTS `'.$table.'`;'.PHP_EOL.PHP_EOL;
$row = mysql_fetch_row(mysql_query('SHOW CREATE TABLE `'.$table.'`'));
$return .= $row[1].';'.PHP_EOL.PHP_EOL;
for ($i = 0; $i < $num_fields; $i++) {
while($row = mysql_fetch_row($result)) {
$return.= 'INSERT INTO `'.$table.'` VALUES(';
for($j = 0; $j < $num_fields; $j++) {
$row[$j] = addslashes($row[$j]);
$row[$j] = str_replace('\n', '\\n', $row[$j]);
if (isset($row[$j])) {
$return .= '\''.$row[$j].'\'';
}
else {
$return .= '\'\'';
}
if ($j < ($num_fields - 1)) {
$return .= ',';
}
}
$return .= ');'.PHP_EOL;
}
}
$return .= PHP_EOL.PHP_EOL.PHP_EOL;
}
header('Pragma: public');
header('Expires: 0');
header('Cache-Control: must-revalidate, post-check=0, pre-check=0');
header('Cache-Control: private', false);
header('Content-Type: text/plain');
header('Content-Disposition: attachment; filename="db-backup-' . $name . '-' . date('Y,m,d-H,i,s').'.sql"');
header('Content-Transfer-Encoding: binary');
header('Content-Length: '.mb_strlen($return, 'utf-8'));
ob_clean();
flush();
echo $return;
}
خیلی خیلی ضروریه.دیونه ام کرده
کدی گذاشته بودم برای پشتیبان گیری توسط کاربر مشکلی نداشت کار می کرد.
ولی الان که تعداد رکوردها زیاد شده مشکل پیدا کرده.
جدول prodcut تعداد رکوردهاش 185 تاست ولی فقط تا 161 ادامه میده. رکورد 161 رو هم کامل نمی ریزه
فایل ناقصه و نمیشه import کرد.فکر کردم شاید همین رکورد مشکل خاصی داره پاکش کردم بازم جواب نداد.
کد اینه:
function backup_db($host, $user, $pass, $name, $tables = '*') {
date_default_timezone_set('Asia/Tehran');
$return = '';
mysql_connect($host,$user,$pass) or die('Connection error');
mysql_select_db($name) or die('Database error');
mysql_query('SET NAMES \'utf8\'');
mysql_set_charset('utf8');
if($tables == '*') {
$tables = array();
$result = mysql_query('SHOW TABLES');
while($row = mysql_fetch_row($result)) {
$tables[] = $row[0];
}
mysql_free_result($result);
}
else {
$tables = is_array($tables) ? $tables : explode(',', $tables);
}
foreach($tables as $table) {
$result = mysql_query('SELECT * FROM `'.$table.'`');
$num_fields = mysql_num_fields($result);
$return .= 'DROP TABLE IF EXISTS `'.$table.'`;'.PHP_EOL.PHP_EOL;
$row = mysql_fetch_row(mysql_query('SHOW CREATE TABLE `'.$table.'`'));
$return .= $row[1].';'.PHP_EOL.PHP_EOL;
for ($i = 0; $i < $num_fields; $i++) {
while($row = mysql_fetch_row($result)) {
$return.= 'INSERT INTO `'.$table.'` VALUES(';
for($j = 0; $j < $num_fields; $j++) {
$row[$j] = addslashes($row[$j]);
$row[$j] = str_replace('\n', '\\n', $row[$j]);
if (isset($row[$j])) {
$return .= '\''.$row[$j].'\'';
}
else {
$return .= '\'\'';
}
if ($j < ($num_fields - 1)) {
$return .= ',';
}
}
$return .= ');'.PHP_EOL;
}
}
$return .= PHP_EOL.PHP_EOL.PHP_EOL;
}
header('Pragma: public');
header('Expires: 0');
header('Cache-Control: must-revalidate, post-check=0, pre-check=0');
header('Cache-Control: private', false);
header('Content-Type: text/plain');
header('Content-Disposition: attachment; filename="db-backup-' . $name . '-' . date('Y,m,d-H,i,s').'.sql"');
header('Content-Transfer-Encoding: binary');
header('Content-Length: '.mb_strlen($return, 'utf-8'));
ob_clean();
flush();
echo $return;
}
خیلی خیلی ضروریه.دیونه ام کرده