Stream Context در PHP چیست؟
Stream Context در PHP یک راهکار قدرتمند برای پیکربندی و مدیریت جریانهای داده (Streams) است. در PHP، Streams یا جریانها ابزارهایی هستند که به شما اجازه میدهند دادهها را از منابع مختلف مانند فایلها، URLها، یا پروتکلهای شبکه بخوانید یا به آنها بنویسید. استفاده از Stream Context به شما این امکان را میدهد که تنظیمات خاصی را برای جریانهای داده اعمال کنید، مانند تنظیم هدرهای HTTP، مشخص کردن تایماوتها، مدیریت پروکسیها، و بسیاری از گزینههای دیگر.
فهرست مطالب
Stream Context به زبان ساده
- درخواست HTTP با تنظیم هدرها
- تنظیم تایماوت برای جریانها
- استفاده از پروکسی
Stream Context به زبان ساده
Stream Context
در PHP یک ابزار داخلی است که به شما اجازه میدهد درخواستهای HTTP، FTP، و پروتکلهای دیگر را مدیریت و سفارشی کنید. این ابزار با توابعی مثل file_get_contents
یا fopen
استفاده میشود تا بتوانید تنظیمات و گزینههای خاصی را برای درخواستها تعریف کنید.
کاربرد اصلی Stream Context
:
- ارسال درخواستهای HTTP با تنظیمات سفارشی.
- تنظیم هدرها، متد درخواست (مثل
GET
یاPOST
) و دیگر پارامترها برای درخواستها.
مثال ساده:
$options = [
'http' => [
'method' => 'GET',
'header' => 'Content-type: application/json',
]
];
$context = stream_context_create($options);
$response = file_get_contents('https://example.com/api', false, $context);
echo $response;
در این مثال، با استفاده از stream_context_create
، یک درخواست HTTP با هدر خاص ارسال میشود.
تفاوت با cURL
:
- پیچیدگی و انعطافپذیری:
cURL
معمولاً برای درخواستهای پیچیدهتر (مثل استفاده از کوکیها، دنبال کردن ریدایرکتها، ارسال فایل و غیره) مناسبتر و انعطافپذیرتر است.Stream Context
به طور پیشفرض سادهتر و مناسب برای درخواستهای پایهای است. - کارایی:
cURL
یک کتابخانه خارجی است که باید روی سرور نصب شود، در حالی کهStream Context
یک ابزار داخلی PHP است و نیازی به نصب ندارد. - سازگاری: اگرچه هر دو روش به خوبی برای مدیریت درخواستهای HTTP استفاده میشوند،
cURL
سازگاری بیشتری با پروتکلها و گزینههای خاص دارد و به طور گستردهتری در پروژههای پیچیدهتر استفاده میشود.
Stream Context چیست؟ راهنمای جامع
در PHP، Stream Context به شما این امکان را میدهد که پارامترهای خاصی را برای یک جریان داده (مانند فایل، URL، یا پروتکل شبکه) تنظیم کنید. این پارامترها در قالب یک آرایهی تنظیمات تعریف شده و به عنوان بخشی از Stream Context به جریان مرتبط میشوند. با استفاده از Stream Context، شما میتوانید رفتار یک درخواست HTTP، ارسال دادهها به یک API، یا خواندن و نوشتن در فایلها را کنترل کنید.
نحوه ایجاد یک Stream Context در PHP
برای ایجاد یک Stream Context در PHP، از تابع stream_context_create()
استفاده میشود. این تابع یک آرایه از پارامترها را به عنوان ورودی دریافت کرده و یک Context Resource ایجاد میکند که میتواند در جریانهای مختلف استفاده شود.
<?php
// تنظیمات برای Context
$options = [
'http' => [
'method' => 'GET',
'header' => 'Content-Type: application/json',
'timeout' => 10
]
];
// ایجاد یک Stream Context
$context = stream_context_create($options);
?>
توضیح: در این مثال، تنظیمات HTTP شامل method
(روش درخواست)، header
(هدرهای HTTP)، و timeout
(تایماوت) تعریف شدهاند.
مثالهای کاربردی از Stream Context
درخواست HTTP با تنظیم هدرها
با استفاده از Stream Context، میتوانید هدرهای خاصی را به درخواست HTTP اضافه کنید. در مثال زیر، از یک درخواست HTTP با تنظیمات هدر استفاده شده است:
<?php
// تنظیمات HTTP
$options = [
'http' => [
'method' => 'POST',
'header' => "Content-Type: application/json\r\n" .
"Authorization: Bearer your_api_token",
'content' => json_encode(['key' => 'value'])
]
];
// ایجاد Context
$context = stream_context_create($options);
// ارسال درخواست به URL با استفاده از Context
$response = file_get_contents('https://api.example.com/endpoint', false, $context);
// نمایش پاسخ
echo $response;
?>
توضیح مثال: در این مثال، یک درخواست POST به یک API ارسال شده و هدرهای Content-Type
و Authorization
تنظیم شدهاند. همچنین، دادهها به صورت JSON در پارامتر content
ارسال شدهاند.
تنظیم تایماوت برای جریانها
میتوانید تایماوت برای خواندن یا نوشتن در یک جریان را تنظیم کنید تا در صورت بروز تاخیر، درخواست متوقف شود.
<?php
$options = [
'http' => [
'timeout' => 5 // تایماوت به ثانیه
]
];
// ایجاد Context
$context = stream_context_create($options);
// تلاش برای باز کردن یک URL با تایماوت مشخص
$data = file_get_contents('https://example.com', false, $context);
echo $data;
?>
توضیح مثال: در این مثال، تایماوت به ۵ ثانیه تنظیم شده است، به این معنی که اگر سرور در این مدت زمان پاسخ ندهد، عملیات متوقف میشود.
استفاده از پروکسی
میتوانید درخواستهای HTTP خود را از طریق یک پروکسی ارسال کنید. این کار با تنظیم گزینه proxy
در Stream Context انجام میشود.
<?php
$options = [
'http' => [
'proxy' => 'tcp://proxy.example.com:8080',
'request_fulluri' => true,
'method' => 'GET',
'header' => "User-Agent: PHP Stream"
]
];
// ایجاد Context
$context = stream_context_create($options);
// ارسال درخواست با استفاده از پروکسی
$response = file_get_contents('https://example.com', false, $context);
echo $response;
?>
توضیح مثال: در این مثال، از یک پروکسی با آدرس proxy.example.com
و پورت 8080
برای ارسال درخواست استفاده شده است.
پارامترهای رایج در Stream Context
- http
- method: مشخص کردن نوع درخواست (GET, POST, PUT, DELETE).
- header: تنظیم هدرهای HTTP.
- content: محتوایی که باید با درخواست ارسال شود (معمولاً برای درخواستهای POST و PUT).
- timeout: مدت زمان تایماوت برای درخواستها.
- proxy: آدرس پروکسی برای ارسال درخواست از طریق آن.
- request_fulluri: اگر
true
باشد، URI کامل در درخواست ارسال میشود. - ssl
- verify_peer: بررسی اعتبار گواهینامه SSL.
- verify_peer_name: بررسی نام دامنه در گواهینامه SSL.
- cafile: مسیر به فایل گواهینامه CA برای بررسی SSL.
- ftp
- overwrite: اگر
true
باشد، فایل موجود در مقصد بازنویسی میشود. - resume_pos: از سرگیری انتقال فایل از مکان مشخص.
- proxy: آدرس پروکسی برای پروتکل FTP.
جمعبندی
Stream Context در PHP ابزار قدرتمندی است که به شما امکان میدهد تا جریانهای داده را با دقت کنترل کنید. این قابلیت به شما این امکان را میدهد تا درخواستهای HTTP پیچیدهتری ارسال کنید، هدرهای HTTP را مدیریت کنید، از پروکسیها استفاده کنید، و تایماوتها را تنظیم کنید. با استفاده از Stream Context، میتوانید به راحتی با APIها ارتباط برقرار کنید و دادههای مورد نیاز خود را از منابع مختلف دریافت یا به آنها ارسال کنید.
لینکهای پیشنهادی برای مطالعه بیشتر: