cURL بسته ای است به صورت Extension که برروی PHP نصب می گردد و قابلیت اتصال از طریق URL توسط متدهای GET,POST,... را برقرار می کند.
در واقع cURL یک ابزار خط فرمان جهت انتقال فایلها بر اساس URL است. چیزی که cURL را قدرتمند میکند تعداد پروتکل هایی است که این کتابخانه از آنها پشتیبانی میکند که شامل FTP, FTPS, HTTP, HTTPS, TFTP, SCP, SFTP, Telnet, DICT, FILE و LDAP است.cURLمخفف کلمه Client for URLs است.
Daniel Stenberg این کتابخانه را در سال 1997 شروع کرد و بوسیله آن انتقال فایل با پروتکل هایی مانند HTTP, FTP و غیره را بوسیله خط فرمان امکان ساخت..
cURL در PHP
PHP در نسخه 4.0.2 کتابخانه cURL را به خود اضافه کرد، تا از طریق این کتابخانه بتواند اطلاعات را از طریق URL جا به جا کند. برای مثال با استفاده از cURL میتوانید اطلاعات یک وبسایت را بخوانید، به صورت خودکار لاگین کنید، در سایت های دیگر فایل آپلود کنید و خیلی کارهای دیگر.
اما بعضی از اینکارها را هم شاید بتوان با توابع خود PHP مانند file_get_contents انجام داد، اما ابتدا نیاز دارید که گزینه allow_url_fopen در فایل php.ini در سرور شما فعال باشد، و از آنجایی که بیشتر سرورها برای افزایش امنیت این گزینه را غیر فعال میکنند تنها را شما یادگیری و استفاده از cURL است.
مثال از cURL
cURL به صورت پیشفرض بر روی Apache نصب نیست و اگر میخواهید از این کتابخانه بر روی localhost سیستم استفاده کنید ابتدا باید آن را فعال کنید. برای نحوه فعال سازی میتوانید از این مطلب استفاده کنید.
در یک مثال ساده ابتدا ما یک صفحه یک سایت را گرفته و نمایش میدهیم، با استفاده از کد زیر:
$ch = curl_init("http://www.google.com");
curl_setopt($ch, CURLOPT_RETURNTRANSFER, TRUE);
$google = curl_exec($ch);
echo $google;
curl_close($ch);
در خط 1 ابتدا با استفاده از تابع curl_init یک دستگیره (Handle) از آدرس موردنظر میگیریم. سپس در خط 2 با استفاده از تابع curl_setopt مشخص میکنیم که ما میخواهیم اطلاعات بازگشت داده شوند به جای اینکه نمایش داده شوند.
تابع curl_setopt برای اعمال تنظیماتی (Set Option) بر روی سشن موردنظر است. در این مثال ما با استفاده از TRUE کردن مقدار CURLOPT_RETURNTRANSFER به cURL میگوییم که قصد نمایش اطلاعات را نداریم. میتوانید تمامی Optionها را در PHP Manual ببینید.
در خط 3 با استفاده از تابع curl_exec دستورات را اجرا میکنیم، و در خط 5 با تابع curl_close سشن موردنظر را میبندیم.
در خط 4 برای دیدن اینکه واقعا چه چیزی اتفاق افتاده است دستور echo را انجام داده ایم، حالا میتوانید آن چیزی که از سایت مورد نظر لازم دارید استخراج کنید.
اگر دستورات بالا را اجرا کنید خواهید دید که سایت مورد نظر نمایش داده میشود.
اما این یک مثال ساده بود، مثال بالا را میتوانید با تابع file_get_contents هم انجام دهید.
قدرت cURL در تابع curl_setopt است، با استفاده از این تابع چیزی که دقیقا میخواهید را میتوانید پیاده سازی کنید.
در یک مثال دیگر در نظر بگیرید صفحه ای از سایتی (page2.php) را که در صورتی برای شما باز خواهد شد که شما از یک صفحه خاص (page1.php) به آن متصل شده باشید.
در واقع page2.php چک میکند که مقدار HTTP_REFERER شما صفحه page1.php باشد. خوب اگر قرار باشد که ما صفحه page2.php را باز کنیم باید مقدار HTTP_REFERER را برابر page1.php قرار دهیم. که برای اینکار باز هم از تابع curl_setopt استفاده میکنیم.
$ch = curl_init("http://example.com/page2.php");
curl_setopt($ch, CURLOPT_RETURNTRANSFER, TRUE);
curl_setopt($ch, CURLOPT_REFERER, "http://exapmle.com/page1.php");
$page = curl_exec($ch);
curl_close($ch);