یک سری توابع در زبان PHP از جاهای دیگه میتونن اطلاعات بخونن و دانلود کنن. مثلا تابع file_get_contents
که کارش اینه که یه فایل رو میخونه به یک متغیر از نوع استرینگ که این فایل میتونه ریموت و روی یه سرور دیگه باشه. یا مثلا تابع copy
میتونه یه فایل ریموت رو کپی کنه روی سرور شما. مشکلی که برای شخص من وجود داشت این بود که سرور من سرور ایران بود ولی محتوایی که میخواستم کپی کنم روی سرور خارجی ای که فیلتر بود هاست میشد و عملا عملیات کپی با تایم اوت مواجه میشد. برای حل این مشکل باید یه پروکسی رو روی درخواست کپی ست میکردم که فایل از طریق اون پروکسی کپی بشه.
تابع stream_context_create در PHP
برای ست کردن پروکسی میتونیم از تابع stream_context_create
استفاده کنیم. ساختار کلی این تابع بصورت زیر است:
stream_context_create ( array $options = ? , array $params = ? ) : resource
ورودی تابع آپشن و پارامتر هست و خروجی یه ریسورسی از نواع stream_context
که توی مثال درکشون میکنیم. به عنوان یک مثال ساده کد زیر رو در نظر بگیرید.
$auth = base64_encode('user:password');
$header = array("Authorization: Basic $auth");
$stream = stream_context_create([
'http' => [
'proxy' => 'proxy server', // For example : 209.127.191.180:9279
'request_fulluri' => true,
'header' => "Proxy-Authorization: Basic $auth",
]
]);
اینجا ما یوزر و پسورد و آدرس پروکسی رو مشخص کردیم و به تابع دادیم و بهمون یه استریم جدید داده که میتونیم توی توابعی که گفتم ازشون استفاده کنیم. بعنوان مثال توی تابع copy بصورت زیر عمل میکنیم.
copy($remote, $local, $stream);
تابع بالا عملیات کپی رو با پروکسی انجام میده.