آموزش cURL در php

  • آپدیت شده در تاریخ

آموزش cURL در php

cURL یا همان Client URL library برای ارتباط بین سرور های مختلف با پروتکل های FTP (برای کار با فایل ها) ، HTTP (دیدن صفحات وب با مرورگر) ، telnet ، gopher و بیشتر استفاده می شود.

برای استفاده از تابع cURL در php ، حتما باید کتابخانه libcurl از قبل نصب شده باشد. اگر از هرکدام از پکیج هایی مثل XAMPP ، wamp  ، easyphp برای نصب محیط , mysql apache ، php استفاده کرده باشید ، پس می توانید مطمئن باشید که این کتابخانه از قبل نصب شده است.

همچنین همه سرور ها امروزه این پکیج را نصب دارند و با خیال راحت می توانید آموزش cURL در php را دنبال کنید

بعد از نصب cURL ، باید این extention را در فایل پیکربندی (php.ini) فعال کنید که برای لوکال هاست یا سرور اشتراکی شما نیاز به این تنظیمات نیست

کارهایی که با cURL در php میتوانیم انجام دهیم

برای دسترسی و مدیریت دسترسی به یک فایل از راه دور ، cURL به صورت میانجی استفاده می شود برای ،

  • Submit فرم
  • احراز هویت (Authentication)
  • آپلود فایل
  • انتقال فایل (FTP)

مثال : فرض کنید سایتی دارید که قصد دریافت اطلاعات بروز سکه ، ارز را از بانک یا سایت معتبر دریافت کنید یا آخرین ساعات پرواز و حرکت هواپیما ، قطار یا اینکه اطلاعات آب و هوا یا حتی نتایج بازی هایی مثل فوتبال و والیبال و غیره .. را در قسمتی از سایت خود یا حتی اپ اندروید برای کاربران نمایش دهید . اینجاست که باید از cURL استفاده کنید تا نتابج بروز و آپدیت شده و لحظه ای را نمایش بدید

بدون cURL در php ، می توانیم از تابع سیستمی خود php به اسم allow_url_fopen استفاده کنیم که بنا بر دلایل امنیتی (باگ File Inclusion) به هیچ عنوان توصیه نمی شود استفاده کرد.

برای مثال ، تابع file_get_contents() به صورت پیش فرض داده های نا امن را در خروجی بازگشت می دهد .

در پروژه یا اسکریپت هایتان برای اطمینان از فعال بودن cURL می توانید از شرط زیر قبلا از فراخوانی توابع زیرمجموعه curl_* بهره ببرید

بلاک cURL در php

در php ، قسمت cURL باید بین دو جفت تابع زیر قرار داده شوند.

  • تابع curl_init() سئشن مربوط به مدیریت url پاس داده شده را return می کند .
  • تابع curl_close() با بستن سئشن cURL در php بلاک کد crul را به پایان می رساند و منابع مصرف شده از حافظه (memory) را آزاد می کند

آپشن های cURL در php

تابع curl_setopt() برای ست کردن آپشن های درخواست curl برای یک صفحه استفاده می شود . این تابع هندلر curl (که در کد بالا داخل متغییر $ch ذخیره کردیم) ، اسم آپشن و مقدارشان را به عنوان پارامتر قبول می کند.

می توانیم از یک تابع curl دیگر به اسم curl_setop_array() برای ست کردن آرایه ای از چند آپشن بهره ببریم

ثابت (Constant) های آپشن cURL

  • CURLOPT_FILE – فایلی برای ذخیره نتیجه Curl
  • CURLOPT_URL – آدرس URLی که برای دریافت داده از آن ، نیاز داریم . اگر این url در curl_init() مشخص شده باشید ، نیازی به این آپشن ندارید
  • CURLOPT_RETURNTRANSFER – برگشت دادن نتیجه در قالب رشته برای ذخیره در متغییر بجای چاپ آن در مرورگر
  • CURLOTP_HTTPHEADER – ست کردن فیلد ها در قالب آرایه  (مناسب برای ارسال فرم)
  • CURLOPT_POST – برای ارسال داده با متد پست باید مقدار TRUE را ست کنید
  • CURLOPT_USERPWD – ست کردن نام کاربری / رمزعبور  اگر آدرس مورد نظر نیاز به احراز هویت داشت.

درخواست cURL در php

مانند php ، متد های POST و GET برای ارسال درخواست cURL استفاده می شوند که پیش فرض آنها GET است. ثابت CURLOPT_POST برای ارسال درخواست با متد POST استفاده می شود و پارامتر های CURLOPT_POSTFIELDS برای ارسال پارامتر آرایه ای از فیلد ها استفاده می شود.

اجرای درخواست cURL

بعد از ست کردن متد و پارامتر های درخواست (request) ، تابع curl_exec() برای اجرای درخواست cURL در php استفاده می شود

این تابع یک مقدار boolean (true, false ) یا رشته ای از داده های بر اساس مقادیر CURLOPT_RETURNTRANSFER برگشت (return) می دهد.

مثال cURL در php

کد php زیر تمام اطلاعات و کد های صفحه آدرس url مورد نظر را دریافت و نمایش می دهد .

برای کپی صحیح و کامل کدها ، دابل کلیک کرده تا وارد محیط سفید و کپی شوید در غیر اینصورت امکان دارد اجرای کدها با مشکل روبرو شود

مثال دوم : خواندن محتوای صفحه اول سایت (چندگانه)

  • curl_multi_init : مانند curl_init برای مقدار دهی اولیه Curl به صورت multihandler استفاده می شود .
  • curl_multi_add_handle : برای اضافه کردن چندین کانال به شی multihandler استفاده می شود .
  • curl_multi_getcontent : برای بازیابی محتوای پاسخ های ایجاد شده .

توضیح کدهای بالا :

  • ابتدا در خط ۳ آرایه ای سایت هایی که می خواهیم صفحه ی اول آنها با استفاده از Curl بازیابی شود داریم .
  • در خط ۱۲ شی multihandler را ایجاد می کنیم .
  • در خط ۱۵ به تعداد سایت هایی که داریم کانال هایی را ایجاد می کنیم این کانال ها خود در واقع دارای اطلاعات Curl های منفرد هستند .
  • در خط ۲۵ اون کانال هایی را که ایجاد کردیم به شی multihandler  اختصاص می دهیم .
  • در خط ۳۱ یکی یکی درخواست ها اجرا می شود و تا زمانی که نتیجه درخواست های اجرا شده Ok باشد آن ها را اجرا می کند ,  مقدار  خروجی آن را چاپ می کند , آن درخواست را از آرایه حدف می کند و سراغ درخواست بعدی می رود
  • و در آخر کار , تمام شی های مربوط به Curl را Close می کند .

بحث cURL در php بسیار گسترده ، پرکاربرد و جالب است که در این مقاله آموزشی به آن پرداختیم . هر گونه سوال و مشکلی در پیاده سازی کد ها داشتید از قسمت نظرات با ما در ارتباط باشید .

موفق باشید

حسن شفیعی توسعه دهنده وب و موبایل مدیر سایت علاقه خاصی به برنامه نویسی وب و موبایل دارم و هر روز تلاش می کنم به این حوزه مسلط تر شوم و اطلاعاتم را به شکل کاربردی برای علاقه مندان در وب به اشتراک بگذارم. اگر نیاز به برنامه نویس برای انجام پروژه و نوشتن اسکریپت های سمت وب, اپلیکیشن های اندروید و ios, پیدا کردن راه حل توسعه و غیره داشتید حتما از طریق تماس با ما/ واتساپ/ تلگرام بهم پیام بدید. برایتهیه هاست مطمین و پرسرعت کلیک کنید
مطالب زیر را حتما بخوانید
دیدگاه کاربران (۷۶)

نشانی ایمیل شما منتشر نخواهد شد. بخش‌های موردنیاز علامت‌گذاری شده‌اند *

  1. علیرضا ۶ خرداد ۱۴۰۱

    سلام جناب شفیعی
    قصد اسکرپ سایت tsetmc را دارم، با goutte و curl امتحان کردم ولی موفق نشدم، ممنون میشم اگه راهنمایی بفرمایین که ایراد کار از کجاست؟

    پاسخ
    1. حسن شفیعی ۷ خرداد ۱۴۰۱

      سلام.
      خود سایت وب سرویس برای گرفتن اطلاعات رو در اختیار شما قرار میده و نیاز به اسکرپ نیست

      دانلود کد php وب سرویس tsetmc
      http://members.tsetmc.com/Site.aspx?ParTree=111A12
      راهنمای کار با وب سرویس
      http://members.tsetmc.com/Site.aspx?ParTree=11141111

      پاسخ
  2. محمود ۳ فروردین ۱۴۰۱

    سلام وعرض ادب
    برای نمایش محتوی صفحه اول سایت دیجی کالا جواب نمیده.
    آیا راه دیگری برای این منظور وجود داره؟
    ممنون

    پاسخ
    1. حسن شفیعی ۳ فروردین ۱۴۰۱

      سلام. ممنون.
      در کامنت های این پست https://netparadis.com/extract-webpage-urls-php در موردشون کمی بحث شده ببینید از این کدها میتونید استفاده کنید یا نه.

      پاسخ
  3. علی ۱۳ اسفند ۱۴۰۰

    سلام وقتتون بخیر
    من در حال آموزش Php هستم
    میخوام بدونم برای اینکه موجودی محصولاتم با یک سایت دیگر به روز بشه از چه روشی باید استفاده کنم و چه مطالبی باید آموزش ببینم
    با تشکر <3

    پاسخ
    1. حسن شفیعی ۱۴ اسفند ۱۴۰۰

      سلام. ممنون
      کار با api رو یاد بگیرید
      https://netparadis.com/php-restful-web-service

      پاسخ
  4. آرزو محسنی ۳۰ بهمن ۱۴۰۰

    سلام. خسته نباشید. خیلی جامع بود، ازتون ممنونم
    ببخشید در این بخش : خواندن محتوای صفحه اول سایت (چندگانه) یک کدی قرار دادید برای استخراج اطلاعات چند سایت.
    داخل لوکال هاست کار میکنه. ولی داخل هاست سرور کار نمیکنه دلیلی داره ؟

    پاسخ
    1. حسن شفیعی ۳۰ بهمن ۱۴۰۰

      سلام ممنون.
      احتمالا بافر فعال نیست اول کد php بعد تگ

      پاسخ
      1. آرزو محسنی ۳۰ بهمن ۱۴۰۰

        ببخشید. این بافر رو باید از کجا فعال کرد؟ کدش چیه؟

        پاسخ
      2. حسن شفیعی ۱ اسفند ۱۴۰۰

        کد قبلی رو گفتم دیگه کافیه اول کد اینو اضافه کنید : ob_start();

        پاسخ
      3. آرزو محسنی ۱ اسفند ۱۴۰۰

        سلام ممنون بابت راهنمایی.
        من کد رو اضاف کردم ولی باز کار نکرد. نمیدونم چرا داخل هاست اصلی کار نمیکنه. ولی تو لوکال هاست کار میکنه ؟
        بازم ممنون که کمک کردین. واقعا سایتون عالی هست.

        پاسخ
      4. آرزو محسنی ۱ اسفند ۱۴۰۰

        سلام. به نظورتون میتونه مشکل از هاست باشه.
        مثلا curl_multi_init(); پشتیبانی نکنه و بخاطر همنون ، کد کار نکنه ؟

        پاسخ
      5. حسن شفیعی ۲ اسفند ۱۴۰۰

        سلام.
        بله تو بعضی سرور ها curl_multi_exec رو غیرفعال کردن و اجازه استفاده رو نمیدن

        پاسخ
  5. نگین ۲۷ آبان ۱۴۰۰

    سلام خسته نباشید . من خیلی مقاله هارو خوندن . سایت شما و مقاله شما خیلی خوب و کامل بود . دست خوش . ببخشید یک سوال داشتم . من برای استخراج اطلاعات از صفحه دسته بندی محصولات مشکل دارم . با curl_init() فقط میشه یک صفحه از اون دسته بندی رو گرفت و نمیشه پیمایش کرد و از صفحه های دیگه اون دسته بندی که برای مثال ۱ تا ۹ هست رو اطلاعاتش رو گرفت ؟ ممنون میشم بهم کمک کنید

    پاسخ
    1. حسن شفیعی ۲۷ آبان ۱۴۰۰

      سلام. ممنون.
      باید آرایه ای از این آدرس ها بسازید و بعد یک حلقه foreach برای اجرای جداگانه هر کدام از curl ایجاد کنید

      پاسخ
  6. علیرضا ۱۴ تیر ۱۴۰۰

    سلام وقت شما بخیر
    من یک افزونه خریدم که برای کارکرد درست آن نیاز به فعال سازی توابع زیرمجموعه curl_multi در هاستم می باشد. اما پشتیبان هاست میگه از لحاظ امنیتی دسترسی را مسدود کردند. آیا واقعا این تابع از لحاظ امنیتی خطرناک است و آیا جایگزینی برای این تابع است؟
    ممنون از راهنمایی تان،

    پاسخ
    1. حسن شفیعی ۱۴ تیر ۱۴۰۰

      سلام. ممنون.
      خیر از نظر امنیتی مشکلی نداره.
      هاست بهتری تهیه کنید :
      https://my.mihanwebhost.com/aff.php?aff=9801

      پاسخ
  7. آرزو ۸ تیر ۱۴۰۰

    سلام واقعا عالی بود .
    یک سوال داشتم . اگه بخواهیم با استفاده از curl چندین سایت رو استخراج کنیم اون موقع باید چیکار کرد . و در آخر هم چطوری این اطلاعات رو در متغیر های جدا گانه بریزیم . مثلا اطلاعات هر سایت داخل یک متغیر باشه. تا بتوان بخشی از اطلاعات اون صفحه رو با استفاده از کلاس به دست آورد و نمایش داد

    پاسخ
    1. حسن شفیعی ۹ تیر ۱۴۰۰

      سلام.
      از تابع curl_multi_init استفاده کنید:

      سایت خود php
      https://www.php.net/curl_multi_init
      و مثال کامل هم در این سایت هست کمی اسکرول کنید کد کامل استفاده رو قرار داده

      پاسخ
  8. ناهید ۲۰ خرداد ۱۴۰۰

    سلام کدی هست که برای همه سایت ها کارآمد باشد و بتوان اطلاعات اون صفحه سایت رو استخراج کرد ؟ بعضی از سایت ها مانع استخراج اطلاعات می شوند به خاطر اون گفتم. ممنون برای همه آموزش هاتون . منتظر جواب شما هستم

    پاسخ
    1. حسن شفیعی ۲۲ خرداد ۱۴۰۰

      سلام.
      خیر شما باید بیس قضیه رو یاد بگیرید تا بتونید طبق اون سایت کد رو تغییر بدید

      پاسخ
      1. ناهید ۲۲ خرداد ۱۴۰۰

        خب من می خواهم یک مقایسه قیمت در بین فروشگاه های مختلف ایجاد کنم مثل ترب . بعد قیمت رو بره از سایت اصلی بگیره و داخل برگه محصول من نمایش بده. قیمت ها هم به طور خودکار بروز بشون.
        به نظرتون واسه همچین کاری بهترین روش برای استخراج قیمت از فروشگاه مختلف چی می تونه باشد . ممنون که همیشه مارو یاری می کنید ؟

        پاسخ
      2. حسن شفیعی ۲۲ خرداد ۱۴۰۰

        ترب قیمت ها رو استخراج نمیکنه بلکه فروشنده ها یا مدیران فروشگاه این قیمت ها رو لحاظ می کنند.
        این روش استخراج scraping هست :
        https://netparadis.com/web-scraping-php/

        پاسخ
      3. ناهید ۲۳ خرداد ۱۴۰۰

        ممنون آقای شفیعی که راهنمایی کردین . تشکر

        پاسخ
  9. مهرداد ۱ اردیبهشت ۱۴۰۰

    سلام وقت بخیر
    من میخوام از این api برای دریافت اطلاعات ارز اسفاده کنم

    curl -X GET “https://gateway.accessban.com/public/web-service/list/price?format=json&limit=30&page=1” -H “accept: application/json” -H “Authorization: Bearer eyJ0eXAiOiJKV1QiLCJhbGciOiJIUzI1NiJ9.eyJpc3MiOiJodHRwczpcL1wvZ2F0ZXdheS5hY2Nlc3NiYW4uY29tXC9wdWJsaWMiLCJzdWIiOiIzNjdkMjExNi03MmQwLTVjNTItYjc3OS05NDBmMTBjMjljZTAiLCJpYXQiOjE2MTg5Mzc2MzcsImV4cCI6MTc3NjcwNDAzNywibmFtZSI6Ilx1MDY0NVx1MDY0OFx1MDY0Nlx1MDYyNyBcdTA2MjdcdTA2MmVcdTA2NDRcdTA2MjdcdTA2NDJcdTA2Y2MtMTIxNzgifQ.fIgbXgQppwOgVwR9BJxCe7_5RGnHSkOq5dw7rR6HGVI”

    ولی نمدونم چجوری باید از این لینک استفاده کنم
    چون سبک این لینک با لینکی که در آموزش ها بکار بردین متفاوته ممنون میشم راهنمایی کنید

    پاسخ
    1. حسن شفیعی ۱ اردیبهشت ۱۴۰۰

      سلام ممنون

      پاسخ
  10. محسن ۱ شهریور ۱۳۹۹

    سلام
    من میخوام یک سری فرم ساده را اتوماتیک پرکنم مثلا این فرم ارتباط
    https://site.com/contact-us
    از طریق curl اگه ممکنه توضیح بدید پر کردن اتوماتیک یک فرمی که مثلا چند فید نام و فامیل و تلفن داره کدش چه شکلی نوشته میشه
    ممنون

    پاسخ
    1. حسن شفیعی ۱ شهریور ۱۳۹۹

      سلام. فرم به اینصورت هست :
      form method=”post” id=”userForm” action=”https://SITE.com/contact-us”>
      پس باید با متد پست به این صفحه https://SITE.com/contact-us درخواست curl ارسال کنید
      مقادیری هم که باید به فرم ارسال کنید به اینصورت هست:

      که می بینید بصورت name مشخص شده که form[name] هست برای این فیلد و فیلد های دیگر هم این چنین هست.
      باید بصورت یک کویری استرینگ ارسال کنید به اینصورت
      curl_setopt($ch, CURLOPT_POSTFIELDS, $post_string);

      پس کد curl همان چیزی است که در پست گفته شده و فقط پارامتر بالا رو اضافه کنید و به جای post_string هم مقادیر فیلد با نام آنها رو بصورت آرایه تعریف و بعد http_build_query رو روش اجرا کنید تا کویری استرینگ بشه.

      $data = array(‘name’=>$name, ’email’=>$email);
      curl_setopt($ch, CURLOPT_POSTFIELDS, http_build_query($data));
      curl_setopt($ch, CURLOPT_POST, true);

      موفق باشید.

      پاسخ
  11. majid ۹ مرداد ۱۳۹۹

    سلام من هرکاری کردم اطلاعات سایت بورس http://www.tsetmc.com رو بخونم نشد سایت های عادی رو راحت واکشی می کنم ولی این سایت نه.دلیل خاصی داره؟

    پاسخ
    1. حسن شفیعی ۹ مرداد ۱۳۹۹

      سلام. بله از سمت خود سایت دسترسی به اطلاعات از طریق ربات ها رو بستند و بصورت عادی نمیتونید اطلاعاتشون رو بخونید

      پاسخ
      1. majid ۹ مرداد ۱۳۹۹

        تشکر
        راهی هست اینکار رو بشه انجام داد؟ یه اسکریپت python تووی گیت هاب دیدم اینکار رو کرده بود.

        پاسخ
      2. حسن شفیعی ۹ مرداد ۱۳۹۹

        خود سایت سرویس هایی رو برای استفاده از وب سرویس ارایه داده که این اسکریپت های پایتون هم از این استفاده می کنند
        http://www.tsetmc.com/Site.aspx?ParTree=111411&LnkIdn=51

        دانلود اسکریپت php :

        http://cdn.tsetmc.com/Site.aspx?ParTree=111A12

        پاسخ
  12. عادل ۲۹ تیر ۱۳۹۹

    من میخوام به این فرم ساده لاگین کنم https://*:*/home اما هر کار میکنم نمیشه میشه کدشو بدید .

    پاسخ
    1. حسن شفیعی ۲۹ تیر ۱۳۹۹

      سلام.
      بنده اطلاعی ندارم این چه فرمی هست.
      اگر متعلق به شما نیست بهتره بیخیال بشید و هیچ روش دورزدن یا بروت فورسی انجام ندید که لاگ گرفته میشه و ممکنه به دردسر بیوفتید.
      موفق باشید.

      پاسخ
  13. محمد ۲۴ خرداد ۱۳۹۹

    سلام وقت بخیر میخوام اطلاعات یکی از نماد های بورس رو بخونم ولی اطلاعات بهم ریخته ای برمیگردونه با curl و file_get_contents پیاده سازی کردم ولی نشده خروجی یک سری رشته های عجیب غریبه بنظر جلو ربات رو گرفتن چجوری میشه دورش زد ممنون میشم راهنمایی کنید

    پاسخ
    1. حسن شفیعی ۲۴ خرداد ۱۳۹۹

      سلام. ممنون.
      در کامنت های این پست https://netparadis.com/extract-webpage-urls-php در موردشون کمی بحث شده ببینید از این کدها میتونید برای بایپس استفاده کنید یا خیر.

      پاسخ
  14. amir ۱ اردیبهشت ۱۳۹۹

    سلام میخوام هر موقع در لینک: https://divar.ir/s/mashhad/real-estate آگهی ثبت شد اون آگهی هم داخل سایت من نمایش بده اینکار با کتابخانه simple_html_dom انجام دادم مشکلی که داشت این بود که فقط اخرین اگهی نمایش میده و اگهی های قدیم قابل نمایش نیست حالا راه حلی هستش که اگهی های قدیمی هم نمایش بدم یا اینکه داخل پایگاه دادم ذخیره کنم؟

    پاسخ
    1. حسن شفیعی ۱ اردیبهشت ۱۳۹۹

      سلام. به خاطر ساختار ajax است که بصورت lazy load هست و از api استفاده میشه که درخواست ارسال میشه و از اونجا خونده میشه.
      پس به api هدر با مقداری ارسال میشه و هر بار last-post-date آخرین اگهی خوانده میشه .

      پس نیاز نیست که از dom استفاده کنید به راحتی میشه api سایت دیوار رو روی سایت پیاده کرد و نیاز نیست هربار درخواست ارسال کنید ببینید آگهی جدیدی ثبت شده یا خیر.

      پاسخ
  15. مجتبی ۲۹ اسفند ۱۳۹۸

    سلام
    برای صحت سنجی پرداخت در مایکت داخل مستنداتش گفته اطلاعت زیر رو به این آدرس بفرستیم تا پاسخ بده :

    در سرویس زیر پارامتر‌های زیر را باید با مقادیر مناسب جایگزین نمایید:

    X-Access-Token: 650e0714-a4348-v475-a40-3f3ec5fcf001

    پارامتر {PACKAGE_NAME} برابر نام پکیج برنامه شماست: مثلا org.medrik.roosterwars

    پارامتر {SKU_ID} برابر نام محصول درون‌برنامه‌ای شما است: مثلا GEM2

    پارامتر {TOKEN} برابر توکن خرید درون‌برنامه‌ای است: مثلا ۰۹۲۱۸۱

    ————————————————— سرویس زیر باید درخواست بشه ——————————–

    [GET]
    [Header: X-Access-Token]

    https://developer.myket.ir/api/applications/{PAKCAGE_NAME}/purchases/products/{SKU_ID}/tokens
    /{TOKEN}
    من میخوام از curl استفاده کنم چطوری باید این کارو بکنم ممنون میشم ؟

    پاسخ
    1. حسن شفیعی ۳ فروردین ۱۳۹۹

      سلام. بنابر اطلاعاتی که دادید این کد برای اتصال به api مورد نظر می تونید استفاده کنید. با جایگزینی اطلاعات درستس و چند تست می توانید خروجی مناسب را دریافت کنید.

      موفق باشید.

      پاسخ
  16. امید ۲۲ اسفند ۱۳۹۸

    سلام آیا میشه با کمک curl ما سایتی رو ببینیم و آی پی مشتری نیفته و آی پی ای که میفته برای همین برنامه ی php باشه که curl رو توش استفاده کردیم ؟

    پاسخ
    1. حسن شفیعی ۲۲ اسفند ۱۳۹۸

      سلام. بله امکانش هست. با اجرای curl آدرس ip شما نمیفته و آدرس محل اجرای اسکریپت نمایش داده میشه

      پاسخ
      1. امید ۲۲ اسفند ۱۳۹۸

        میشه لطفا نمونه کدی قرار بدید که با اجرای اسکریپتش بشه یه سایتی رو نشون داد که آی پی مشتری نیفته لطفا کمک کنید

        پاسخ
      2. حسن شفیعی ۲۲ اسفند ۱۳۹۸

        کد مثال اول (مثال cURL در php) دقیقا همین کار را انجام میدهد و میتونید از این کد استفاده کنید. البته باید در هاست اجرا شود تا آیپی مشتری نمایش داده نشود

        پاسخ
      3. امید ۲۲ اسفند ۱۳۹۸

        آقای شفیعی تو کاری که از من خواسته شده گفتن که یه درخواستhttp رو که میدیم curl ، شامل هدر ها و بدنه هایی میباشد که این هدر هاو بدنه هارو curl میگیره و از خودش میفرسته به سرور اصلی حالا این هدر هارو چجوری باید بگیرم از درخواست مشتری و به curl بدم ؟

        پاسخ
      4. حسن شفیعی ۲۲ اسفند ۱۳۹۸

        متاسفانه دقیق نمیدونم به چه صورت دریافت میشه باید روی یک محیط تستی بررسی و کدنهایی بدست بیاد و توصیه میشه داکیومنت curl در سایت اصلی php.net رو مطالعه کنید

        پاسخ
  17. حسین ۲۹ شهریور ۱۳۹۸

    سلام حالتون خوبه؟
    با اجرای این کدها صفحه خالی بهم نشون میده.
    علت چیه؟
    include (‘simple_html_dom.php’);
    if(!extension_loaded(‘curl’)){
    exit(‘cURL Disabled On Your PHP Environment’);
    }
    $urls = array(
    ‘https://www.roocket.ir’,
    ‘https://www.google.com’,
    );
    $multi_handle = curl_multi_init();
    $chanels = array();
    foreach ($urls as $key => $url) {
    $chanels[$key] = curl_init();
    curl_setopt_array($chanels[$key], [
    CURLOPT_URL =>$url,
    CURLOPT_RETURNTRANSFER=>TRUE,
    CURLOPT_FOLLOWLOCATION =>TRUE,
    CURLOPT_SSL_VERIFYPEER =>TRUE
    ]);
    curl_multi_add_handle($multi_handle, $chanels[$key]);
    }
    $active = null;
    do {
    $status = curl_multi_exec($multi_handle, $active);
    } while ( $status == CURLM_OK && $active == CURLM_OK);
    foreach ($chanels as $chan) {
    echo curl_multi_getcontent($chan);

    curl_multi_remove_handle($multi_handle, $chan);
    curl_close($chan);
    }
    curl_multi_close($multi_handle);

    پاسخ
    1. حسن شفیعی ۳۱ شهریور ۱۳۹۸

      سلام ممنون.
      curl_multi_select کردن یادتون نره.
      لینک نمونه : https://www.php.net/manual/en/function.curl-multi-exec.php
      موفق باشید.

      پاسخ
  18. علیرضا ساجدی ۳۰ تیر ۱۳۹۸

    سلام من ب یک اروری برخوردم و تیکت زدم ب پشتیبان هاست گفتن ما نمی تونیم فعال کنیم خودتون باید با کد درستش کنید
    عکس ارور:http://s8.picofile.com/file/8367400634/2019_07_21_22_26_45.png

    پاسخ
    1. علیرضا ساجدی ۳۰ تیر ۱۳۹۸

      چطوری میتونم حلش کنم؟

      پاسخ
      1. حسن شفیعی ۳۰ تیر ۱۳۹۸

        سلام. باید از سمت هاست این مورد باز بشه. در غیراینصورت باید کدنویسی رو طور دیگه ای تغییر بدید که اگر زیاد به php مسلط نیستید نمیتونید کاری پیش ببرید و به این سادگی نمیشه از اینجا راهنمایی خاصی ارایه داد.
        اگر هاست داغون باشه میتونید یک فایل php.ini بسازید و disable_functions رو خالی کنید در غیر اینصورت با راه های معمول نمیشه چیزی رو دور زد
        به هر حال راحتتر هست که هاست خود را به یک هاست معتبر تغییر بدید.
        موفق باشید.

        پاسخ
      2. علیرضا ساجدی ۱۷ شهریور ۱۳۹۸

        ممنونم
        هاست رو تغییر دادم

        پاسخ
  19. اسماعیل ۲۴ تیر ۱۳۹۸

    سلام وقت بخیر
    ممنون و خدا قوت به خاطر آموزش و وقتی که میزارید
    بنده یه اسکریپت روی هاستم نصب کردم برای ارسال موزیک
    که موزیک ها رو از آدرس میگیره
    الان مشکلی دارم اینه که درخواست curl انجام نمیشه و فایلی تو هاست دانلود آپلود نمیشه
    مجبور شدم هاست دانلود عوض کنم بازم دریافتی تو هاست دانلود ندارم
    با هاست سایت هم صحبت کردم گفتن مشکلی از طرف ما نیست اگه هست از هاست دانلوده
    برای محدودیت curl هم گفتن تمام دسترسی های هاست شما باز هست و محدودیتی از طرف ما صورت نگرفته
    هاست و دریافتم هم از ایران هست نمیدونم مشکل از کجا هست

    پاسخ
    1. حسن شفیعی ۲۴ تیر ۱۳۹۸

      سلام. ممنون. خوشحالیم که مفید واقع شده.
      روی هاست مقصد یک اکانت ftp بسازید و از این سمت انتقال و دریافت و آپلود ها رو با این کانکشن انجام بدید
      اتصال به ftp در php
      موفق باشید.

      پاسخ
  20. ایمان ۱۰ خرداد ۱۳۹۸

    سلام
    کد کدوم خط میتونم متغیر یا سورس رو بگیرم (کجا باید داخل متغیر بریزم)؟
    و اینکه یکبار چاپ میکنه ، چیکار کنم خودش چاپ نکنه؟
    با تشکر از آموزش هاتون.

    پاسخ
    1. حسن شفیعی ۱۰ خرداد ۱۳۹۸

      سلام.
      محتوای برگشتی تابع curlRequest و توابع print و Echo یا var_dump خروجی رو چاپ می کنند.
      موفق باشید.

      پاسخ
  21. رضا ۱۲ اردیبهشت ۱۳۹۸

    ممنون از آموزش خوبتون
    یه سوالی که دارم چطوری کاری کنیم فقط روزی یک بار اجرا بشه

    پاسخ
    1. حسن شفیعی ۱۲ اردیبهشت ۱۳۹۸

      سلام. خوشحالیم که مفید واقع شده.
      با استفاده از قابلیت کرون جاب (cron job) در هاست اینکار را انجام بدید که در مقاله آموزش cron job بطور کامل آموزش داده شده.
      موفق باشید.

      پاسخ
      1. رضا ۱۲ اردیبهشت ۱۳۹۸

        من نمی خوام از کرون جاب استفاده بکنم و از کد زیر استفاده کردم حالا نمی دونم بهینه وهست یا خیر

        $active_date = $yp_options [‘yp_options_footer-layouts-date’];
        $current_time = current_time(‘YmdH’); )

        $active_date = date(‘Ymd’, strtotime($active_date. ‘ + 2 days’)).’03’;
        $curl = curl_init();
        curl_setopt_array($curl, array(
        CURLOPT_URL => “http://www.mysite.ir/api/method/get_license_product”,
        CURLOPT_RETURNTRANSFER => true,
        CURLOPT_CUSTOMREQUEST => “get”,
        CURLOPT_POSTFIELDS => “”,
        CURLOPT_TIMEOUT => 30,
        CURLOPT_HTTPHEADER => array(
        “Authorization: $yp_activator”,
        ),
        ));
        $response = curl_exec($curl);
        $err = curl_error($curl);
        curl_close($curl);

        حالا تو لوکال همچی درست کار میکنه ولی توی یه هاست رایگان تست کردم کار نکرد
        خود کرل تو هاست فعالا ولی AsynchDNS غیر فعال بود میتونه دلیلش از این باشه؟

        پاسخ
      2. حسن شفیعی ۱۲ اردیبهشت ۱۳۹۸

        بله امکانش هست بهتره از هاستینگ بپرسید تا ببینید همچین محدودیتی وجود دارد یا خیر چون هاست های رایگان به دلیل موارد امنیتی شدیدا محدود هستند.

        پاسخ
  22. bn ۵ فروردین ۱۳۹۸

    در اختیار گذاشتن اطلاعهات و آموزش هایی که حاصل نتایج و تلاش هایی است که خود کسب نموده اید که برای همه به نوعی کاربرد موفقیت آمیزی داشته باشد بسیار تحسین برانگیز است

    پاسخ
    1. حسن شفیعی ۵ فروردین ۱۳۹۸

      سلام.
      ممنونم. موفق باشید

      پاسخ
  23. ایمان ۵ اسفند ۱۳۹۷

    با سلام و احترام
    ممنونم که اموزش های رایگان رو در اختیار ما قرار میدهید.
    یک سوال داشتم ، من با روش file get contacts استفاده میکنم سورس اصلی سایت نمایش داده نمیشه و فکر کنم به خاطر کدهای js باشه.
    ممنون میشم این سایت رو بررسی کنید : http://www.sanarate.ir
    برای جدا سازی و گرفتن دلار به صورت regexr لازم دارم.
    ممنون میشم در این مورد راهنمایی کنید چطور سورس رو سالم بگیرم.
    با تشکر.

    پاسخ
    1. حسن شفیعی ۸ اسفند ۱۳۹۷

      سلام. بعضی وب سایت ها بنابه دلایلی این محدودیت ها رو روی سایت اعمال می کنند تا ربات ها نتونند به راحتی محتوای سایت رو اسکرپ کنند که شما باید بتونید به یک راحی این مورد رو دور بزنید مثلا میتونید از cURL و ست کردن چندین هدر مختلف محتوای سایت رو از طریق اسکریپت بخونید.
      توضیحات این پست رو می تونید مطالعه کنید : https://netparadis.com/extract-webpage-urls-php
      موفق باشید.

      پاسخ
  24. key net ۱۰ دی ۱۳۹۷

    سلام علیکم
    از اینکه وقت میذارید و با حاصوله جواب میدید بسیار ممنونم
    من می خوام یه فایل PHP درخواست بفرسته به:

    https://api.kavenegar.com/v1/613472435563797A3767733D/verify/lookup.json?receptor=09361234567&token=852596&template=myverification

    بعد پاسخ رو نشون بده
    ممنون میشم اگه کمکم کنید
    کلی توی مطالب سایت شما گشتم اما دقیق نتونستم درستش کنم

    پاسخ
    1. حسن شفیعی ۱۰ دی ۱۳۹۷

      سلام. خواهش می کنم. دقیقا همین مورد رو در آموزش
      ارسال و دریافت jSON توسط cURL در php
      ببینید
      موفق باشید.

      پاسخ
  25. دانیال ۱۳ آبان ۱۳۹۷

    خیلی ممنون که اینقدر زود جواب دادید از شما خیلی سپاس گذارم ولی اگر میشه یک آیدی تلگرام از خودتون بهم بدید من در این زمینه چند تا سوال داشتم ازتون خیلی ممنون

    پاسخ
    1. حسن شفیعی ۱۳ آبان ۱۳۹۷

      خواهش می کنم. اطلاعات تماس در بخس تماس باما ی سایت وجود دارد.

      پاسخ
  26. دانیال ۱۲ آبان ۱۳۹۷

    با سلام خیلی مننون بابت این آموزش ولی اگر میشه بگین چجوری ازین طریق لاگین کنیم ممنون میشم

    پاسخ
    1. حسن شفیعی ۱۳ آبان ۱۳۹۷

      سلام . خوشحالم که مفید واقع شده . کد زیر برای لاگین شدن با cURL است میتونید بررسی و استفاده کنید

      موفق باشید.

      پاسخ
  27. ارین وکیلی ۲ خرداد ۱۳۹۷

    سلام ممنون بابت اموزش
    به جای رشته کد
    file_get_contents(‘php://input’); //get all inputs
    تو curl کدی هست که بشه جای گزین کد بالا کرد ؟
    سرور هاستم file_get_contents رو بسته اما curl بازه

    پاسخ
    1. حسن شفیعی ۲ خرداد ۱۳۹۷

      سلام . خوشحالم مفید واقع شده .
      بله همین آموزش در مورد curl است که بصورت یک تابع میتونید استفاده کنید :

      و به اینصورت فراخوانی کنید :

      file_get_contents_curl("php://input");
      موفق باشید.

      پاسخ
      1. ارین وکیلی ۲ خرداد ۱۳۹۷

        ممنون هم بابت اینکه سریع جواب دادین
        هم سایت خوب و مفیدتون
        عالی بود

        پاسخ
      2. حسن شفیعی ۲ خرداد ۱۳۹۷

        خواهش می کنم. موفق و پیروز باشید.

        پاسخ
  28. وحید کاظمی ۱۳ اسفند ۱۳۹۶

    عالی بود

    پاسخ
    1. حسن شفیعی ۱۳ اسفند ۱۳۹۶

      خوشحالم که مفید بوده .
      موفق و پیروز باشید.

      پاسخ
دوره های آموزشی