برنامه نویسی

ارسال پارامتر به URL و دریافت مقادیر با PHP

امتیاز کاربران

ستاره فعالستاره فعالستاره فعالستاره غیر فعالستاره غیر فعال
 

زمانی که از ارسال پارامتر در وب صحبت می کنیم، بیشتر ذهنمان معطوف به فرم های HTML و متد POST یا GET می شود، البته این شیوه مرسوم و پرکاربردی برای ارسال داده ها از مرورگر (سمت کاربر) به یک سایت (سمت سرور) است، اما گاهی مواقع نیاز است که از این قالب سنتی پا را فراتر بنهیم و از روش های دیگری نیز استفاده کنیم،

به فرض از همین استاندارد POST و GET در ارسال درخواست های آژاکسی (Ajax) نیز به سرور استفاده می شود، از طرفی کدها و توابعی در PHP وجود دارد که می توانند علاوه بر ارسال پارامترها به یک سرور (آدرس URL)، پاسخ آن را نیز دریافت کنند، امکان بالقوه ای که می تواند کاربردهای زیادی داشته باشد، از جمله مهمترین این توابع file_get_contents و cURL هستند که در ادامه آموزش به آنها خواهیم پرداخت.

تابع file_get_contents


از تابع file_get_contents در PHP برای خواند اطلاعات یک فایل یا آدرس URL استفاده می شود، به عنوان مثال:

<?php
$homepage = file_get_contents('https://hellodigi.ir/');
echo $homepage;
?>

کد بالا با ارسال یک درخواست به آدرس تعیین شده، پاسخ سرور (که صفحه اول سایت «سلام دیجی» است) را به صورت رشته متنی دریافت می کند، اکنون اگر با دستور echo از متغیر فرضی homepage خروجی بگیریم، اطلاعات دریافت شده نمایش داده می شوند.
تابع file_get_contents  پنج آرگومان به شرح زیر می پذیرد:
- آرگومان اول (filename): نام (یا آدرس) فایل یا URL.
- آرگومان دوم (use_include_path): فراخوانی فایل از دایرکتوری include_path در تنظیمات PHP.
- آرگومان سوم (context): محتوایی که به همراه درخواست ارسال می شود، این محتوا باید توسط تابع  stream_context_create (و بر اساس استانداردهای HTTP context options) ساخته شود تا معتبر باشد، تنظیمات قابل اعمال در این قسمت عبارتند از: method، header، user_agent، content، proxy، request_fulluri، follow_location، max_redirects، protocol_version، timeout و ignore_errors؛ اطلاعات بیشتر:

http://php.net/manual/en/context.http.php

- آرگومان چهارم (offset): محل و خط شروع خواندن اطلاعات (این قابلیت به دلیل پشتیبانی نشدن برای فایل های لوکال و محدودیت هایش، چندان کاربردی نیست).
- آرگومان پنجم (maxlen): حداکثر کاراکتری که تابع خواهد خواند (در حالت پیش فرض تمام اطلاعات خوانده می شود).

تابع file_get_contents و متد POST


تابع file_get_contents علاوه بر دریافت پاسخ یک سرور، این توانایی را دارد که در چاچوب متد POST پارامترهایی نیز به سرور مقصد ارسال نماید، همان طور که در توضیح آرگومان های آن گفته شد، این پارامترها باید در چارچوب استاندارد HTTP بوده و پیش از ارسال توسط تابع stream_context_create معتبر شوند، به این ترتیب می توان نحوه کار فرم های HTML را به راحتی شبیه سازی کرد، ضمن اینکه علاوه بر ارسال پارامترها، می توان هم زمان نتیجه درخواست را نیز دریافت کرد، به مثال زیر توجه کنید.

<?php
//مقادیری که باید ارسال شوند
$data = http_build_query(
    array(
    'var_1' => 'content_1',
    'var_2' => 'content_2',
    'var_3' => 'content_3'
    )
);
//تنظیم سربرگ های http
$http = array('http' =>
    array(
    'method'  => 'POST',
    'header'  => 'Content-type: application/x-www-form-urlencoded',
    'content' => $data
    )
);
//معتبر سازی با stream_context_create
$context = stream_context_create($http);
//ارسال درخواست و دریافت نتیجه
$result = file_get_contents('http://www.example.com/submit/get.php', FALSE, $context);
?>

نکته: برای نمایش نتیجه دریافتی می توانید از یک دستور ساده echo استفاده کرده و از متغیر result خروجی بگیرید.

تابع cURL


یکی از قدرتمند ترین کتابخانه های مربوط به کار با پروتکل های وب در PHP، کتابخانه libcurl است که از نسخه 4.0.2 به آن افزوده شده است، البته این کتابخه به صورت پیش فرض در مفسر PHP وجود ندارد، اما به جهت کاربردی بودن، معمولا در اکثر سرورها به صورت پیش فرض فعال است، به طور ساده کتابخانه libcurl دربرگیرنده مجموعه توابعی است که کار با پروتکل های وب (از جمله HTTPS، HTTP، FTP و...) را به صورت حرفه ای و با قابلیت های زیاد ممکن می کند، به مثال زیر توجه کنید.

<?php
$content = 'PHP cURL';
$curl = curl_init('http://www.example.com/submit/get.php');
curl_setopt($curl, CURLOPT_POST, 1);
curl_setopt($curl, CURLOPT_POSTFIELDS, 'var='.$content);
curl_setopt($curl, CURLOPT_RETURNTRANSFER, FALSE);
$result = curl_exec($curl);
curl_close($curl);
?>

همان طور که در مثال بالا مشخص است، توابع مربوط به این کتابخانه با پیشوند _curl شروع می شوند، اما توضیح مختصری درباره برخی توابع این کتابخانه:
- تابع curl_init: با دریافت یک آدرس url، نشست cURL را آغاز می کند.
- تابع curl_setopt: تنظیم پارامترهای مورد نیاز برای اجرای صحیح یک نشست cURL.
- تابع curl_exec: اجرای یک نشست cURL.
- تابع curl_close: پایان یک نشست cURL. 
- تابع curl_error: آخرین خطای رخ داده در نشست را نمایش می دهد.
- تابع curl_errno: شماره خطای برگردانده شده را نمایش می دهد.
البته توابع مربوط به این کتابخانه محدود به موارد گفته شده نمی شود:

http://www.php.net/manual/en/book.curl.php

به مثالی کاربردی توجه کنید.

<?php
//تنظیم آدرس url
$curl = curl_init('http://www.example.com/submit/get.php');
//تنظیم ارسال از طریق متد POST
curl_setopt($curl, CURLOPT_POST, 1);
//تنظیم پارامترها
curl_setopt($curl, CURLOPT_POSTFIELDS, 'var_1=content_1&var_2=content_2&var_3=content_3');
//تعین اینکه پاسخ سرور دریافت شود یا خیر
curl_setopt($curl, CURLOPT_RETURNTRANSFER, TRUE);
//اجرای نشست
$result = curl_exec($curl);
//پایان نشست
curl_close($curl);
?>

توضیح:
- آدرس url مقصد را در قسمت curl_init مشخص کنید.
- در تنظیمات مربوط به CURLOPT_POST، متد استفاده شده در درخواست را مشخص می کنیم، اگر مقدار 1 یا TRUE باشد، مقادیر CURLOPT_POSTFIELDS از طریق متد POST ارسال شده و پارامترهای احتمالی در آدرس URL نادیده گرفته می شوند (امکان ترکیب متد POST و GET در این حالت وجود ندارد).
- در تنظیمات قسمت CURLOPT_POSTFIELDS، پارامترها و مقادیر آنها را تعیین کنید، این پارامترها در واقع نقش نام فیلد و مقادیر آنها نقش مقدار فیلد را در یک فرم HTML بازی می کنند.
- در قسمت CURLOPT_RETURNTRANSFER، مشخص می کنیم که آیا پاسخ سرور نیز پس از ارسال درخواست دریافت شود یا خیر، اگر مقدار TRUE باشد، پاسخ به صورت رشته متنی دریافت می شود و اگر FALSE باشد، پاسخ دریافت نمی شود.
- برای تکمیل یک نشست cURL باید حتما با تابع curl_exec آن را اجرا کنیم.
- در نهایت نیز با تابع curl_close، نشست cURL را خاتمه می دهیم.
نکته: برای نمایش نتیجه دریافتی می توانید از یک دستور ساده echo استفاده کرده و از متغیر result خروجی بگیرید.

تمام حقوق سایت برای سلام دیجی و نويسندگان آن محفوظ می باشد