pfsockopen
تابع «pfsockopen» یک اتصال پایدار (Persistent Connection) می سازد. اتصال پایدار یعنی بعد از پایان اسکریپت، اتصال بسته نمی شود. این کار شبیه نگه داشتن چت بازی باز است، تا دوباره وصل نشوی.
pfsockopen چیست؟
pfsockopen یک «سوکت (Socket)» پایدار باز می کند. سوکت راه ارتباطی شبکه است. این تابع تقریباً مثل fsockopen است، اما اتصال را نگه می دارد. بنابراین درخواست های بعدی سریع تر می شوند.
آرگومان ها
- hostname: نام میزبان یا پیشوند ssl:// یا tls://.
- port: شماره پورت؛ برای unix:// مقدار -1 بده.
- errno: کد خطای سیستم.
- errstr: متن خطای خوانا.
- timeout: زمان انتظار اتصال بر حسب ثانیه.
نکته: خروجی یک «اشاره گر فایل» است. می توانی با fgets، fwrite و fclose کار کنی.
نمونه کد: درخواست HTTP با اتصال پایدار
<?php
$errno = 0;
$errstr = "";
$fp = pfsockopen("www.w3schools.com", 80, $errno, $errstr, 20);
if ($fp === false) {
echo $errstr . " (" . $errno . ")";
} else {
$out = "GET / HTTP/1.1\n";
$out .= "Host: www.w3schools.com\n";
$out .= "Connection: Close\n\n";
fwrite($fp, $out);
while (!feof($fp)) {
echo fgets($fp, 128);
}
fclose($fp);
}
?>
نمونه: اتصال امن با SSL
<?php
$errno = 0;
$errstr = "";
$fp = pfsockopen("ssl://www.w3schools.com", 443, $errno, $errstr, 20);
if ($fp !== false) {
fwrite($fp, "GET / HTTP/1.1\n");
fwrite($fp, "Host: www.w3schools.com\n\n");
echo fgets($fp, 256);
fclose($fp);
}
?>
تفاوت با fsockopen
fsockopen اتصال عادی می سازد و پس از اسکریپت بسته می شود. اما اتصال پایدار pfsockopen باز می ماند. این برای درخواست های تکراری مفید است.
گام های عملی
- hostname و پورت مناسب را انتخاب کن.
- timeout منطقی تنظیم کن؛ مثلاً 20 ثانیه.
- با pfsockopen وصل شو و خطاها را بگیر.
- درخواست را با fwrite بفرست.
- پاسخ را با fgets بخوان و در پایان ببند.
جمع بندی سریع
- pfsockopen اتصال پایدار می سازد.
- ssl:// و tls:// برای اتصال امن است.
- خروجی، اشاره گر فایل قابل خواندن است.
- برای unix:// از پورت -1 استفاده کن.
- در خطاها از errno و errstr کمک بگیر.