آخـــر الـــمـــشـــاركــــات

تحميل برنامج الغاء تثبيت البرامج من الكمبيوتر Should I Remove It » آخر مشاركة: اردني وافتخر دردشة وتعليله وسواليف.. » آخر مشاركة: عاشق الحصن بريد الاعضاء » آخر مشاركة: محمد العزام اهلا بكم ..رمضان كريم » آخر مشاركة: حسان القضاة شو عم تسمع هلا » آخر مشاركة: حسان القضاة ما هو سبب تواجدك في المنتدى والى اي حدّ يستمر او ينتهي إنتسابك له ؟ » آخر مشاركة: قلعتي أبدية مرحبا » آخر مشاركة: محمد العزام " أميــــرةُ قـوسِ النَّصـــــر" » آخر مشاركة: قلعتي أبدية ~ إبريـــــــــــــــــل ~ » آخر مشاركة: حسان القضاة اسئلة مهمة بالفوتوشوب في المطابع 2019 » آخر مشاركة: المصمم يزن جبريل صاحب المركز الاول فى مجال تنزيل الملفات كامل مدي الحياة IDM 6.32 » آخر مشاركة: siiin همسات وأشوق » آخر مشاركة: حسان القضاة ""أيلـول""... » آخر مشاركة: قلعتي أبدية تبليغ عن رسالة زائر بواسطة راشد مرشد » آخر مشاركة: أميرة قوس النصر اشتقنالكم » آخر مشاركة: Mahmoud Zaben تُراهات ما قبل النوم ... » آخر مشاركة: قلعتي أبدية شو مزاجك اليوم... » آخر مشاركة: قلعتي أبدية قبول بلاغ عطل ثلاجات كلفينيتور 01092279973 & 0235700997 وكيل كلفينيتور (م .الجديدة) » آخر مشاركة: الوكيل1 قبول بلاغ عطل ثلاجات هوفر 01154008110 & 0235699066 وكيل هوفر (م.6اكتوبر) » آخر مشاركة: الوكيل1 قبول بلاغ عطل ثلاجات جنرال اليكتريك 01207619993 & 0235700997 وكيل جنرال اليكتريك (الز » آخر مشاركة: الوكيل1

الرد على الموضوع

أضف مشاركة إلى الموضوع: [شرح تفصيلى] مكتبة الاتصال والتخاطب بين السيرفرات cURL

رسائلك

اضغط هنا للدخول

 
 

يمكنك إختيار أيقونة لرسالتك من هذه القائمة

الخيارات الإضافية

  • سيتم تحويلها www.example.com إلى [URL]http://www.example.com[/URL].

عرض العنوان (الأحدث أولاً)

  • 01-05-2012, 03:29 PM
    Sc®ipt

    رد: [شرح تفصيلى] مكتبة الاتصال والتخاطب بين السيرفرات cURL

    العفو اختي العقيق و اشكرك ع المرور
  • 01-05-2012, 02:12 PM
    العقيق الاحمر

    رد: [شرح تفصيلى] مكتبة الاتصال والتخاطب بين السيرفرات cURL

    يااا لهوي!! كل هاااد؟!

    حقيقي انا مو مستوعبة اشي .. وبتمنى يجي يوم واقدر افهم هيك رموز

    انشالله يستفيد كل من يهمه الموضوع ..
    يسلمو سكريبت
  • 01-03-2012, 12:55 PM
    Sc®ipt

    رد: [شرح تفصيلى] مكتبة الاتصال والتخاطب بين السيرفرات cURL

    تسلم محمود على المرور , وان شاء الله اكون افدت حتى ولو شخص واحد ,, اشكرك مرة ثانية
  • 01-03-2012, 06:31 AM
    هدوء عاصف

    رد: [شرح تفصيلى] مكتبة الاتصال والتخاطب بين السيرفرات cURL

    الله يعطيك الف عافية يا زيد وبتمنى الفائدة للجميع .. والله يزيدك من علمه ويباركلك فيه .. كل التقدير الك ..
  • 01-03-2012, 12:28 AM
    Sc®ipt

    رد: [شرح تفصيلى] مكتبة الاتصال والتخاطب بين السيرفرات cURL

    ههههه عموما منورة طوق الياسمين و اشكرك على المرور ^_^
  • 01-03-2012, 12:13 AM
    طوق الياسمين

    رد: [شرح تفصيلى] مكتبة الاتصال والتخاطب بين السيرفرات cURL

    مع انه ما فهمت كل اشي أو ولا اشي بس باين تعبك
  • 01-02-2012, 10:55 PM
    Sc®ipt

    [شرح تفصيلى] مكتبة الاتصال والتخاطب بين السيرفرات cURL

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

    سندرس سويا اليوم مكتبة من مكتبات php المشهوره وهى مكتبة CURL
    سيكون حديثنا عن الcurl على عدة نقاط كالتالى :
    • ما هو CURL
    • CURL و PHP
      • CURL on linux servers
      • CURL on windows

    • استراتيجية استخدامCURL
    • تفصيل استراتيجية استخدام CURL
      • اعلان جلسة CURL
      • اضافة الخواص للجلسة
      • اعطاء أمر تنفيذ الجلسة
      • اغلاق الجلسه وانهاؤها

    • بعض دوال CURL
    • مصادر CURL
    ما هو CURL :
    CURL هى مكتبة طورت بواسطة المطور الغربى دانيل ستانبرج وهى اختصار لــ : Client URL
    تتيح تلك المكتبة الاتصال والتخاطب بين السيرفرات باختلاف انواعها باختلاف بروتوكولات الاتصال مثل :
    • HTTP - HTTP GET - HTTP POST
    • HTTPS - HTTPS Certicicates
    • FTP
    • TELNET
    • FILE
    وتدعم بروتوكلات أخرى كــ : LDAP - DICT - GOPHER
    وكذلك تدعم طرق أخرى للاتصال كــ : Form Upload - Proxies - Cookies - User:Password Authentication
    استخدمت curl فى برمجة سكربتات متطوره لعل من ابرزها سكربت موقع مررها الذى يتيح رفع الملفات الى أكثر من مركز رفع بنفس الوقت فبامكانك برمجة سكربت يقوم برفع الملفات الى الرابيد شير مثلا بدون الدخول الى الرابيد شير من الأساس
    وسنتناول فيما بعد ما يهمنا من طرق الاتصال

    CURL فى PHP
    لا تأتى PHP بها CURL ولكن تحتاج منا الى تركيب الى سيرفرنا أو السيرفر الشخصى
    فلهذا سنحتاج الى تركيب libcurl الي السيرفر

    اذا كان نوع السيرفر لدينا Linux سنستخدم ssh ونطبق الأوامر التالية :

    كود PHP:
    wget http://curl.haxx.se/download/curl-7.17.0.tar.gz
    tar zfx curl-7.17.0.tar.gz
    ./configure
    make
    make test 
    (optional)
    make install 

    واذا كان السيرفر الذى نتعامل معه Windows ونفترض أن السيرفر نوعه appserv الشهير
    سنطبق بعض الخطوات التالية لتفعيلها :
    1. قم بالدخول الى المجلد C:\AppServ\php5
    2. ابحث عن الملفين التاليين :
      1. libeay32.dll
      2. ssleay32.dll

    3. وانسخهم الى المجلد التالى c:\windows\system32
    4. قم بفتح ملف php.ini عن طريق احدى الطرق التاليه
      1. الذهاب الى المسار التالى C:\Windows\php.ini
      2. قم بفتح run واكتب بها php.ini

    5. ابحث عن السطر التالى :

    كود PHP:
    ;extension=php_curl.dll 
    وقم بتغييره الى التالى

    كود PHP:
    extension=php_curl.dll 
    1. أى قم بحذف الفاصلة المنقوطه فقط
    2. اذهب الى المجلد C:\AppServ\php5\ext
    3. وابحث عن الملف التالى php_curl.dll
    4. وانسحة الى C:\AppServ\php5
    5. قم بعمل ريستارت ويسعمل معك curl وتكون قد فعلتها
    استراتيجية استخدام CURL


    لكى شئ له خطوات فى التعامل معها والتعامل مع جلسة curl يتم على خطوات تتم كالتالى :
    • اعلان جلسة CURL باستخدام دالة :
      كود PHP:
      curl_init(); 
    • ضبط خواص الجلسه كـ : عنوان الصفحه واستخدام بروكسى وكثير من الاعدادات سنتطرق اليها بعد حين ونستخدم لضبط خواص الجلسة الداله التاليه :
      كود PHP:
      curl_setopt($curl_session,$option_name,$option_value); 
      ويتم ضبط خاصيه واحده أو ضبط عده من الخواص وسنتطرق الى هذا فيما بعد
    اعطاء أمر تنفيذ الجلسة ويتم هذا باستخدام الداله :
    كود PHP:
     curl_exec($curl_session); 
    اغلاق الجلسه وانهائها ويتم هذا باستخدام الداله :
    كود PHP:
     curl_close($curl_session); 
    تفصيل استراتيجية استخدام curl

    اعلان جلسة CURL :
    ينقسم اعلان الجلسات فى CURL الى نوعين :

    • اعلان جلسة منفردة
    • اعلان عدة جلسات فى نفس الوقت
    اعلان جلسة واحدة منفردة :
    نستخدم لاعلان جلسة curl الداله التاليه اذا كنا سنقوم باعلان جلسه واحده فقط

    كود PHP:
    $curl_session curl_init(); 
    هنا قمنا باعلان جلسة CURL جديده وقمنا بتسمية مقبض الاستعلام عن الجلسة بالمتغير $curl_session
    هذا المقبض سيتم استخدامة عند جميع العمليات التاليه كضبط الخواص وتنفيذ الجلسه واغلاقها أيضا .
    الداله السابقة قد يتم استخدامها هكذا أو من الممكن أن يتم اضافة معامل لها يمثل اسم الموقع الذى سيتم تطبيق الجلسه عليه واذا قمنا باضافة هذا العامل سيكون على هذه الشاكله

    كود PHP:
    $ch curl_init('http://www.traidnt.net/vb/index.php'); 
    مثال :
    كود PHP:
    <?php// فتح جلسة جديده
    $ch curl_init();

    // ضبط بعض الخواص
    curl_setopt($chCURLOPT_URL"http://www.traidnt.net/vb/index.php");

    // تنفيذ الجلسة
    curl_exec($ch);

    // اغلاق وانهاء الجلسة
    curl_close($ch);
    ?>
    اعلان عدة جلسات فى نفس الوقت :
    قد نحتاج لأعلان اكثر من جلسه بنفس الوقت فى هذه الحاله سيكون الوضع كما يلى :

    • اعلان كل جلسه على حده باعتبارها جلسه منفردة .
    • نقوم بربطهم بمقبض واحد متعدد باستخدام الدالة curl_multi_init تجهيزهم للعمل على التوازى .
    كما يظهر بالمثال التالى :
    كود PHP:
    <?php// اعلان جلستين بطريقة اعلان جلسة منفردة
    $ch1 curl_init();
    $ch2 curl_init();

    // ضبط بعض خواص الجلسة
    curl_setopt($ch1CURLOPT_URL"http://www.traidnt.net/vb/index.php");
    curl_setopt($ch2CURLOPT_URL"http://www.marsavb.net/vb/index.php");

    //اضافة المقبض الذى سيتعامل مع اكثر من جلسة 
    $mh curl_multi_init();

    //اضافة المقابض لكل جلسة على حده
    curl_multi_add_handle($mh,$ch1);
    curl_multi_add_handle($mh,$ch2);

    //تنفيذ مقابض الجلسة
    do {
        
    curl_multi_exec($mh,$running);
    } while (
    $running 0);

    //اغلاق الجلسه والمقابض
    curl_multi_remove_handle($mh$ch1);
    curl_multi_remove_handle($mh$ch2);
    curl_multi_close($mh);

    ?>
    فى هذا المثال قمنا باعلان جلستين هم : ch1 و ch2 وقمنا بعدها باضافة بعض الخواص الخاصه بهما كعنوان الصفحه التى سنتعامل معها
    وقمنا بعد ذلك باضافتهم الى مقبض متعدد ثم بعد ذلك يتم تشغيلهم على التوازى .


    اضافة الخواص للجلسه :
    تعتبر الخواص هى اليد المسيره لجلسة curl فعن طريقها يتم تحديد كثير من جهات التحكم بالجلسه
    و يمكن اضافة الخواص الى الجلسات عن طريقين :
    • اضافة كل خاصية على حده باسخدام الداله curl_setopt .
    • اضافة مصفوفه أو عدد من الخواص فى نفس الوقت باستخدام الدالة curl_setopt_array .
    اضافة كل خاصية على حده :
    ظهر هذا فى الأمثلة السابقة ويتم ضبط الخواص باستخدام الداله :
    كود PHP:
    curl_setopt($curl_session,$option_name,$option_value); 
    يتم استخدام مع تلك الداله ثلاثه من المعاملات

    • اسم مقبض الاستعلام الخاص بالجلسه ورمز له هنا بالمتغير $curl_session
    • اسم الخاصيه التى نريد اسناد قيمة لها ورمز لها هنا بالمتغير $option_name
    • قيمة الخاصيه المسنده ورمز لها هنا بالمتغير $option_value
    يوجد فى curl سلسلة كبيره جدا من الخواص التى من الممكن اسناد القيم اليها لن نذكرها جميعها ولكن سنذكر اهمها
    لمزيد من الخواص قم بزيارة
    PHP: curl_setopt - Manual
    وظهر بالأمثله السابقه طريقة استعمالها

    اضافة مصفوفة من الخواص فى ذات الوقت :
    ويتم هذا بنفس الميكانيكيه التى تمت بها الاضافه بكل خاصية على حده ولكن هنا سيتم اضافة مصفوفه من الخواص بدلا من اضافة خاصيه واحده على حده ويتم هذا باستخدام الدالة :
    كود PHP:
    curl_setopt_array($curl_session,$options_array); 
    ويتم فى هذه الداله التعامل مع معاملان :

    • اسم مقبض الاستعلام الخاص بالجلسه ورمز اليه هنا باسم $curl_session
    • مصفوفة الخواص التى سيتم اضافتها ورمز اليها هنا باسم $option_array
    وهنا مثال على اضافة مصفوفه من من الخواص
    كود PHP:
    $options = array(CURLOPT_URL => 'http://www.example.com/',                 CURLOPT_HEADER => false
                    
    );

    curl_setopt_array($ch$options); 
    وهنا سرد لأهم الخواص وماهية عملها :
    CURLOPT_URL : وهى خاصية تشير الى العنوان للصفحة الذى سيتم احضاره تنفيذ الكود عليه
    كود PHP:
    curl_setopt($chCURLOPT_URL'http://localhost/upload.php'); 
    CURLOPT_RETURNTRANSFER : خاصية تشير الى طريقة اعادة ناتج الجلسه فاذا تم ظبطه الى TRUE فسيتم اخراج ناتج الجلسه على هيئة متغير من النوع string وان لم يتم ضبطه أو تم ضبطه على FALSE فسيتم
    اخراج الصفحه كما هى . تفيد تلك الخاصيه اذا كنا نريد أن نقوم بعمليات على الناتج قبل اخراجه
    كود PHP:
    curl_setopt($chCURLOPT_RETURNTRANSFER,1); 
    CURLOPT_POST : يستخدم لتفعيل استخدام المتغير الخاص HTTP POST الذى يستخدم فى نقل المتغيرات من صفحة لأخرى
    كود PHP:
    curl_setopt($chCURLOPT_POST1); 
    CURLOPT_POSTFIELDS : يتم هنا تحديد المتغيرات التى سيتم نقلها عند تحديد استخدام HTTP POST ويجب الملاحظه هنا أن هذه الخاصيه والخاصية السابقة لها CURLOPT_POST متلازمتان وهنا قيمة الخاصية لا تكون من النوع boolean ولكنها تكون array
    كود PHP:
    $data = array('name' => 'Foo''file' => '@/home/user/test.png');
    curl_setopt($chCURLOPT_URL'http://localhost/upload.php');
    curl_setopt($chCURLOPT_POST1);
    curl_setopt($chCURLOPT_POSTFIELDS$data); 
    CURLOPT_USERPWD : يستخدم للوصول الى الملفات التى تحتاج الى تصاريح للوصول اليها من اسم مستخدم وكلمة مرور
    كود PHP:
    curl_setopt($ch,CURLOPT_USERPWD,"$username:$password"); 
    CURLOPT_UPLOAD : يستخدم لاعداد جلسة curl وتجهيزها لرفع الملفات
    كود PHP:
    curl_setopt ($curl,CURLOPT_UPLOAD,1); 
    CURLOPT_INFILE : تستخدم لتحديد الملف المراد رفعه
    كود PHP:
    <?php$filename '/path/localfile.txt';
    $fh fopen($filename"r");
    $ch curl_init();

    curl_setopt($chCURLOPT_URL'ftp://username:password@ftpserver.com/path/newfile.txt');
    curl_setopt($chCURLOPT_RETURNTRANSFER1);
    curl_setopt($chCURLOPT_UPLOAD1); 
    curl_setopt($chCURLOPT_INFILE$fp); 
    curl_setopt($chCURLOPT_TRANSFERTEXT1); 
    curl_setopt($chCURLOPT_INFILESIZEfilesize($filename));

    $output curl_exec($ch);
    curl_close($ch);
    print 
    $output;
    ?>

    CURLOPT_TRANSFERTEXT : نعلم أن هناك نوعين من نظام نقل الملفات الأول : Binary والثانى ASCII وفى هذه الخاصيه اذا تم تعيينها على TRUE فسيتم استخدام النظام ASCII
    كود PHP:
    curl_setopt($chCURLOPT_TRANSFERTEXT1); 
    CURLOPT_INFILESIZE : يستخدم فى حساب الحجم المتوقع بالبايت عاه ما يستخدم فى عمليات رفع الملفات لتزويد السيرفر البعيد بحجم الملف
    كود PHP:
    curl_setopt($chCURLOPT_INFILESIZEfilesize($filename)); 
    اعطاء أمر تنفيذ الجلسة :

    كما تحدثنا سابقا أن اعلان الجلسات هو نوعين فكذلك أيضا اعطاء أمر تنفيذ الجلسه هو نوعين :

    • اذا كان نوع الجلسه جلسه منفرده : نستخدم الداله
      كود PHP:
      curl_exec($ch); 
      وتأخذ تلك الداله معامل واحد وهو اسم الجلسه التى سيتم تنفيذها

    • اذا كان نوع الجلسه عدة جلسات فى نفس الوقت : نستخدم الداله
      كود PHP:
      curl_multi_exec($mh,$still_running); 
      هنا يتم استخدام اثنان من المعاملات . الأول : المقبض الذى تم توليده سابقا بساتخدام الداله curl_multi_init() . والثانى : هو متغير يشير الى استمرار تنفيذ الجلسات .
    اذا كان نوع الجلسه جلسه منفرده :
    كود PHP:
    <?php// create a new cURL resource
    $ch curl_init();

    // set URL and other appropriate options
    curl_setopt($chCURLOPT_URL"http://www.example.com/");
    curl_setopt($chCURLOPT_HEADER0);

    // grab URL and pass it to the browser
    curl_exec($ch);

    // close cURL resource, and free up system resources
    curl_close($ch);
    ?>
    اذا كان نوع الجلسه عدة جلسات فى نفس الوقت :
    كود PHP:
    <?php// create both cURL resources
    $ch1 curl_init();
    $ch2 curl_init();

    // set URL and other appropriate options
    curl_setopt($ch1CURLOPT_URL"http://lxr.php.net/");
    curl_setopt($ch1CURLOPT_HEADER0);
    curl_setopt($ch2CURLOPT_URL"http://www.php.net/");
    curl_setopt($ch2CURLOPT_HEADER0);

    //create the multiple cURL handle
    $mh curl_multi_init();

    //add the two handles
    curl_multi_add_handle($mh,$ch1);
    curl_multi_add_handle($mh,$ch2);

    $active null;
    //execute the handles
    do {
        
    $mrc curl_multi_exec($mh$active);
    } while (
    $mrc == CURLM_CALL_MULTI_PERFORM);

    while (
    $active && $mrc == CURLM_OK) {
        if (
    curl_multi_select($mh) != -1) {
            do {
                
    $mrc curl_multi_exec($mh$active);
            } while (
    $mrc == CURLM_CALL_MULTI_PERFORM);
        }
    }

    //close the handles
    curl_multi_remove_handle($mh$ch1);
    curl_multi_remove_handle($mh$ch2);
    curl_multi_close($mh);

    ?>
    اغلاق الجلسه وانهائها :

    كما تحدثنا سابقا أن اعلان الجلسات واعطاء أمر تنفيذ الجلسات هنا أيضا اغلاق الجلسات هو نوعين :

    • اذا كان نوع الجلسه جلسه منفرده : نستخدم الداله
      كود PHP:
      curl_close($ch); 
      وتأخذ تلك الداله معامل واحد وهو اسم الجلسه التى سيتم اغلاقها

    • اذا كان نوع الجلسه عدة جلسات فى نفس الوقت : نستخدم الداله
      كود PHP:
      curl_multi_close($mh); 
      هنا يتم استخدام اثنان من المعاملات . الأول : المقبض الذى تم توليده سابقا باستخدام الداله curl_multi_init() .
    والأمثله كما هو متواجد باعطاء أمر تنفيذ الجلسه


    بعض دوال CURL


    curl_ copy_ handle
    تستخدم لنسخ مقبض الى مقبض آخر بعنوان جديد وتحتاج الى معامل واحد هو المقبض المراد نسخه .
    كود PHP:
    <?php// create a new cURL resource
    $ch curl_init();

    // set URL and other appropriate options
    curl_setopt($chCURLOPT_URL'http://www.example.com/');
    curl_setopt($chCURLOPT_HEADER0);

    // copy the handle
    $ch2 curl_copy_handle($ch);

    // grab URL (http://www.example.com/) and pass it to the browser
    curl_exec($ch2);

    // close cURL resources, and free up system resources
    curl_close($ch2);
    curl_close($ch);
    ?>
    هنا تم نسخ المقبض ch الى المقبض ch2


    curl_error
    تستخدم لمعرفة تفاصيل آخر خطأ حدث وتحتاج الى معامل واحد هو المقبض الخاص بالجلسة .
    كود PHP:
    <?php// Create a curl handle to a non-existing location
    $ch curl_init('http://404.php.net/');
    curl_setopt($chCURLOPT_RETURNTRANSFERtrue);

    if(
    curl_exec($ch) === false)
    {
        echo 
    'Curl error: ' curl_error($ch);
    }
    else
    {
        echo 
    'Operation completed without any errors';
    }

    // Close handle
    curl_close($ch);
    ?>
    curl_errno
    تستخدم لمعرفة رقم آخر خطأ حدث وتحتاج لمعامل واحد وهو المقبض الخاص بالجلسه .
    كود PHP:
    <?php// Create a curl handle to a non-existing location
    $ch curl_init('http://404.php.net/');

    // Execute
    curl_setopt($chCURLOPT_RETURNTRANSFERtrue);
    curl_exec($ch);

    // Check if any error occured
    if(curl_errno($ch))
    {
        echo 
    'Curl error: ' curl_error($ch);
    }

    // Close handle
    curl_close($ch);
    ?>
    الداله curl_getinfo
    تستخدم الداله فى جلب بعض المعلومات عن الجلسه الحاليه
    تخرج لنا البيانات على هيئه مصفوفه تحتوى على البيانات التاليه :

    • "url"
    • "content_type"
    • "http_code"
    • "header_size"
    • "request_size"
    • "filetime"
    • "ssl_verify_result"
    • "redirect_count"
    • "total_time"
    • "namelookup_time"
    • "connect_time"
    • "pretransfer_time"
    • "size_upload"
    • "size_download"
    • "speed_download"
    • "speed_upload"
    • "download_content_length"
    • "upload_content_length"
    • "starttransfer_time"
    • "redirect_time"
    كود PHP:
    <?php// Create a curl handle to a non-existing location
    $ch curl_init('http://www.yahoo.com/');

    // Execute
    curl_exec($ch);

    // Check if any error occured
    if(!curl_errno($ch))
    {
        
    $info curl_getinfo($ch);

        echo 
    'Took ' $info['total_time'] . ' seconds to send a request to ' $info['url'];
    }

    // Close handle
    curl_close($ch);
    ?>
    ] مصادر curl :

    PHP: cURL - Manual
    cURL and libcurl

    الموضوع ليس اجتهاد شخصي و إنما منقول للفائدة و لأهميته في هذه اللغة

ضوابط المشاركة

  • لا تستطيع إضافة مواضيع جديدة
  • تستطيع الرد على المواضيع
  • لا تستطيع إرفاق ملفات
  • لا تستطيع تعديل مشاركاتك
  •