إستخراج الملفات من حزم rpm

السلام عليكم و رحمة الله و بركاته

أحيانا نجد أن نظامنا قد فقط وحدة (shared object) أو نريد تنصيب برنامج ما فنلجأ إلى نظام الحزم المتوفر بالتوزيعة أو النظام مثلا عائلة redhat تستخدم
حزم rpm أما عائلة Debian فإنها تستخدم حزم deb ،هذه الحزم ما هي إلى عبارة عن برامج مترجمة تم ضغطها لتكون في ملف واحد لتسهيل عملية التنصيب .

المشكلة هنا (حزم rpm) قد نود أن نرى ماذا تحتويه الحزمة أو أننا نحتاج فقط ملف واحد من الحزمة فنحن لا نحتاج لإعادة تنصيب ،tنجد أنفسنا في مشكلة أخرى و هي أن الأمر الخاص بتنصيب حزم rpm لا يوفر لنا طريقتا لإستخراج الحزم .

الحمد لله أن مشروع GNU يوفر أداتين rpm2cpio و cpio ،الأولى لتحويل حزم rpm إلى حزم cpio التي هي عبارة عن ملفات مضغوطة و الثانية لفط الضغط عن حزم cpio .

مثال :

rpm2cpio rpmfile.rpm

هذا لتحويل حزم rpm إلى cpio ،ستظهر لكم كتابة غير مفهومة هذا لأنها ملفات و مجلدات ،لإستخراجها على شكل ملفات نستخدم الأداة cpio .
مثال :

rpm2cpio libxml2-2.7.2-1.fc10.i386.rpm | cpio -idm

هنا نقوم بعملية التحويل و الإستخراج في نفس الوقت ،الأداة cpio هي المسؤولة عن عملية فك الضغط .
حيث i تعني إستخراج الملفات .
d إنشاء مجلد ما دعت الحاجة إليه ،بهذا ستحافظ على مسارات الملف مما سيساعدك لاحقا على عملية النقل .
m عند إستخراج الملفات فإنه سيتم تعيين نفس الوقت و الصلاحيات التي هي في الملفات الأصلية .

التصنيفات:أنظمة يونكس الوسوم:, , ,

تحديث برامجك في FreeBSD

السلام عليكم و رحمة الله و بركاته

مع مرور الوقت تجد أن نظامك قد بدء يأكله الشيب لأن برامجه أصبحت من الماضي و الحاضر أصبح يحمل ميزات جديدة لم تكن متوفرة من قبل ،فيؤسفك نظامك لما آل إليه فتعقد العزم و تتكل على الله و تقرر البدء بترقيته إلا أنك تجيد سؤالا يطرح نفسه ،كيف يمكنني أن أقوم بذلك :D ؟

FreeBSD وفر برنامجين أو بالأحرى سكريبتين و الله أعلم ،الأول إسمه portmaster و الآخر portupgrade الذي سيكون محور شرحنا .

portupgrade يعتمد طريقة المقارنة بما هو موجود لديك في ports ،فهي تقارن إصدارة البرامج المنصبة حاليا معتمدة على الملف /var/db/pkg/pkgdb.db بإصدارة البرنامج المتوفر في ports ،فإن كنت لم تحدث ال ports منذ مدة فهذا لن يمكن portupgrade من التعرف على البرامج التي هي غير محدثة .

في كل برنامج يقع تحت /usr/ports يوجد ملف إسمه Makefile يحتوي على المكتبات و البرامج اللازمة لعمل البرنامج الحالي ،هذا مقطع من Makefile الخاص بسطح المكتب gnome .

# New ports collection makefile for:	gnome2
# Date created:		21 May 2002
# Whom:			Joe Marcus Clarke <marcus@FreeBSD.org>
#
# $FreeBSD: ports/x11/gnome2/Makefile,v 1.158 2009/11/28 20:06:14 marcus Exp $
#   $MCom: ports/x11/gnome2/Makefile,v 1.279 2009/10/22 15:15:40 kwm Exp $
#
PORTNAME=	gnome2
PORTVERSION=	2.28.1
PORTREVISION?=	0
CATEGORIES?=	x11 gnome
MASTER_SITES=	# empty
DISTFILES=	# empty
EXTRACT_ONLY=	# empty
MAINTAINER=	gnome@FreeBSD.org
COMMENT?=	The "meta-port" for the GNOME 2 integrated X11 desktop
RUN_DEPENDS?=	${LOCALBASE}/libexec/gweather-applet-2:${PORTSDIR}/x11/gnome-applets \
gnome-audio-profiles-properties:${PORTSDIR}/audio/gnome-media \
gnome-dictionary:${PORTSDIR}/deskutils/gnome-utils \
eog:${PORTSDIR}/graphics/eog \
gconf-editor:${PORTSDIR}/sysutils/gconf-editor \
gnect:${PORTSDIR}/games/gnome-games \
gedit:${PORTSDIR}/editors/gedit \
gnome-terminal:${PORTSDIR}/x11/gnome-terminal \
gnome-session:${PORTSDIR}/x11/gnome-session \
bug-buddy:${PORTSDIR}/devel/bug-buddy \
gnome-system-monitor:${PORTSDIR}/sysutils/gnome-system-monitor \
nautilus:${PORTSDIR}/x11-fm/nautilus \
${LOCALBASE}/sbin/gdm:${PORTSDIR}/x11/gdm

مايهمنا هو العناوين التي هي باللون الأحمر ،PORTNAME تعني إسم البرنامج و PORTVERSION تعني إصدارة البرنامج .

portupgrade ستقوم بمقارنة بين كل برنامج يقع في /usr/ports و برامجك المنصبة الموجودة في الملف /var/db/pkg/pkgdb.db فإن وجدت رقم الإصدارة في المسار السابق أقل من هي التي موجودة في /usr/ports فستقوم بالترقية أما إن وجدتها متساويتان فإنها لن تقوم بالترقية إلا إذا أنت أضفت وسيطا آخر في الأمر portupgrade ،تحديث ال ports قبل عملية تحديث البرامج ضرورية ،يمكنك إستعمال portsnap او cvsup لذلك .

قبل البدء بعملية التحديث علينا أولا تنصيب الأداة portupgrade إما من ports :

cd /usr/ports/ports-mgmt/portupgrade
make install clean

أو من packages :

pkg_add -r portupgrade

ملاحظة : بتنصيبك ل portupgrade فإنه سوف يتم تنصيب مجموعة من الأدوات التي تساعدك على إدارة برامجك منها :

pkg_version : فائدتها معرفة حالة إصدارة البرامج المنصبة لديك ،هل هي محدثة أم لا إلخ … .

مثال :

معرفة البرامج غير المحدثة :

pkg_version -l '<'

غير > ب = لتعرف البرامج المحدثة .

pkg_info : إظهار البرامج المنصبة حاليا .

مثال :

إظهار جميع البرامج التي تبدأ بإسم gnome .

pkg_info -a | grep ^gnome

pkg_which : فائدتها معرفة أي برنامج لمن ينتمي .

مثال :

pkg_which pkgdb

قبل البدأ في إستعمال portupgrade سنتعرف أولا على بعض الوسائط المهمة :

a : تعني تحديث جميع البرامج .

r : ستقوم بفحص البرامج و المكتبات التي يعتمد عليها برنامج ما .

R : تقوم بعمل تنصيب البرامج و المكتبات التي يحتاجها برنامج ما .

f : تعني إعادة تنصيب برنامج ما حتى و لو كان محدثا .

C : هذه سوف تجبر الأمر make config قبل تحديث أي برنامج ،سنعرف فائدتها فيما بعد .

F : هذه سوف تقوم بتنزيل الملفات الضرورية للتحديث من دون القيام بعملية التحديث ،تجدون الملفات المنزلة تحت /usr/ports/distfiles .

x : إعفاء برنامج ما من التحديث .

الآن بعد أن عرفنا بعض الحجج (arguments) اللازمة لإستخدام portupgrade ،سنقوم بالتحديث .

ملاحظة : الشرح سيكون هذه المرة عن طريق سؤال و جواب .

س 1 : أريد تحديث جميع البرامج المنصبة لدي ؟

ج 1 : إستخدم portupgrade كالآتي :

portupgrade -arR

a معناها جميع البرامج ،r لجمع البرامج التي تعتمد على كل برنامج (firefox3 يعتمد على nss و gtk و … مما سيعني أنه سيتم ترقية firefox و nss و gtk و جميع البرامج التي تعتمد عليه ) أما R فهي التي ستقوم بعملية تحديث البرامج التي تعتمد على برنامج ما .

الفائدة من هذه أنك ستتجنب مشكلة التوافقية بين البرامج .

س 2 : أريد تحديث python فقط ؟

ج 2 : إستخدم portupgrade كالآتي :

portupgrade python25

س 3 : أريد تحديث perl و جميع ما يتعلق به من المكتبات و البرامج ؟

ج 3 : إستخدم portupgrade كالآتي :

portupgrade -rR perl5

س 4 : أريد تحديث جميع البرامج بإستثناء openoffice لأنه يأخذ مساحة من جهازي و وقتا اللذان لا أملكهما حاليا ؟

ج 4 : إستخدم portupgrade كالآتي :

portupgrade -arR -x en-openoffice.org

x معناها إعفاء openoffice من التحديث حتى و لو كان قديما .

س 5 : كيف أنزل الملفات اللازمة للتحديث من دون تحديث البرنامج لأني سأقوم بذلك لاحقا ؟

ج 5 : إستخدم portupgrade كالآتي :

portupgrade -arRF

F ستقوم بتنزيل الملفات اللازمة من الأنترنيت من دون عمل تحديث لبرامجك .

س 6 : أريد تحديث جميع وحدات (modules) الخاصة ب perl فقط :

ج 6 : إستخدم portupgrade كالآتي :

portupgrade -rR p5-*

لحسن الحظ فإن portupgrade تقبل regular expression بهذا يمكنك عمل تحديث لجميع أسماء البرامج المنصبة التي فيها p5- أما * فهي حالة خاصة في regular expression تعني حرفا أو أكثر أي أن هذه الوحدات سيشملها التحديث :

p5-XML-XPath
p5-gettext
p5-libwww

س 7 : تركت جهازي يقوم بتحديث البرامج لمدة 7 ساعات لأجد نافذة إعدادات تنتظرني ! كيف لي أن أتخطى هذا المشكل لأنه لايمكنني البقاء أمام الجهاز كل هذه المدة ؟

ج 7 : هذا مشكل عادي لأنه حدث لي من قبل أيضا :D ،لتجاوز هذا عليك بإضافة C لتجبر portupgrade بعمل make config قبل التحديث .

مثال :

portupgrade -aCrR

س 8 : أريد أن أعفي أكثر من برنامج من التحديث ،كيف أقوم بذلك ؟

ج 8 : إستخدم portupgrade كالآتي :

portupgrade -arR -x openoffice.org -x firefox3

س 9 : أريد تحديث جميع البرامج بمن فيها المحدثة ،كيف أقوم بذلك ؟

ج 9 : إستخدم portupgrade كالآتي :

portupgrade -arRf

f ستقوم بإجبار portupgrade بتحديث جميع البرامج لأن portupgrade لا تحدث البرامج المحدثة أصلا .

مصادر :

portupgrade – ONLamp.com

http://www.freebsd.org/doc/en/books/handbook/ports-using.html
man portupgrade

التصنيفات:أنظمة يونكس الوسوم:, ,

السلام عليكم و رحمة الله و بركاته

قامت شركة  بطرح درايفرات تخص نظام FreeBSD حيث تحوي هذه الإصدارة على ميزات يمكن إستخدامها مع الإصدارتين FreeBSD 7.3 (ستعمل على FreeBSD 7.2 ايضا)و FreeBSD 8.0 لكل من المعماريتين i386/amd64 .

هذه الدرايفرات من شئنها زيادة و تحسين أداء الواجهة الرسومية لمستخدمي أنظمة FreeBSD .

مصدر الخبر :

195.22 (BETA) for FreeBSD x86/x86_64 (7.3/8.0) released

التصنيفات:أنظمة يونكس الوسوم:, ,

تعرف على قرصك الصلب من سطر الأوامر

السلام عليكم و رحمة الله و بركاته

أحيانا نحتاج إلى معرفة القرص الصلب و مايحتويه إما فيزيائيا (حجمه ،الشركة المصنعة …) أو ظاهريا (الحجم المستخدم منه ،طريقة تقسيمه ،المساحة المتبقية …) ،في أغلب أنظمة unix-like تأتي أداة مضمنت معهم بإسم diskinfo ،مهمتها قياس سرعة القراءة و الكتابة من القرص ،أيضا قياس سرعة النقل .

في FreeBSD عند كتابة الأمر diskinfo فإنه تظهر لنا رسالة كالآتي :

usage: diskinfo [-ctv] disk …

هذا يعني أنها تحتاج على الأقل وسيطا ،في حالتنا سيكون مسار القرص المراد معرفته .

أما الوسائط الاخرى هي كالآتي :

v : إظهار تعليقات مع الإحصائيات .

c : إظهار إحصائيات حول القرص من سرعة قراءة و كتابة .

t : إظهار إحصائيات حول القرص من سرعة نقل .

مثال :

diskinfo -c /dev/ad3

كان الناتج كالآتي :

/dev/ad3
512             # sectorsize
13568818688     # mediasize in bytes (13G)
26501599        # mediasize in sectors
26291           # Cylinders according to firmware.
16              # Heads according to firmware.
63              # Sectors according to firmware.
E129R3GE        # Disk ident.

I/O command overhead:
time to read 10MB block      0.202357 sec    =    0.010 msec/sector
time to read 20480 sectors   1.602559 sec    =    0.078 msec/sector
calculated command overhead            =    0.068 msec/sector

مثال :

diskinfo -t /dev/ad3

كان الناتج كالآتي :

/dev/ad3
512             # sectorsize
13568818688     # mediasize in bytes (13G)
26501599        # mediasize in sectors
26291           # Cylinders according to firmware.
16              # Heads according to firmware.
63              # Sectors according to firmware.
E129R3GE        # Disk ident.

Seek times:
Full stroke:      250 iter in   3.745563 sec =   14.982 msec
Half stroke:      250 iter in   4.522290 sec =   18.089 msec
Quarter stroke:      500 iter in   5.619696 sec =   11.239 msec
Short forward:      400 iter in   2.838605 sec =    7.097 msec
Short backward:      400 iter in   1.713758 sec =    4.284 msec
Seq outer:     2048 iter in   0.147774 sec =    0.072 msec
Seq inner:     2048 iter in   0.145513 sec =    0.071 msec
Transfer rates:
outside:       102400 kbytes in   1.999290 sec =    51218 kbytes/sec
middle:        102400 kbytes in   2.502257 sec =    40923 kbytes/sec
inside:        102400 kbytes in   2.206204 sec =    46415 kbytes/sec

تلاحظون أن القرص الذي لدي بحجم 13 جيجا .

مصادر :

man diskinfo
Tech Tip: Retrieve Disk Info from the Command Line

التصنيفات:أنظمة يونكس الوسوم:, , ,

دورة تصميم Web2, html css javascript

السلام عليكم و رحمة الله و بركاته
يقوم الأخ bastr3 بطرح دورة في Web2, html css javascript ،يمكنكم متابعتها على الرابط الآتي :هنا

التصنيفات:برمجة الوسوم:

كيف تجعل لبرنامجك وسائط

السلام عليكم و رحمة الله و بركاته

عادة في البرامج التي تعمل من سطر الأوامر تكون خياراتها عبارة عن وسائط تمرر من طرف المستخدم مع البرنامج كالآتي :

ls -l -h

مثلا هذا الأمر يستخدم في إستعراض الملفات لكن مع الخيارين l- و h- سيعرض لنا الملفات مع تصاريحها مع حجمها ،في هذا الدرس سنرى الأساسيات فقط أما في النهاية ستجدون روابط و مكتبات تقوم بمثل هذا العمل المعقد .

أبسط برنامج يكون في C كالآتي :

#include<stdio.h>

int main(int argc ,char *argv[])

{

return 0;

}

هذا من Ansi C يمكن إستبدال []argv* ب **argv لآن كلاهما نفس المعنى أي مصفوفة مؤشر .

argc تعني عدد الوسائط أما argv فهي مؤشر للوسائط ،مثلا لو كان برنامجنا كهذا :

pro arg1 arg2 arg3

سيكون argc يبدء من 0 وينتهي عند NULL أم argv فستحمل أولا إسم البرنامج بعدها الوسائط كالآتي :

argv0[pro]

argv1[arg1]

argv2[arg2]

argv3[arg3]

مثال :

#include<stdio.g>

int main(int argc ,char **argv)

{

int i;

for(i=0;i<argc;++i)

printf(“arg[%d] = %s\n”,i,argv[i]);

return 0;

}

نقوم بترجمته بإستخدام GCC :

gcc cl.c -o cl

الآن نشغله :

./cl arg1 arg2 arg3

النتيجة ستكون :

arg[0] = ./cl

arg[1] = arg1

arg[2] = arg2

arg[3] = arg3

في هذا السطر :

for(i=0;i<argc;++i)

أخذنا عدد الوسائط من argc ووضعناه في المتغير I حتى نستخدمه في الوصول إلى عناصر مصفوفة argv التي تحتوي مؤشرا لكل وسيط مررناه .

printf(“arg[%d] = %s\n”,i,argv[i]);

هنا إستخدمنا المتغير I في الوصول إلى عناصر المصفوفة .

مثال بإستخدام الؤشرات :

#include<stdio.h>

int main(int argc ,char **argv)

{

while(argc–)

printf(“%s “,*argv++);

return 0;

}

argc يبدأ من 0 لهذا سيتوقف أوتوماتيكيا عندما يصل إليه ،آخر عنصر في argv هو NULL .

مصادر :

man page : getopt

Arguments to main

command line parsing

مكتبات :

The Argtable

ANSI C Command Line Option Parsing Library

CCmdLine – command line parser

Cross-platform command line argument and option parsing

Anyoption – C/C++ Command line and resource file option parsing

الدرس على شكل ملف : كيف تجعل لبرنامجك وسائط

التصنيفات:برمجة الوسوم:

عندما يكون الدخول إلى الواجهة GNOME ثقيلا

السلام عليكم و رحمة الله و بركاته

أحيانا يكون الدخول إلى الواجهة GNOME يستغرق من 2 إلى 3 دقائق ،السبب عادة يكون إعدادات الشبكة إما إسم نطاقك غير صحيح في الملف hosts أو ليس لديك hostname كل هذا لأن X server أول ماصنع صنع من أجل الشبكات و ليس من أجل أن يستخدم على جهاز محلي لهذا تكون إعدادات جهازك من ناحية الشبكة صحيحة .

كل ماعلينا هي إضافة بعض الخيارات إلى الأمر Exec الموجود في الملف gnome.desktop

نقوم بفتحه و نحن مستخدم root و نضيف الآتي :

ee /usr/local/share/xsessions/gnome.desktop

Exec=gnome-session –purge-delay5=000 –wam-delay=5000

نقوم بحفظ الملف CTRL+c بعدها نكتب exit ،في المرة القادمة في إعادة الدخول إلى GNOME ستجده إن شاء الله خفيفا .

الدرس على شكل ملف : http://0xsife.files.wordpress.com/2009/09/fixing-gnome-slow.pdf

التصنيفات:أنظمة يونكس الوسوم:, ,

‫القراءة و الكتابة على أقراص ‪ NTFS‬في ‪FreeBSD‬‬

‫السلام عليكم و رحمة ال و بركاته‬
‫كثيرا من من هم منا لديهم بجانب توزيعة نظام ‪ windows‬مع أقراص بنظام ‪، NTFS‬المشكلة تكمن أن‬ أنظمة يونيكس ليس لها دعم قراءة و كتابة كامل على مثل هذا النوع من أنظمة الملفات لهذا نستخدم‬ برنامج خارجي و لعل أشهرهم هو ‪. ntfs-3g‬‬
‫الشرح هنا سيطبق على ‪ FreeBSD 7.x‬لكن ليوجد إختلف كبير في توزيعات ‪. Linux‬‬
‫اول علينا تنصيبه إما من ‪ ports‬او ‪. package system‬‬
طريقة ‪: packages‬‬
‫‪

pkg_add -r ntfs-3g‬‬

‫هذه ستقوم بتنصيبه من إحدى السيرفرات .‬
طريقة ‪: ports‬‬
‫‪

su‬‬
‫‪cd /usr/ports/sysutils/fusefs-ntfs‬‬
‫‪make install clean

‬‬
‫أول علينا تشغيل ‪ fuse‬و هذا بإضافة التالي إلى الملف ‪ rc.conf‬المسؤول عن تشغيل الخدمات مع كل‬ بداية تشغيل :‬

‫‪ee /etc/rc.conf‬‬

‫فتح الملف بواسطة المحرر ‪. ee‬‬

‫”‪fusefs_enable=”YES‬‬

بعدها ‪ CTRL+C‬نكتب ‪ exit‬لحفظ العدادت .‬
‫بما أن ‪ FreeBSD 7.x‬قام بتوحيد عائلة المر ‪ mount‬فإنه علينا أول ننقل البرنامج ‪ mount_ntfs‬الذي‬ يأتي مع النظام و نستبدله ببرنامج ‪ ntfs-3g‬الذي يكون إسمه ‪، mount_ntfs-3g‬كل هذا من أجل جعل‬ الكتابة و القراءة تكون مع بداية تشغيل النظام و هذا بالستعانة بالملف ‪. fstab‬
‫‪

cd /sbin‬‬
‫‪mv mount_ntfs BSDntfs‬‬

‫هنا تمت عملية النقل ،الن نقوم بإستبداله بالبرنامج ‪: ntfs-3g‬‬
‫‪

cd /usr/sbin‬‬
‫‪mv mount_ntfs-3g mount_ntfs‬‬

اخيرا نعدل على الملف ‪ fstab‬حيث في عمود ‪ option‬نضيف خيار ‪ late‬ كالآتي :‬

‫3‪/dev/ad0s‬‬            ‫‪/mnt/WinXP‬‬           ‫‪ntfs rw,late‬‬                 ‫0‬      ‫0‬

‫‪

rw‬يعني القراءة و الكتابة على القرص أما /3‪ dev/ad0s‬فهو القرص المنصب عليه ‪ windows‬اخيرا /‬mnt/WinXP‬معناها أين يتم تحميل الملفات .‬
الدرس على شكل ملف pdf : ‫‪‫القراءة و الكتابة على أقراص ‪ NTFS‬في ‪FreeBSD‬‬

التصنيفات:أنظمة يونكس الوسوم:, ,

كيف تحسب عدد أحرف كلمة في ال C

السلام عليكم و رحمة الله و بركاته
اليوم إن شاء الله سنتعرف على طريقة حساب عدد حروف كلمة في لغة C في الحقيقة توجد دالة بإسم strlen في المكتبة string مهمتها حساب عدد حروف كلمة ما
لكن الهدف هنا هو تعلم طريقة بناء مثل هذه الدوال .
في لغة C لا توجد متغيرات لتخزين الكلمات لكن بدل ذلك نستخدم مصفوفات إلا أنه هذه الأخيرة محدودة من حيث العناصر حيث يجب عليك إما تحديد عدد عناصر المصفوفة
أو أن المترجم سيقوم بذلك أثناء عملية الترجمة هذا بعد تحديد الكلمة .
مثال :

char str[]=”sife”;

أثناء عملية الترجمة ستكون هكذا :

char str[3]=”sife”;

الطريقة الأخرى هي بإعطاء مؤشر كالآتي :

char *str=”sife”;

حيث تكون في الذاكرة كالآتي :

http://0xsife.files.wordpress.com/2009/09/str.jpg?w=600

حيث أن NULL في الذاكرة تكون 0\ و ليست 0 الذي نقوم به في الحساب أما في الكلمة ستكون بمعنى النهاية ،الآن و عرفنا كيف يتم تخزين كلمة في الذاكرة حان دور معرفة كيفية حساب عدد حروف كلمة لننظر للبرنامج الآتي :

http://0xsife.files.wordpress.com/2009/09/strpro.jpg?w=600

السطر 4 متغير نخزن فيه عدد الأحرف أما السطر 5 فهو مؤشر للكلمة المراد حسابها ،السطر 6 إستخدمنا فيه التكرار حيث str* تعني القيمة الموجودة في الذاكرة فائدتها في هذه الحلقة هي فحص إذا ما تم الوصول إلى النهاية أما لا ،السطر 8 مع كل زيادة في عنوان أي النتقال إلى حرف جديد نزيد المتغير بقيمة واحدة أما السطر 9 فهو الإنتقال إلى العنوان اللاحق أي الإنتقال إلى الحرف اللاحق ،السطر 11 هو لطابعة عدد الأحرف الموجودة .
كان من الممكن تبديل البرنامج السابق بهذا :

#include<stdio.h>
main()
{
int i=0;
char *str=”abdelrazak”;
while(*str!=”)
{
i++;
*str++;
}
printf(“%d”,i);
return 0;
}

الإختلاف الوحيد سيكون في السطر 6 حيث أن الشرط هو أننا لم نصل إلى نهاية الكلمة أي 0\ سنقوم بزيادة عنوان في الذاكرة مع زيادة في المتغير i .

التصنيفات:برمجة الوسوم:

نموذج تسجيل و تفعيل التسجيل عبر البريد الإلكتروني

السلام عليكم و رحمة الله و بركاته

اليوم سنتعرف على طريقة التسجيل مع تفعيله عبر البريد الإلكتروني مثل ماهو موجود في المنتديات حيث النموذج الخاص بنا سيكون بسيط يحمل 4 حقول و هي كالآتي :
user : هذا لإسم المستخدم .
pass : لكلمة السر .
email : للبريد الإلكتروني .
أما الحقل الرابع فهو لنموذج التسجيل حتى نستخدمه في عملية التحقق من أن النموذج
تم إرسال البيانات عبره أم لا لأنه لو إستخدمنا المتغير submit فهذا يجعل نموذجنا لا يعمل مع internet Explorer مع بعض المشاكل في المتصفحات الأخرى .
النموذج واضح إن شاء الله فقط في السطر 10 تلاحظون إسم الحقل الخفي action مع قيمة register حيث هذه سنستعملها في التحقق من النموذج .
قاعدة البيانات الخاصة بنا ستكون كالآتي :

CREATE TABLE IF NOT EXISTS `users` (
`id` int(11) NOT NULL auto_increment,
`user` varchar(25) NOT NULL,
`password` varchar(25) NOT NULL,
`email` varchar(25) NOT NULL,
`code` varchar(50) NOT NULL,
`status` int(11) NOT NULL default ‘0′,
PRIMARY KEY (`id`)
) ENGINE=MyISAM DEFAULT CHARSET=latin1 AUTO_INCREMENT=1 ;

user : هو إسم المستخدم
password : كلمة السر
email : البريد الإلكتروني
code : هذا الحقل نضع فيه كلمة التفعيل التي ستكون عبارة عن تشفير لإسم المستخدم .
status : هذا الحقل سيحمل قيمة 0 مع كل مستخدم جديد دلالة على أن المستخدم غير مفعل حسابه أما لو كان حسابه مفعل فسيحمل القيمة 1 .
dd
في السطر 16 نقوم بالتحقق من أن النموذج تم إرساله و ذلك بمعرفة إن المتغير action يحمل قيمة أم لا بإستخدام الدالة isset التي ترجع true في حالة إن كان المتغير يحمل قيمة .
الأسطر 17-19 هي إستقبال للبيانات من النموذج أما 21-22 فهي إتصال بقاعدة البيانات .
السطر 23 هو إستعلام يرجع لنا حقل في حالة تحقق الشرط حيث أن شرطنا هو وجود عضو بنفس الإسم الذي إستقبلناه من النموذج أما السطر 24 فهو إستخدام الدالة mysql_num_row التي تعيد لنا عدد الحقول من نتيجة إستعلام ،الهدف من هذا هو معرفة إن كان يوجد عضو مسجل أصلا بهذا الإسم حتى نمنع منع التسجيل بنفس الإسم .
في حالة أرجع لنا الإستعلام حقلا فهذا يعني أن الإسم محجوز فنخبر العضو الجديد بإن هذا محجوز في السطر 27 (مسكين :D ) بعدها نوقف عمل السكريبت في السطر 29 .
أما إن كان العكس (عدم إرجاع أي حقل من الإستعلام) فهذا يعني أنه محظوظ فنقوم بتوليد كلمة عشوائية في السطر 29 إنطلاقا من إسم المستخدم وذلك بتشفيرها بعدها نقوم بإضافة البيانات في السطر 32 لاحظوا أن الحقل status لم أقم بإضافة قيمة له ذلك أنه عند إضافة كل مستخدم جديد ستكون معه قيمة إبتدائية و هي 0 التي تعني أنه غير مفعل السبب في هذا هو الكسل في زيادة طول الإستعلام .
السطر 34 إستخدمنا فيه الدلة mysql_insert_id التي مهمتها إرجاع قيمة ال id الذي تم إنشائه في قاعدة البيانات من آخر إستعلام حيث هذا سيكون id آخر مستخدم قام بالتسجيل .
السطر 36 ننشيء فيه رابط يكون كالآتي : confirm.php?id=$id&code=$activation
حيث confirm.php ستكون الصفحة التي نقوم فيها بتفعيل الحساب ،id سيحمل رقما يعبر عن مستخدم في القاعدة أخيرا code هو رقم التفعيل .
السطر 37 هو الرسالة التي سترسل إلى بريد العضو للتفعيل أما السطر 38 فهو إرسال الرسالة إلى العضو بإستخدام الدالة mail التي تأخذ 3 وسائط ،الأولى البريد المرسل إليه في حالتنا بريد من قام بالتسجيل بعدها عنوان الرسالة أكيد ستكون تفعيل حساب أخيرا محتوى الرسالة التي ستحتوي على رابط التفعيل للمستخدم .
ملاحظة : الدالة mail تحمل أكثر من 3 وسائط لكن عادة نستخدم 3 الوسائط الأولى فقط .
dd
صفحة تفعيل التسجيل ستكون بسيطة أولا سنستقبل البيانات id الخاص بالعضو و رمز التفعيل حيث قمنا أولا بالتحقق من أن هذه المتغيرات تحمل قيمة في السطر 9 كما ترون .
السطر 11 للإتصال بالقاعدة و 12 لإختيار قاعدة البيانات أم السطر 13 فهو إستعلام نقوم بالبحث في قاعدة البيانات
عن هذا العضو ،بعدها في السطر 14 إن كان الإستعلام رد لنا حقلا واحد فهذا يعني أن العضو موجود فنقوم بتغيير حالته من غير مفعل إلى مفعل و ذلك بتحديث قيمة الحقل status من 0 إلى 1 ، الباقي معروف .
ملاحظة : الشرح مختصر بعض الشيء و ذلك على فرض أن القاريء لديه معرفة بسيطة بقواعد البيانات .

التصنيفات:برمجة