PDA

View Full Version : آموزش: آموزش واردكردن فايلهاي حجيم MySQL در DB با كمك AJAX



MMSHFE
چهارشنبه 06 بهمن 1389, 11:08 صبح
با سلام، در اين آموزش، فايلي رو ضميمه كردم كه به كمك اون ميتونيد فايلهاي حجيم MySQL رو (تا 700 مگابايت تست شده) بدون مشكل TimeOut و با كمك AJAX، توي بانك اطلاعاتي Import كنيد. كافيه فايلهاي MySQL رو كه از بانك اطلاعاتي Export كردين در كنار فايلهاي اين آموزش قرار بدين تا خودش اونها رو شناسايي كنه. درمورد روش كارش (كدها) هم اگه سؤالي داشتين، بفرماييد تا راهنمايي كنم.

aliforever
یک شنبه 03 اردیبهشت 1391, 17:14 عصر
سلام من 3 تا فایل به نام های s1(install).sql.gz و s2.sql.gz و s3.sql.gz دارم .
هر 3 تا رو در کنار فایلهای برنامه قرار دادم ولی در قسمت select sql file نمیاره هیچ کدوم رو .
مشکل از کجاست ؟
فک کنم فرمت فایلهام باید sql باشه . چون این اسکریپت این فرمت رو ساپورت می کنه .
میشه فرمت های دیگه ای رو هم اضافه کرد ؟؟

MMSHFE
یک شنبه 03 اردیبهشت 1391, 23:29 عصر
نسخه جدیدی از AJAX Import نوشتم که Progress Bar هم داره.

MMSHFE
یک شنبه 03 اردیبهشت 1391, 23:30 عصر
سلام من 3 تا فایل به نام های s1(install).sql.gz و s2.sql.gz و s3.sql.gz دارم .
هر 3 تا رو در کنار فایلهای برنامه قرار دادم ولی در قسمت select sql file نمیاره هیچ کدوم رو .
مشکل از کجاست ؟
فک کنم فرمت فایلهام باید sql باشه . چون این اسکریپت این فرمت رو ساپورت می کنه .
میشه فرمت های دیگه ای رو هم اضافه کرد ؟؟
باید فایلها رو از حالت فشرده خارج کنید. فعلاً این نسخه فایلهای فشرده gzip رو پشتیبانی نمیکنه. دارم روی نسخه بعدی که میتونه فایلهای فشرده رو هم شناسایی و باز کنه کار میکنم.

armsoftpc
دوشنبه 04 اردیبهشت 1391, 23:43 عصر
به نام خدا
با سلام
درستتون درد نکنه ، اما ای کاش می شد، بگید که دیتابیس 700 مگی از کجا آوردید تا ما هم این جا یه تستی بکنیم.(کاملا جدی گفتم.)، تا حالا بیش ترین حجمی که تست کردم ، حدودا 80 مگ بوده که اون هم فقط با mysql dumper شده ، که واقعا برنامه وبی عالی است.
اگر هم امکان داره هر چه زودتر قابلیت gzip اضافه کنید، من یه پیشنهاد دارم ، اونم این که شما تمام کدها را ننویسید که خسته بشید ، یه قسمتی هم به عهده کاربرانی که سرشان از شما (مثل من) خلوت تر است بگذارید تا هم این جوری ما کار رو یاد بگیریم ، هم شما این قدر با درخواست های زیاد من و دوستان اذیت نشید و در آخر هم کدها رو یه ویرایش ساده کنید.(که البته قول میدهم جوری بنویسم که به این کار هم لازم نباشد.)
ممنون

MMSHFE
سه شنبه 05 اردیبهشت 1391, 08:22 صبح
دوست عزیز دیتابیس 700 مگابایتی مربوط به Export یک سایت تبلیغاتی شبیه ایستگاه هست که میخواستن براشون نسخه جدید و سبکتری طراحی کنم ولی اطلاعات ثبت شده به این سیستم جدید منتقل بشه و از بین نره. بخاطر همین یک Backup از دیتابیس قبلی برام فرستادن. درمورد gzip هم دارم روش کار میکنم. اما اینکه میفرمایید تقسیم کار بشه هم بد نیست. مثلاً همین قسمت gzip رو خودتون هم روش کار کنید و بعد کدهای مختلف رو میگذاریم و نواقص و مشکلات احتمالی رو رفع میکنیم و مقایسه جزئی بین کدها هم خواهیم داشت. موفق باشید.

MMSHFE
سه شنبه 05 اردیبهشت 1391, 14:53 عصر
دوستان الوعده وفا. اینم نسخه ای که از gzip پشتیبانی میکنه. فقط دقت کنید که کارکردنش با gzip یکم کندتر از فایلهای معمولی هست که اون هم مقصر من نیستم. تقصیر خود این فایلهاست که ساختارشون یکم کندتر از فایلهای عادی هست. البته دارم یک نسخه دیگه هم مینویسم که در هر دفعه اجرا، تعداد کوئریهای بیشتری رو اجرا میکنه تا سرعت کار بالا بره. موفق باشید.

MMSHFE
چهارشنبه 06 اردیبهشت 1391, 11:31 صبح
خوشحال میشم نظر دوستان رو درمورد این اسکریپت و اینکه به نظرتون چه امکانات بیشتری لازم داره بدونم.

aliforever
چهارشنبه 06 اردیبهشت 1391, 16:49 عصر
سلام .
چطوری میشه این Importer رو اتوماتیک کرد .
من یه اسکریپت بازی تراوین دارم . چطوری میشه در مرحله نصب ، این اسکریپت رو اضافه کنم و اتوماتیک فایل های بانک اطلاعاتی رو Import کنه .
راستی همین سوال رو در تاپیک تراوین پرسیدم ولی جوابی داده نشد . اگه میشه راهنماییم کنید .
برای دیدن تاپیک کلیک کنید (http://barnamenevis.org/showthread.php?337638-%D8%A7%D8%B3%DA%A9%D8%B1%DB%8C%D9%BE%D8%AA-%D8%AA%D8%B1%D8%A7%D9%88%DB%8C%D9%86)

ممنون .
---------------------------------
این اسکریپت رو هم من نصب کردم ولی ارور میده . آدرس وبسایتم ، http://xtrav.zgig.ir/sql-importer/ مشکل از کجاست ؟

MMSHFE
چهارشنبه 06 اردیبهشت 1391, 17:31 عصر
برای خودکار کردنش، فایل index.php رو حذف کنید و فایل import.php رو اینطوری تغییر بدین:


<!doctype html>
<html>
<head>
<title>AJAX Import</title>
<meta charset="utf-8"/>
<script src="jqmin.js" type="text/javascript"></script>
<script type="text/javascript">
$(document).ready(function() {
var size = $("#size").html().replace(/,/gi, "");
function read(file, pos) {
var fn = $("#fn").html();
var host = $("#host").html();
var user = $("#user").html();
var pass = $("#pass").html();
var db = $("#db").html();
$.ajax({
type: "post",
url: "action.php",
data: "fn="+fn+"&host="+host+"&user="+user+"&pass="+pass+"&db="+db+"&pos="+pos,
success: function(data) {
var newpos = parseFloat(data.substring(0, data.indexOf(" ")));
if(newpos > pos) {
var query = data.substring(data.indexOf(" ") + 1);
$("#current").html(newpos);
$("#query").html(query);
var elapsed_percent = Math.floor(newpos / size * 100);
var remained_percent = 100 - elapsed_percent;
var elapsed = "";
while(elapsed_percent > 0) {
elapsed += "&nbsp;";
elapsed_percent--;
}
var remained = "";
while(remained_percent > 0) {
remained += "&nbsp;";
remained_percent--;
}
$("#elapsed").html(elapsed);
$("#remained").html(remained);
read(fn, newpos);
}
}
});
};
read($("#fn").html(), $("#current").html());
});
</script>
<style type="text/css">
.info {
color: #0000ff;
}
#current {
color: #ff0000;
}
#elapsed {
background-color: #7fff7f;
}
#query {
border: solid thin #000000;
height: 300px;
padding: 5px;
overflow: scroll;
text-align: left;
white-space: pre;
width: 500px;
}
#remained {
background-color: #cdcdcd;
}
#size {
color: #00cd00;
}
</style>
</head>
<body>
<?php
$fn = 'travian.sql';
$host = 'localhost';
$user = 'root';
$pass = '';
$db = 'travian';
if(file_exists($fn)) {
if(preg_match('#(.gz)$#i', $_POST['fn'])) {
$zp = @gzopen($_POST['fn'], 'rb');
if ($zp) {
$size = 0;
while(!gzeof($zp)) {
$size += strlen(gzread($zp, 1024));
}
gzclose($zp);
}
}
else {
$size = filesize($_POST['fn']);
}
?>
<center>
<p><span id="elapsed"></span><span id="remained"><?php for($i = 0; $i < 100; $i++) { echo '&nbsp;'; } ?></span></p>
<table>
<tr><td align="left">Filename:</td><th align="left"><span class="info" id="fn"><?php echo $_POST['fn']; ?></span></th></tr>
<tr><td align="left">Host:</td><th align="left"><span class="info" id="host"><?php echo $host; ?></span></th></tr>
<tr><td align="left">Username:</td><th align="left"><span class="info" id="user"><?php echo $user; ?></span></th></tr>
<tr><td align="left">Password:</td><th align="left"><span class="info" id="pass"><?php echo $pass; ?></span></th></tr>
<tr><td align="left">Database:</td><th align="left"><span class="info" id="db"><?php echo $db; ?></span></th></tr>
</table>
<p>Current position: <span id="current">0</span>; Total size: <span id="size"><?php echo number_format($size, 0, '.', ','); ?></span> byte(s)</p>
Current Query:<p id="query"></p>
</center>
<?php
}
else {
header('Location: index.php');
?>
Insufficient Data. <a href="index.php">Try Again</a><br/>
<?php
exit();
}
?>
</body>
</html><!doctype html>
<html>
<head>
<title>AJAX Import</title>
<meta charset="utf-8"/>
<script src="jqmin.js" type="text/javascript"></script>
<script type="text/javascript">
$(document).ready(function() {
var size = $("#size").html().replace(/,/gi, "");
function read(file, pos) {
var fn = $("#fn").html();
var host = $("#host").html();
var user = $("#user").html();
var pass = $("#pass").html();
var db = $("#db").html();
$.ajax({
type: "post",
url: "action.php",
data: "fn="+fn+"&host="+host+"&user="+user+"&pass="+pass+"&db="+db+"&pos="+pos,
success: function(data) {
var newpos = parseFloat(data.substring(0, data.indexOf(" ")));
if(newpos > pos) {
var query = data.substring(data.indexOf(" ") + 1);
$("#current").html(newpos);
$("#query").html(query);
var elapsed_percent = Math.floor(newpos / size * 100);
var remained_percent = 100 - elapsed_percent;
var elapsed = "";
while(elapsed_percent > 0) {
elapsed += "&nbsp;";
elapsed_percent--;
}
var remained = "";
while(remained_percent > 0) {
remained += "&nbsp;";
remained_percent--;
}
$("#elapsed").html(elapsed);
$("#remained").html(remained);
read(fn, newpos);
}
}
});
};
read($("#fn").html(), $("#current").html());
});
</script>
<style type="text/css">
.info {
color: #0000ff;
}
#current {
color: #ff0000;
}
#elapsed {
background-color: #7fff7f;
}
#query {
border: solid thin #000000;
height: 300px;
padding: 5px;
overflow: scroll;
text-align: left;
white-space: pre;
width: 500px;
}
#remained {
background-color: #cdcdcd;
}
#size {
color: #00cd00;
}
</style>
</head>
<body>
<?php
$fn = 'travian.sql';
$host = 'localhost';
$user = 'root';
$pass = '';
$db = 'travian';
if(file_exists($fn)) {
if(preg_match('#(.gz)$#i', $fn)) {
$zp = @gzopen($fn, 'rb');
if ($zp) {
$size = 0;
while(!gzeof($zp)) {
$size += strlen(gzread($zp, 1024));
}
gzclose($zp);
}
}
else {
$size = filesize($fn);
}
?>
<center>
<p><span id="elapsed"></span><span id="remained"><?php for($i = 0; $i < 100; $i++) { echo '&nbsp;'; } ?></span></p>
<table>
<tr><td align="left">Filename:</td><th align="left"><span class="info" id="fn"><?php echo $fn; ?></span></th></tr>
<tr><td align="left">Host:</td><th align="left"><span class="info" id="host"><?php echo $host; ?></span></th></tr>
<tr><td align="left">Username:</td><th align="left"><span class="info" id="user"><?php echo $user; ?></span></th></tr>
<tr><td align="left">Password:</td><th align="left"><span class="info" id="pass"><?php echo $pass; ?></span></th></tr>
<tr><td align="left">Database:</td><th align="left"><span class="info" id="db"><?php echo $db; ?></span></th></tr>
</table>
<p>Current position: <span id="current">0</span>; Total size: <span id="size"><?php echo number_format($size, 0, '.', ','); ?></span> byte(s)</p>
Current Query:<p id="query"></p>
</center>
<?php
}
else {
header('Location: index.php');
?>
Insufficient Data. <a href="index.php">Try Again</a><br/>
<?php
exit();
}
?>
</body>
</html>

و فایل action.php رو دست نزنید. الآن تنها کاری که باقی مونده، اینه که یک لینک به فایل import.php بگذارین و به کاربر بگین صبر کنه تا import کامل بشه و بعد صفحه رو ببنده. مثال:

<a href="import.php" target="_blank">Import</a>
البته توی کدی که گفتم، بجای travian.sql اسم فایل Backup و بجای travian هم اسم دیتابیس خودتون رو بگذارین.
موفق باشید.

Tarragon
پنج شنبه 07 اردیبهشت 1391, 09:02 صبح
استاد عزيز مي تونيد يه كد بهم بديد مانند كه بالا فقط با اين تفاوت كه فقط بنويسه چند درصد رفته همون نوار سبز رنگ و چيز ديگه اي ننوشته باشه.

MMSHFE
پنج شنبه 07 اردیبهشت 1391, 11:46 صبح
خوب باید همون رو کمی تغییر بدین. مثلاً با کمک CSS اون عناصری که نمیخواین توی صفحه دیده بشن رو مخفی کنید.