3- php://stdin
این استریم نمایانگر ورودی استاندارد (STDIN) فرایند PHP است. در محیط خط فرمان (CLI)، php://stdin همان دادهای است که از کاربر یا از ورودی pipeline دریافت میشود.
در اسکریپتهای PHP CLI که نیاز به خواندن ورودی کاربر از کنسول یا دادههای piped از فرمان دیگر دارند، میتوان این استریم را به کار برد. به عنوان مثال، برنامهای که منتظر میماند کاربر در ترمینال متنی وارد کند یا نتیجه اجرای یک دستور دیگر را از طریق pipe دریافت کند.
$fp = fopen("php://stdin", "r");
echo "Enter Your name: ";
$inputLine = fgets($fp);
echo $inputLine;
fclose($fp);این اسکریپت ابتدا پیغام درخواست ورودی را در کنسول نمایش میدهد. سپس با fopen استریم را باز کرده و با fgets یک خط از آن میخواند (منتظر میماند تا کاربر یک خط متن وارد کرده و Enter بزند). در نهایت همان خط را مجدداً در خروجی نمایش میدهد.
این استریم فقط خواندنی است و مخصوص محیطهای تعاملی یا ورودیهای خط فرمان میباشد (در حالت اجرای وب معمولاً کاربردی ندارد).
———
4- php://stdout
این استریم معادل خروجی استاندارد (STDOUT) در PHP است. در حالت CLI، هر چیزی که به php://stdout نوشته شود در کنسول به نمایش در میآید (مشابه عملکرد echo).
بیشتر در اسکریپتهای خط فرمان کاربرد دارد، زمانی که بخواهید به صورت صریح به STDOUT بنویسید. هرچند در عمل استفاده مستقیم از php://stdout تفاوتی با php://output (در حالت CLI) ندارد، اما ممکن است برای شفافسازی منظور یا برای کدنویسی سیستمهایی که مستقیماً با توصیفگرهای STDOUT کار میکنند، استفاده شود.
$fp = fopen("php://stdout", "w");
fwrite($fp, "Test message on STDOUT");
fclose($fp);اجرای این کد در محیط خط فرمان، متن "Test message on STDOUT" را در خروجی ترمینال نمایش میدهد. این همان خروجی استاندارد برنامه است.
توجه کنید که در محیط وب (مثلاً اجرای PHP از طریق Apache یا Nginx)، STDOUT همان خروجی HTML ارسالی به مرورگر است، لذا php://stdout در آن context معادل php://output عمل میکند.
———
5- php://stderr
این استریم متناظر با خروجی خطا (STDERR) در PHP است. STDOUT و STDERR هر دو خروجی هستند اما به طور مجزا مدیریت میشوند؛ معمولاً STDOUT برای خروجی معمول برنامه و STDERR برای پیامهای خطا یا لاگ خطاها استفاده میشود.
در اسکریپتهای CLI یا محیطهایی که میخواهید پیامهای خطا را جدا از خروجی معمول ارسال کنید. برای مثال، میتوانید لاگ خطا یا هشدارها را به این استریم بنویسید تا در کنسول یا لاگ سرور به عنوان خطا ثبت شوند، بدون اینکه جریان عادی خروجی (STDOUT) را مختل کنند.
$fp = fopen("php://stderr", "w");
fwrite($fp, "Err: Not found!");
fclose($fp);این قطعه کد در محیط خط فرمان، متن خطا را به STDERR میفرستد. در نتیجه اگر برنامه را اجرا کنید، پیغام "Err: Not found!" به عنوان خروجی خطا ثبت میشود (در ترمینال معمولاً با رنگ قرمز یا در جریان مجزا نمایش داده میشود).
در حالت وب، محتوایی که به آن نوشته شود توسط وبسرور ممکن است در لاگ خطای سرور ثبت گردد.
———
6- php://memory
این استریم یک فضای حافظه موقتی در RAM ایجاد میکند که میتوان مانند یک فایل با آن رفتار کرد. تمام دادههایی که در php://memory نوشته میشوند، در حافظه RAM ذخیره میشوند. هنگامی که نیاز دارید یک رشته یا داده حجیم را موقتاً مانند یک فایل مدیریت کنید اما نمیخواهید روی دیسک نوشته شود.
برای مثال تولید محتوای پویا (مثل ایجاد یک فایل CSV در حافظه و سپس ارائه آن برای دانلود) یا جمعآوری خروجیهای متعدد و سپس پردازش یا ارسال آن. مزیت استفاده از حافظه این است که عملیات سریعتر است (عدم نیاز به دیسک) البته به میزان حافظهٔ قابل دسترس PHP محدود است.
$fp = fopen("php://memory", "r+");
fwrite($fp, "Foo");
fwrite($fp, "Bar");
rewind($fp);
echo stream_get_contents($fp); // FooBar
fclose($fp);در این مثال، ابتدا یک استریم حافظه باز میکنیم (r+ به معنی خواندن/نوشتن). سپس دو رشته "Foo" و "Bar" در آن نوشته میشود. با rewind مکان فایل را به ابتدای حافظه برمیگردانیم و با stream_get_contents کل محتوا را میخوانیم؛ حاصل رشتهٔ "FooBar" است که نشان میدهد دادهها با موفقیت در حافظه جمعآوری شدهاند.
تمام این عملیات بدون نوشتن حتی یک بایت روی دیسک انجام شده است.
در قسمت های بعدی با سایر استریمها در PHP آشنا خواهیم شد.
#PHP #PHP_streams
@AmirhDeveloper
.