الفريق العربي للبرمجةأرشيف المنتديات · 2000 – 2023
نسخة أرشيفية للقراءة فقط — التسجيل والمشاركة مغلقان، والمحتوى محفوظ كما كان.

برمجة مواقع الويب باستخدام واجهات Cgi ولغة سي ++

بدأه time1 في 6 سبتمبر 2008 · 22 رد · 6,749 مشاهدة · في المواضيع والدروس
مشاركة: واتساب X فيسبوك تيليجرام
#1 صاحب الموضوع

بسم الله الرحمن الرحيم

والصلاة والسلام على اشرف الخلق , سيدنا محمد وعلى آله وصحبه آجمعين .

في هذا الموضوع سأحاول التطرق إلى برمجة مواقع الويب باستخدام واجهات CGI ولغة سي ++ .

سأحاول ان افصل الموضوع إلى عدة دروس وسأبتدي بهذا الدرس الأول , على امل ان يستجيب المولى دعائي ويوفقني في هذه الدروس .

1- ماذا احتاج لكي ابدا ؟

تحتاج اولا لتركيب Apache Server ليتم التعامل مع الجهاز على انه سيرفر , ويمكن الحصول عليه من الانترنت ويوجد منه اصدارات مختلفة , وبالنسبة للاصدار الذي اتعامل معه فهو appserv-win32,V:2.5.7

بعد ذلك تحتاج لمعرفة بسيطة في لغة Html والتعامل مع بعض وسومها .

تحتاج ايضا لمعرفة جيدة في لغة سي ++ لكتابة البرامج .

2- كيف انفذ البرنامج ؟

بعد كتابة البرنامج وترجمته نقوم بنسخه ووضعه في مجلد cgi-bin على المسار التالي : AppServ\www\cgi-bin

ونقوم بتحويل امتداد البرنامج من exe إلى cgi وعند التحويل ستظهر لك رسالة تسألك فيما اذا كنت ترغب بالتغيير فعلا , اختر موافق .

3- اعدادات Apache Server

ابدا تنزيل البرنامج واستمر حتى تأتي لك شاشة تطالبك باسم السيرفر , اكتب هنا اسم السيرفر localhost لكي نكمل عليه امثلتنا كما بالصورة .

post-82612-1220717487_thumb.jpg

بعد ذلك ستأتي لك شاشة كلمة المرور لـ MYSQL ادخل اي كلمة ولتكن root

post-82612-1220717500_thumb.jpg

بعد ذلك ستتم عملية تنصيب الاعدادات بنجاح ليكتمل تنزيل Apache Server

post-82612-1220717513_thumb.jpg

********************************************************************************

***

البداية مع برمجة مواقع الويب باستخدام واجهات CGI ولغة سي ++.

1- كتابة برامج CGI

نبدا اولا في تحديد النمط الذي سيتعامل معه المتصفح في معالجة البيانات التي يتلقاها Multipurpose Internet Mail Extensions (MIME)

هناك انماط مختلفة ليتعامل معها المتصفح مثل :

text/html , text/plain,image/gif

يتم تحديد النمط من خلال التعليمة التالية :

Content-type: text/html

والتي نعبر عنها بلغة السي ++ بواسطة الخرج cout كما يلي :

   cout << "Content-type: text/html\n\n";

نلاحظ من السطر السابق ان كتابة التعليمات بلغة سي ++ على شكل تعليمات للغات اخرى يتم بواسطة الخرج cout وللتوضيح اكثر لاحظ التالي :

بعد كتابة التعليمة التي تحدد لنا نمط MIME نقوم بكتابة عناصر XML والتي نجدها مكتوبة بشكل افتراضي ببعض المحررات مثل Rapid php

<?xml version = \"1.0\"?>"
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" 
"http://www.w3.org/TR/xhtml1/DTD/xhtml1-Strict.dtd">

والان لكي نقوم بكتابة هذه التعليمة داخل برنامجنا بلغة سي ++ نقوم بكتابة التعليمات وكأننا نرغب بطباعتها على الشاشة , ولكن عند تحويل البرنامج إلى cgi بدلا من exe سيتم التعامل معها على انها عناصر XML

   cout << "<?xml version = \"1.0\"?>"
		<< "<!DOCTYPE html PUBLIC \"-//W3C//DTD XHTML 1.0 "
		<< "Transitional//EN\" \"http://www.w3.org/TR/xhtml1"
		<< "/DTD/xhtml1-transitional.dtd\">";

الان سنقوم بكتابة برنامج بسيط يقوم بطباعة الجملة "Hello World" على الشاشة .

نعلم ان اي مستند html يأخذ الشكل التالي في الكتابة :

<html>
<head>
<title>
</title>
</head>
<body>
</body>
</html>

يسمى كل مما سبق وسوم , وسنقوم الان بكتابة برنامجنا البسيط الذي يطبع عبارة Hello World طبعا وفقا لهذه الوسوم , قد تحتاج اخي القارئ إلى التعرف اكثر لوسوم html .

  cout << "<html xmlns = \"http://www.w3.org/1999/xhtml\">"
		<< "<head><title>My First Program</title></head>"
		<< "<body><p>" << "Hello World ! "  << "</p></body></html>";

الشرح :

يبدا برنامجنا بوسم html وينتهي به , وبعدها قمنا بالتعامل مع الوسم title والذي يقوم بإعطاء تسمية في شريط العنوان العلوي للمتصفح . وقمنا بكتابة الجملة التالية My First Program

الان وداخل الجسم body نقوم بكتابة الجمالة Hello World بين وسوم فقرة paragraph .

ننهي بعدها كل وسم تم فتحه بوسم اغلاق .

ليصبح البرنامج بشكل كامل كما يلي :

int main()
{

   cout << "Content-type: text/html\n\n";

   cout << "<?xml version = \"1.0\"?>"
		<< "<!DOCTYPE html PUBLIC \"-//W3C//DTD XHTML 1.0 "
		<< "Transitional//EN\" \"http://www.w3.org/TR/xhtml1"
		<< "/DTD/xhtml1-transitional.dtd\">"; 


   cout << "<html xmlns = \"http://www.w3.org/1999/xhtml\">"
		<< "<head><title>My First Program</title></head>"
		<< "<body><p>" << "Hello World ! "  << "</p></body></html>";

   return 0;

}

الان قم بكتابة البرنامج وترجمته , ستلاحظ عند التنفيذ ان ماكتب اعلاه يخرج لنا على شكل عبارات نصية , هذا طبيعي , قم الان بنسخ البرنامج من مجلد Debug إلى المجلد cgi-bin كما اوضحنا سابقا بالمسار AppServ\www\cgi-bin وقم بتغيير امتداده من exe إلى cgi وقم بإعادة تسميته مثلا : first.cgi .

بعدها قم بتنفيذ البرنامج من خلال المتصفح بكتابة الرابط التالي :

http://localhost/cgi-bin/first.cgi

ستفتح لك صفحة مكتوب بها Hello World ولاحظ ايضا التسمية الموجودة في شريط العنوان للمتصفح , إلى هنا نكون قد انتهينا من برنامجنا الاول .

********************************************************************************

*********

دعونا الان نسترسل بالامثلة :

مثال آخر:

سنقوم الان بكتابة برنامج يطبع لنا الجملة التالية : " بسم الله الرحمن الرحيم " بخط اندلوسي ,وبلون احمر وبحجم خط 8.

سنستخدم الوسم <Font> وقد تعاملنا سابقا مع الوسوم في المثال السابق فلا يوجد لدينا مشكلة بها , لكن ماذا لو كان الوسم له مجموعة من الخصائص مثل الوسم font ؟

تختلف الكيفية التي يتم فيها اعطاء القيم للخصائص في سي ++ عن الكيفية التي كنا نعطي فيها القيم بلغة html ,

وفيما يلي مثال بسيط يوضح المسألة :

cout << "<html xmlns = \"http://www.w3.org/1999/xhtml\">"
		<< "<head><title>My First Program</title></head>"
		<< "<body><font face=\"Andalus\" color=\"Red\" size=\"+8\"><p>" <<"بسم الله الرحمن الرحيم"
		<< "</p></font></body></html>";

post-82612-1220718057_thumb.jpg

********************************************************************************

****

إلى هنا اكون قد انتهيت من درسي الاول , وسأكمل الباقي في الدرس القادم بإذن الله .

تحياتي . . .

llback.jpg

اشهد ان لا إله إلا الله وان محمدا ً رسول الله

#2

شكرا لك يا على درس مميز وفقك الله .

tvquran_6.gif

#3

درس رائع يا time1 وبداية موفقه باذن الله

amdvsintel22.jpg

--i use AMD--

لا اله الا الله محمد رسول الله

أستعن بالله و لا تعجز

تابعنى على تويتر

***

#4

جميل جدا ..بارك الله فيك :clapping:

اللهم صل على سيدنا محمد وعلى آله وصحبه وسلم

#5

اتعب وانا اقوول مبدع

يعطيك الف الف عافية

#6

بارك الله فيك اخى time1 و وفقك على هذا الشرح الرائع

لكن لى استفسار , ما هى الميزة فى تصميم المواقع باستخدام ++C و من الممكن عمل مواقع بطريقة اسهل و ابسط باللغات الموجهة لذلك مثل

HTML , PHP , JavaScript ؟؟

#7

شكرا لك يا أخ Time1

موضوع رائع ..

يعيطك العافية,,,

تحيااااتي,,

للصداقة البرمجية

pro-vb6@hotmail.com

#8
اقتباس
والان لكي نقوم بكتابة هذه التعليمة داخل برنامجنا بلغة سي ++ نقوم بكتابة التعليمات وكأننا نرغب بطباعتها على الشاشة , ولكن عند تحويل البرنامج إلى cgi بدلا من exe سيتم التعامل معها على انها عناصر XML

على نحو ادق -على ما اعرف - يحدث Capturing لل output أو تحويل مساره بحيث يرسل على ال Socket لل Browser الخاص بال Client

تماما كما لو كنت تعمل بال Perl أو غيره

اقتباس
و من الممكن عمل مواقع بطريقة اسهل و ابسط باللغات الموجهة

بالتأكيد لا اسهل ولا ابسط ولكنة اكييد اسرع بمراحل

لا تدخل بين ال C هنا و ال Html او ال Js وانما التداخل الوظيفى مع ال PHP

#9

اشكرك اخي ASDen على هذه المداخلة والمعلومة الرائعه .

كما اشكر جميع الاخوان الذين شكروا او علقوا على الموضوع .

بالنسبة لك اخي Omar Eladel

فرد الاستاذ ASDen كان كافيا , ومن ناحية اخرى كلامك صحيح يوجد لغات صممت اساسا لهذا الغرض مثل PHP ولكن لكي نقوم بالمقارنة بين اللغتين يجب ان تكون لدينا دراية كافية حول هذا الغرض باللغتين , وهذا الموضوع هو مدخل لبرمجة مواقع الويب بواسطة هذه اللغة ونوع من التغيير :happy:

اكرر شكري لكم جميعا .

llback.jpg

اشهد ان لا إله إلا الله وان محمدا ً رسول الله

#10

عندي استفسار بسيط اخوي

ليش اخترنا المجلد هذا cgi-bin ؟؟؟بالذات؟؟

#11
almstshar2 كتب:
عندي استفسار بسيط اخوي

ليش اخترنا المجلد هذا cgi-bin ؟؟؟بالذات؟؟

اهلا اخي .

لانه المجلد الافتراضي في Apache الذي يحدد بأن الملفات الموجودة داخل هذا المجلد يتم تشغيلها على انها برامج cgi

وعندما تفتح الملف httpd.conf ستجد مكتوب بداخله :

ScriptAlias /cgi-bin/ "C:/AppServ/www/cgi-bin/"

<Directory "C:/AppServ/www/cgi-bin">
	AllowOverride None
	Options None
	Order allow,deny
	Allow from all
</Directory>
llback.jpg

اشهد ان لا إله إلا الله وان محمدا ً رسول الله

#12

نقطتان اخريتان اضيفهم بالنسبة لل Cgi-bin

1) حتى يسمح بتنفيذ ال Cgi يجب ان يتم وضع جزء ال Options ExecCgi اما فى اعدادات هذا ال Directory أو فى ال Default Directory

جملة ال ScriptAlias اعتبرها مثل ال Shotcut أو ال Symlink بمعنى مسار يشير الى مسار

ما يميزها انها فى المسار المشار الية يتم تنفيذ هذه الملفات لا عرضها للمستخدم - السلوك الافتراضى - هذا طبعا حالة وجود ExecCgi

#13

المقال أكثر من رائع و أحييك عليه

لكن تطوير المواقع الديناميكية باستخدام ++C مثل محاولة تثبيت مسمار في الحائط باستخدام مدفع!! فنحن الان في عصر انتشرت فيه لغات برمجة مناسبة أكثر لطبيعة الويب مثل Java و #C و Ruby و Python و VB.net و PHP و غيرها عشرات من اللغات التي تعمل على منصات مصممة خصيصاً لهذا مثل J2EE و ASP.net وRuby On Rails و Django

أنا أنصح من واقع خبرة و الحمد لله جيدة في مجال برمجة الويب استخدام اي تقنية مناسبة غير ال++C و الCGI

Sr. Software Development Engineer
Hulu, LLC
My Blogs

#14

احب ان انوه اخواني بأنه تم وضع الدرس الثاني , من هنا

وقريبا ان شاء الله سأعد الدرس الثالث .

اشكركم على ردودكم الطيبة .

تحياتي . . .

llback.jpg

اشهد ان لا إله إلا الله وان محمدا ً رسول الله

#15
اقتباس
لكن تطوير المواقع الديناميكية باستخدام ++C مثل محاولة تثبيت مسمار في الحائط باستخدام مدفع!!

كلام سليم جدا تطوير موقع كامل باستخدام ال C++ فعلا جنون

ولكن عندما نتكلم عن صفحات ذات ضغط عالى فى مواقع ضخمة فال C++ تستخدم بالفعل على أرض الواقع

وستجدها فى محل التطبيق لمواقع مثل Google , Youtube , Facebook

#16
ASDen كتب:
كلام سليم جدا تطوير موقع كامل باستخدام ال C++ فعلا جنون

ولكن عندما نتكلم عن صفحات ذات ضغط عالى فى مواقع ضخمة فال C++ تستخدم بالفعل على أرض الواقع

وستجدها فى محل التطبيق لمواقع مثل Google , Youtube , Facebook

حتى المواقع التي ذكرتها لا تستخدم ال++C و اذا استخدمتها فانها تكون في الBackend و ليس في الصفحات

Sr. Software Development Engineer
Hulu, LLC
My Blogs

#17

ممتاز اخي time1

اقتباس
وستجدها فى محل التطبيق لمواقع مثل Google , Youtube , Facebook

تلك المواقع تستخدم خليط من التقينات ولها معماريتها الخاصه بها .

فعلى سبيل المثال الـ Facebook تستخدم الـ PHP و RoR و erlang ..و غيره .

تم تعديل هذه المشاركة بواسطة محمد معاشر في 8 سبتمبر 2008 في 12:21

لا إله الإ الله وحده لا شريك له الملك وله الحمد يحي ويميت وهو على كل شئ قدير

------------------------------------------------------------------------------------------------

gazabigBanner.jpg

------------------------------------------------------------------------------------------------

#18
اقتباس
تى المواقع التي ذكرتها لا تستخدم ال++C و اذا استخدمتها فانها تكون في الBackend و ليس في الصفحات

بالعكس هى تستخدمها وبكثرة

مسألة ال Backend هذة هى مسألة نسبية فمثلا ال Application Logic ممكن يكون اكملة بال Cpp فى حين شغل ال Html و المواجهة البسيطة مع ال Server بلغة ك PHP أو غيرها

وحتى فى المواجهة تفعل ال Cpp عندك مثلا ال Google Template System الذى تم اصدارة من فتره

وفى النهاية هى ليست لغة جديده ولغات الويب المنتشرة تعمل ك Glue لمكتبات ال Cpp ولكن فى بعض الاحوال يكون عبء ال Compiler وغيره ثقيل و هنا تظهر ال Pure Cpp أو ال Customizations

#19

السلام عليكم

جزآك الله خير على الشرح وننتظر التكمله على احر من الجمر :lol:

والخاملون اذا غدوت تلومهم سمعوك في اذانهم تترنم .. هذا نحن العرب للاسف

[spacing]

HaKxEr HaCker

My Site

[/spacing]

#20

درس رائع

وسأضيف شيئ بعد نهاية السلسلة :)

#21

درس موفق اخي تايمر

لدي استفسار

هل بالامكان تنفيذ اوامر على السيرفر ام ان السيرفر يحجب اي تنفيذ عدا الخرج cout

و ما مدى مستوى الامان للحد من استخدام السي على السيرفر ؟

#22

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

جزاك الله خيراً أخي الكريم time1 على هذا الدرس ، وكذا الأخ الكريم ASDen على الإفادة .

أعتذر عن مقاطعة الدرس فهو موجّه لمن له خلفية جيدة بـ C ، ولكني متشوق إلى هذا بحكم أني مبرمج php

تابعت الدرس جيداً ولكن بدلاً من تنفيذ الملف ظهرت لي هذه الرسالة في المرفقات :

علماً أن الإعدادات صحيحة والله أعلم

<Directory "E:/localhost/cgi-bin">
	AllowOverride None
	Options +ExecCGI
	Order allow,deny
	Allow from all
</Directory>
AddHandler cgi-script .cgi .exe

قمت بترجمة الملف كما كتبه الأخ time1 بإضافة

#include <iostream.h>

حتى تعمل الدالة cout معي .

ترجمته بـ dev C + + بدون إضافة مشروع ولا يحزنون

عذراً على التطويل

post-71437-1252753431_thumb.gif

ولو وافيت ربك دون ذنب *** وناقشك الحساب إذاً هلكتا

ولم يظلمك في عملٍ ولكن *** عسير أن تقوم بما حملتا

#23

تم حل المشكلة ولله الحمد بعد نقل الملف إلى / ::

http://localhost/first.exe فعمل الملف ولله الحمد ،

لعل هناك إعدادات في httpd.config تجعل المجلد cgi-bin محمي والله أعلم

ولو وافيت ربك دون ذنب *** وناقشك الحساب إذاً هلكتا

ولم يظلمك في عملٍ ولكن *** عسير أن تقوم بما حملتا

مواضيع مشابهة