لدى مشكله صعبه نوعاً ما قام بعض اصدقائى بحجز مساحه من احد الشركات لبناء موقعهم و لكن المضيف لا يسمح لهم بالاتصال بقاعدة البيانات لعمل نسخ احتياطى بل يسمح فقط بسحب الملفات النصيه فهل يمكن تحويل قاعدة البيانات 200 ميجا من نوع mysql إلى ملفات نصيه
لدى مشكله صعبه نوعاً ما قام بعض اصدقائى بحجز مساحه من احد الشركات لبناء موقعهم و لكن المضيف لا يسمح لهم بالاتصال بقاعدة البيانات لعمل نسخ احتياطى بل يسمح فقط بسحب الملفات النصيه فهل يمكن تحويل قاعدة البيانات 200 ميجا من نوع mysql إلى ملفات نصيه
بسم الله الرحمن الرحيم
السلام عليكم ورحمة الله وبركاته وبعد وتحية طيبة ....
استاذي العزيز بما أنك تريد التحويل فيمكنك تحويل البيانات الموجود ضمن قاعدة بيانات mysql إلى أي نوع ملف تريده و لكن بشرط يجب أن تكتب روتينات التحويل بنفسك ..
ولكن خذ هذه النصيحة مني فبما أنك تريد تحويل البيانات اي انك مضطر لذلك فأنا أنصحك ان تقوم بتحويلها إلى ملفات xml (وإذا كان امتداد الملف لايشكل مشكلة) فكل ماعليك هو تخزين البيانات على شكل كود xml وحفظه ضمن ملف بإمتداد txt مثلاً وافضل لو يكون الإمتداد xml إذا كانت الإستضافة تسمح بذلك ...
المهم استاذي العزيز أنا سأعطيك رأس الفكرة وبعد ذلك الباقي عليك .....
المهم افترض ان لدي جدول بإسم abdullah
وفي هذا الجدول 4 حقول وهي كالتالي
id
name
address
phone
أوكي وكان هذا الجدول يحتوي على 10000 سجل وهي بيانات ليست قليلة وأنا لا أريد ان تذهب هذه البيانات سدى .... المهم
وصارت لي المشكلة التي حدثت معك ,,,, فمالذي سأفعله ؟
إليك ماعندي....
أولاً اقوم بكتابة روتين أو دالة تحويل هذا الجدول إلى ملف txt أو xml المهم ... أنا سأقوم بتحويلها إلى ملفات txt كما طلبت (وأسيب الفلسفة حقتي)
وستكون خطوات هذه الدالة كالتالي :
أولاً أقوم بعملية استعلام بسيطة بجملة select لأجلب جميع البيانات من الجدول abdullah
ثانياً سأقوم بفتح ملف نصي بإمتداد txt وأخزن فيه البيانات على الشكل التالي:
سيمثل كل سطر في الملف صف من الجدول وستكون الحقول مفصولة عن بعضها البعض بفاصلة والسبب في عمل ذلك ليتم استرجاعها بسهولة وذلك بعمل روتين أو دالة استرجاع اي عمل دالة تقوم بعكس هذه العملية (يعني ستقرأ من الملف النصي وتدخل في الجدول) المهم ....
وبعد ذلك تختار اسم ملف ....وسلامتك
وإليك الدالة وستحتوي على بارامتر واحد وهو سيمثل اسم الملف الذي سأحفظ فيه البيانات كالتالي:
والآن هذا روتين بسيط سيقوم بتحويل جميع البيانات في الجدول إلى ملف نصي ويحفظها فيه ولكن انظر إلى الصيغةكود PHP:
function convert_abdullah($path)
{
$h = @mysql_connect("localhost","username","password");
if(!$h)
die("عذراً لايمكن الإتصال بقاعدة البيانات");
$mysql_select_db("mydatabase");
$res = @mysql_query("SELECT * FROM abdullah");
$data = "";
for($i = 0 $i < mysql_num_rows($res) ; $i++)
{
$mx = @mysql_fetch_array($res);
$data .= $mx["id"].",".$mx["name"].",".$mx["address"].",".$mx["phone"]."\n";
}
$fhandle = @fopen($path,"w");
if(!$fhandle)
return false;
fwrite($fhandle,$data);
fclose($fhandle);
return true;
}
فأنا وضعت كل صف من الجدول ضمن سطر وانهيته بحرف سطر جديد وهو \n ولإسترجاع هذه البيانات إلى قاعدة البيانات يمكنك استخدام دالة explode لكل صف وإدخاله الى الجدول مرة اخرى بعملية insertكود PHP:
$data .= $mx["id"].",".$mx["name"].",".$mx["address"].",".$mx["phone"]."\n";
وهذه فكرة عامة ولكن يمكنك بقليل من التفكير ان تضع طريقة موحدة ضمن دالة واحدة لتحويل البيانات من جدول الى ملف نصي وتكتفي بتمرير اسم الجدول ومسار الملف النصي وستقوم الدالة بالباقي
وهذا مالدي الآن فإن أخطأت فمن نفسي والشيطان و إن أصبت فمن الله عز وجل
أخوك عبدالله عيد
__________________
قال صلى الله عليه وسلم (كلمتان خفيفتان على اللسان ثقيلتان في الميزان (سبحان الله وبحمده ** سبحان الله العظيم) اوكما قال صلى الله عليه وسلم . (فهل هذه الكلمتان ثقيلتان على لسانك كي لا تقولها مرة واحدة في اليوم على الأقل)
أسف ولكن مع سرعة كتابتي للدالة كتبت شئ خاطئ وهو أن الدالة mysql_select_db لاتحتوي على $ في بدايتها
وسلامتك
اخوك عبدالله عيد
__________________
قال صلى الله عليه وسلم (كلمتان خفيفتان على اللسان ثقيلتان في الميزان (سبحان الله وبحمده ** سبحان الله العظيم) اوكما قال صلى الله عليه وسلم . (فهل هذه الكلمتان ثقيلتان على لسانك كي لا تقولها مرة واحدة في اليوم على الأقل)
أقول انا عجبتني الفكرة بصراحة انتظرني فسأقوم بإذن الله بكتابة دالة واحدة ستحول لك كل البيانات الموجودة في قاعدة البيانات إلى ملفات نصية وستقوم هذه الدالة بحفظ كل بيانات جدول في ملف نصي واحد لكل جدول...
لذلك انتظرني ... وسأفي بوعدي بأذن الله تعالى اذا لم تقف لي الظروف
سأضع لك الملف هنا لتحمله ....
وتقبل تحياتي
أخوك عبدالله عيد
__________________
قال صلى الله عليه وسلم (كلمتان خفيفتان على اللسان ثقيلتان في الميزان (سبحان الله وبحمده ** سبحان الله العظيم) اوكما قال صلى الله عليه وسلم . (فهل هذه الكلمتان ثقيلتان على لسانك كي لا تقولها مرة واحدة في اليوم على الأقل)
بسم الله الرحمن الرحيم
السلام عليكم ورحمة الله وبركاته .... تحية طيبة
ها أنا أفي لك بوعدي استاذي العزيز cold0zero
وهذا هو روتين التحويل ولقد جربته وعمل بشكل ممتاز ....
وهذا الروتين يعمل مع اي قاعدة بيانات فكل ماعليك تحديد بعض الإعدادات .
وهذه الشفرة وستجد بعض الشروحات ضمن الكود وستجد ايضاً بالأسفل الملف المرفق ....
وكل ماعليك فقط قبل رفع الملف الى الموقع ان تغير بعض الإعدادات كما هو موضح في اعلى الملفكود PHP:
/* by the name of allah
abdullah eid almehmadi
[email]eid200@gawab.com[/email]
this script using for convert mysql table to text file
*/
$_DB["host"] = "localhost";//مضيف قاعدة البيانات
$_DB["name"] = "dbname"; //اسم قاعدة البيانات
$_DB["user"] = "username";// إسم المستخدم
$_DB["pass"] = "password"; //كلمة المرور
$_DB["dir"] = "mysql_php";//إسم المجلد الذي سيتم فيه حفظ الملفات
$_DB["ext"] = "txt";//الإمتداد الذي تريده للملفات
/*********************************************/
$_DBHandle = @mysql_connect($_DB["host"],$_DB["user"],$_DB["pass"]);
if(!$_DBHandle)
die("عذراً لايمكن إجراء عملية الإتصال بقاعدة البيانات");
function __get_tables()/* return array contain table */
{
global $_DB,$_DBHandle;
$tables = array();
$table_result = @mysql_list_tables($_DB["name"],$_DBHandle);
if(!$table_result)
die("__get_tables");
for($i = 0 ; $i < @mysql_num_rows($table_result) ; $i++)
$tables[$i] = @mysql_tablename($table_result,$i);
@mysql_free_result($table_result);
return $tables;
}
/* this function for get fields from table and puting it in array */
function __get_fields($tablename)
{
global $_DB,$_DBHandle;
$fields = array();
if(empty($tablename))
return false;
$field_result = @mysql_list_fields($_DB["name"],$tablename,$_DBHandle);
if(!$field_result)
die("__get_fields");
$field_count = @mysql_num_fields($field_result);
for($i = 0 ; $i < $field_count ; $i++)
$fields[$i] = @mysql_field_name($field_result,$i);
@mysql_free_result($field_result);
return $fields;
}
function __format_line($result,$fields)
{
global $_DB,$_DBHandle;
$line = "";
$fetch = @mysql_fetch_array($result);
if(!$fetch)
die("__format_line");
for($i = 0 ; $i < @count($fields) ; $i++)
{
if(($i + 1) == @count($fields))
$line .= $fetch[$fields[$i]]."\n";
else
$line .= $fetch[$fields[$i]]."|";
}
return $line;
}
/* return file content */
function __select($tbname)
{
global $_DBHandle;
@mysql_select_db($_DB["name"]);
$qresult = @mysql_query("SELECT * FROM ".$tbname,$_DBHandle);
if(!$qresult)
die(mysql_error());
$rows_count = @mysql_num_rows($qresult);
$fields = __get_fields($tbname);
$file_data = serialize($fields); /* first line */
$file_data .= "\n";
for($i = 0 ; $i < $rows_count ; $i++)
$file_data .= __format_line($qresult,$fields);
@mysql_free_result($qresult);
return $file_data;
}
function __convert()
{
global $_DB,$_DBHandle;
if(!is_dir("./".$_DB["dir"]))
@mkdir($_DB["dir"]);
@chdir($_DB["dir"]);
$tables = __get_tables();
for($i = 0 ; $i < @count($tables) ; $i++)
{
$t_name = $tables[$i];
$str = $t_name.".".$_DB["ext"];
$fhandle = @fopen($str,"w");
if(!$fhandle)
{
$msg = "<br>";
$msg .= "لم يتم تحويل جدول ";
$msg .= "<b>".$t_name."</b>";
$msg .= " إلى ملف نصي";
print($msg);
continue;
}
$file_content = __select($t_name);
@fwrite($fhandle,$file_content);
@fclose($fhandle);
$msg = "<br>";
$msg .= "تم تحويل جدول ";
$msg .= "<b>".$t_name."</b>";
$msg .= " بكامل بيانات إلى ملف نصي";
print($msg);
}
$msg = "<br>"."لقد تم بحمد الله الإنتهاء من عملية التحويل وستجد الملفات التي تم تحويلها ضمن المجلد ";
$msg .= $_DB["dir"];
$msg .= " وكل ملف سيكون اسمه بإسم الجدول ";
$msg .= "<br>";
$msg .= "<br>";
$msg .= "<b>مع تمنياتي للجميع بالتوفيق وتقبلوا خالص تحياتي اخوكم عبدالله عيد المحمادي</b>";
$msg .= "<br>";
$msg .= "eid200@gawab.com";
@mysql_close($_DBHandle);
return true;
}
/************/
__convert();
/************/
وأي طلب احنا تحت الخدمة (انت امر بس)
وهذا مالدي الآن فإن أخطأت فمن نفسي والشيطان وإن أصبت فمن الله عز وجل
أخوك عبدالله عيد
__________________
قال صلى الله عليه وسلم (كلمتان خفيفتان على اللسان ثقيلتان في الميزان (سبحان الله وبحمده ** سبحان الله العظيم) اوكما قال صلى الله عليه وسلم . (فهل هذه الكلمتان ثقيلتان على لسانك كي لا تقولها مرة واحدة في اليوم على الأقل)
حقيقه يا اخ عبد الله لا اعلم كيف اشكرك على استجابتك السريعه هذه بارك الله فيك و لكن ساثقل عليك قليلاً عندما جربت الملف المرفق اعطانى رسالة الخطأ هذه
مع ان المجلد معه كامل الصلاحيات (777)كود PHP:
The directory containing /httpdocs/backup/mysql_txt.php cannot be world writable
بسم الله الرحمن الرحيم
السلام عليكم ورحمة الله وبركاته ....
استاذي العزيز بلاشي كلمة اثقلت عليك ... لأني بإذن الله سأساعدك حسب معرفتي إلى ان تصل إلى حل مقنع ... المهم
أولاً استاذي بالأمس عندما انتهيت من كتابة الروتين قمت بتحميله على السيرفر وتجربته ولقد عمل لي نسخة احتياطية كاملة بفضل الله ودون اي مشاكل ولكن من الرسالة التي ظهرت فإنه يجب على التأكد مرة اخرى من صلاحيات المجلد ولكن إن المجلد الذي تقوم بتحديده ضمن المتغير التالي
يجب ان يكون مع الملف mysql_txt.php أي لو كان عندي مجلد بإسم backup ووضعت بداخله الملف mysql_txt.php وكتبت المجلد على هذه الصورة :كود PHP:
$_DB["dir"] = "cold0zero";
فإن عملية النسخ ستكون في المجلدكود PHP:
$_DB["dir"] = "cold0zero";
وليس في مجلد backupكود PHP:
backup/cold0zero/
اي سيكون الملف mysql_txt.php في مجلدbackup ومجلد cold0zero ضمن مجلد backup
وسيكون الترتيب كالتالي :
وانت فقط قم بتحديد اسم المجلد والشفرة ستقوم بإنشاءه إذا لم يكن موجود واذا حصلت معك مشكلةكود PHP:
+ backup // المجلد الرئيسي
- mysql_txt.php // ملف التحويل
- cold0zero // المجلد الذي سيحتوي على الملفات
فهذا الماسنجر الخاص بي eid200@gawab.com
مع ان المشكلة التي حصلت معك ليست الا صلاحيات مجلد يعني ان روتين التحويل سليم وليس به مشاكل لذلك يجب التأكد من الصلاحيات الخاصة بالمجلدات ولكن أظن انك تقوم بتجريب روتين التحويل على سيرفر محلي اذا لم يخب ظني ولكن اذا كنت تجرب على سيرفر محلي فأنا لم اجربه بعد
واذا حصل معك جديد لاتقلق ضعه هنا وستجدني بإذن الله
وهذا مالدي الآن فإن أخطأت فمن نفسي والشيطان وإن اصبت فمن الله عز وجل
أخوك عبدالله عيد
__________________
قال صلى الله عليه وسلم (كلمتان خفيفتان على اللسان ثقيلتان في الميزان (سبحان الله وبحمده ** سبحان الله العظيم) اوكما قال صلى الله عليه وسلم . (فهل هذه الكلمتان ثقيلتان على لسانك كي لا تقولها مرة واحدة في اليوم على الأقل)
الاخ العزيز cold0zero
مرفق ملف سكريبت نسخ قواعد البيانات
وهو من أقوى الاسكربتات فى هذا المجال وامكانياته كبيرة ومتعددة
لا يفوت الجميع
ولا ننكر مجهود أخونا عبد الله عيد
جزاه الله خيرا
وفقنا الله واياكم
__________________
أستغفر الله :: أستغفر الله :: أستغفر الله ::
لا إله إلا أنت سبحانك أستغفرك وأتوب إليك إنى كنت من الظالمين
phparabia @ msn.com
السلام عليكم ورحمة الله وبركاته
تحية طيبة استاذي العزيز ... انا لدي موضوع معين اريد ان اقوله فقط
اولاً استاذي العزيز اشكر لك متابعتك للموضوع ووضع الملف المرفق ولكن هل تعرف ماهي مشكلتنا..
في بداية تعلمي للغة C قبل خمس سنوات كان هناك مبرمج اجنبي يقول عبارة وهي موجودة للأن في ذهني يقول
كل الناس يبرمجون ولكن افضل البرامج هي ذات الشفرة المختصرة و الآداء العالي ,
لقد قمت بتحميل الملف المرفق ورأيت الشفرة الخاصة به وانظر لعدد الملفات التي ضمن الملف المرفق ولقد تابعته ويستخدم ايضاً ملفات مكتبة PEAR المهم خلاصة الموضوع انهم يستخدمون نفس عملي وهي قراءة حقول من جدول غير معروف اسمه وماهي حقوله للتوسع ولتطبيق السكربت على اي قاعدة بيانات ولكن انظر لعدد الملفات وحجم الشفرة المكتوبة وما إلى ذلك من بعض الأشياء والتي قد تكون في نظري انا وحدي ليس لها داعي فأنا انفذ سكربت معين حسب المطلوب ولا داعي حتى لكتابة الملاحظات الكثيرة في الصفحة لأوهم القارئ اني كتبت الكثير من الشفرة فهم فقط يضخمون الشغلة ولقد قمت بعمل كل ماقاموا به في ملف واحد لايتجاوز ان صح التعبير 150 سطر...
ولقد جربت السكربت بعد انتهائي منه وعمل معي نسخة قاعدة بيانات كاملة تحتوي على بيانات منتدى vb3 وهو يعمل مئة بالمئة وليس به مشاكل ....
فكيف يتم الحكم على سكربت معين انه اقوى سكربت في شئ معين .... وصدقني اريد ان اعرف ؟
يأخي نحن يجب ان نساعد انفسنا اولاً قبل ان نساعد غيرنا
ولكن المشكلة كما قلت سابقاً ان المبرمج بين قوسين (عربي) وهذا مؤسف نوعاً ما .
واحنا ترى ماخذين مقلب في المبرمجين الأجانب مع العلم ان مايكروسوفت ثلاث ارباعاها هم مبرمجون عرب يحملون الجنسية الأمريكية وهذا للعلم فقط ....
والعلم الذي تقوم عليه البرامج جميعها في العالم تكون ضمن الخوارزميات وخرائط سير العمليات
وهي وبكل فخر لعالم مسلم عربي وهو محمد بن موسى الخوارزمي (وهذه كافية لكي يرفع العرب رؤسهم للأعلى)
ولكن كما يقولون
تنادي اذا اسمعت حياً ... ولكن لاحياة لمن تنادي
وأنا والله العظيم لا اقصد الإساءة لأحد ولكن احببت ان اطرح ما بداخلي فقط ...
وهذا مالدي الآن فإن أخطأت فمن نفسي والشيطان وإن أصبت فمن الله عز وجل
أخوك عبدالله عيد
__________________
قال صلى الله عليه وسلم (كلمتان خفيفتان على اللسان ثقيلتان في الميزان (سبحان الله وبحمده ** سبحان الله العظيم) اوكما قال صلى الله عليه وسلم . (فهل هذه الكلمتان ثقيلتان على لسانك كي لا تقولها مرة واحدة في اليوم على الأقل)
أخى العزيز عبدالله
تحية طيبة منى وبعد
أولا عند تقديمى للاسكربت المرفق ما كان قصدى الا للافادة
والافادة هنا نوعان افادة للاستخدام وافادة للتعلم
ثانيا أفخر بتقديمك الاسكربت الذى قمت ببرمجته لنا فى هذا الموضوع وهذا ما جعلنى أذكر اننى لا انكر المجهود الذى بذلته فى عمل هذاالاسكربت "جزاك الله خيرا"
ثالثا المبرمج العربى فى وجهة نظرى افضل مبرمج على وجهالارض لانه عندما يصنع برنامج فهو هدفه الله فى الغالب ومثال ذلك الموسوعات والبرامج والاسكربتات الاسلامية على النقيض تماما المبرمج الاجنبى أو غير المسلم ان صح التعبير فهو كل هدفه الربح المادى فقط أولا وأخيرا أو المزاح أو ما يقربه من الشيطان والامثلة كثيرة لكن لا داعى لذكرها
رابعا سامحنى ان أغضبتك فكلنا هنا أخوة
ربنا ظلمنا أنفسنا وإن لم تغفر لنا وترحمنا لنكونن من الخاسرين اللهم أغفر لنا وارحمنا اللهم أغفر لنا وارحمنا أغفر لنا وارحمنا اللهم يا رب العالمين ربنا أغفر لنا ولإخواننا الذين سبقونا بالإيمان ولا تجعل في قلوبنا غلاً للذين آمنوا ربنا أنك رؤوف رحيم اللهم صلي وسلم وبارك على عبدك ونبيك محمد وعلى آله وصحبه أجمعين .
__________________
أستغفر الله :: أستغفر الله :: أستغفر الله ::
لا إله إلا أنت سبحانك أستغفرك وأتوب إليك إنى كنت من الظالمين
phparabia @ msn.com
السلام عليكم ورحمة الله وبركاته و بعد
استاذي العزيز لامكان هنا للزعل او الغضب فكل الموضوع اننا نتاقش حول نقطة معينة واختلاف للرأي لا يفسد للود قضية ولكن انا كان قصدي اننا ما نخرج من الموضوع فلو على سبيل المثال قمت انت بتصحيح بعض الأخطأ في الشفرة التي طرحتها انا او قمت بالتعليق عليها فسنكون في صلب الموضوع او اذا كان لديك إضافات أفضل مني فتقوم بتعديل الشفرة يعني نكون في موضوعنا ونترك الأجانب... لأنه والله ما أخفيك سر أني غثوني الناس بكلمة مبرمج اجنبي مبرمج اجنبي لذلك انا وضعت هذا الكلام وصدقني انا لا احمل لك الا كل محبة فنحن هنا جئنا لنتعلم....
وإن شاء الله تعالى مافي لازعل ولا غضب ولاحاجة بس كل الموضوع انه لو بقينا في موضوعنا وتركنا الأجانب يعني افترض انك انت اخذت الشفرة التي وضعتها انا قمت بتطويرها إلى الأفضل عل سبيل المثال ثم طرحتها ثم جاء غيرك وطور ما قمت انت بتطويره واضاف عليه وهكذا .... فأظن أننا سنقوم بعمل ممتاز و نقول الأجانب(ألف شكر عندنا مايكفينا من سكربتات)
وكل موضوع بإختصار اننا كما قلت سابقاً (ماخذين مقلب مو بسيط في حكاية المبرمجين الأجانب)
وأنا والله لم ازعل ولن ازعل فكيف العين تعلى على الحاجب....
هذا مالدي الآن فإن أخطأت فمن نفسي والشيطان وإن أصبت فمن الله عز وجل
أخوك عبدالله عيد
__________________
قال صلى الله عليه وسلم (كلمتان خفيفتان على اللسان ثقيلتان في الميزان (سبحان الله وبحمده ** سبحان الله العظيم) اوكما قال صلى الله عليه وسلم . (فهل هذه الكلمتان ثقيلتان على لسانك كي لا تقولها مرة واحدة في اليوم على الأقل)
أخى عبد الله
جزاك الله خيراً
كلامك منطقى وأخجلنى
والله انت على صواب
جزاك الله خير الجزاء
أخوك PHP-ARABIA.com
__________________
أستغفر الله :: أستغفر الله :: أستغفر الله ::
لا إله إلا أنت سبحانك أستغفرك وأتوب إليك إنى كنت من الظالمين
phparabia @ msn.com