استریم ها در PHP - قسمت اول
در PHP، استریم (Stream) یک سازوکار انتزاعی برای مدیریت ورودی و خروجی دادهها است. به زبان ساده، استریمها به شما امکان میدهند انواع مختلف منابع داده (مانند فایلهای سیستم، درخواستهای شبکه، دادههای فشرده و ...) را از طریق یک رابط یکسان بخوانید یا بنویسید.
به جای آنکه برای هر نوع منبع تابعها یا روشهای جداگانهای داشته باشید، PHP با استفاده از استریمها یک مجموعه توابع عمومی (مثل fopen, fread, fwrite و ...) فراهم کرده که با همه این منابع به شکل یکنواخت رفتار میکنند.
هر استریم رَپر (Stream Wrapper) در PHP در واقع یک پروتکل یا طرح (scheme) خاص را پیادهسازی میکند که به صورت scheme:// استفاده میشود. برای مثال، file:// برای دسترسی به سیستم فایل محلی، http:// برای منابع وب، یا php:// برای منابع داخلی PHP استفاده میشود.
PHP به طور پیشفرض تعداد زیادی استریم رپر داخلی دارد که بسیاری از کارهای معمول را پوشش میدهند. شما میتوانید توسط این استریمها به سادگی کارهایی مثل خواندن فایلها، دریافت داده از وب, نوشتن خروجی، خواندن ورودی خام درخواستها و حتی کار با دادههای فشردهشده را انجام دهید، بدون اینکه نگران جزئیات سطح پایین هر کدام باشید.
استریمهای داخلی PHP - php://
1- php://input
این استریم برای دسترسی به دادهٔ ورودی خام HTTP در PHP استفاده میشود. به طور خاص، این استریم محتوای خام بدنهٔ درخواست HTTP را (معمولاً در درخواستهای POST یا PUT) ارائه میکند، بدون هیچگونه پردازش یا parse خودکار.
زمانی که نیاز دارید ورودی خام درخواست را بخوانید (مثلاً دریافت دادههای JSON از یک API کلاینت یا پردازش درخواستهای RESTful)، این استریم بسیار مفید است. برخلاف متغیرهای سراسری مانند $_POST که فقط دادههای form-urlencoded را میگیرند،
این استریم اجازه میدهد انواع دادهها (JSON, XML, متن خام و ...) را مستقیماً از بدنهٔ درخواست دریافت کنید.
در این مثال، محتوای خام ورودی HTTP با file_get_contents از php://input خوانده شده و سپس از JSON به آرایه PHP تبدیل میگردد.
در نهایت نام کاربر خروجی گرفته میشود. اگر درخواست فوق رشتهٔ JSON
را ارسال کرده باشد، خروجی برنامه Hello Ali خواهد بود.
توجه داشته باشید php://input فقط خواندنی است و فقط یک بار میتوان محتوا را از آن خواند، یعنی پس از خواندن، محتوای آن خالی میشود. همچنین در مورد درخواستهای معمولی فرم (مانند multipart/form-data برای آپلود فایل)، استفاده از این استریم توصیه نمیشود، زیرا PHP آن دادهها را قبلاً پردازش کرده است.
2- php://output
این استریم خروجی استاندارد اسکریپت PHP را نمایندگی میکند. هر دادهای که در آن نوشته شود، مستقیماً به خروجی معمول برنامه (همان چیزی که مرورگر دریافت میکند یا در CLI ترمینال نشان داده میشود) فرستاده میشود.
زمانی که بخواهید با توابع استریم دادهای را به خروجی بفرستید (به جای استفاده از echo یا print)، میتوانید php://output را مانند یک فایل باز کرده و در آن بنویسید.
این قابلیت میتواند در سناریوهایی مفید باشد که یک تابع انتظار یک منبع استریم برای خروجی دارد یا هنگامی که میخواهید خروجی را از سایر عملیات جدا کنید.
در این قطعه کد، ما استریم خروجی را باز کردهایم و یک خط متن را با fwrite در آن نوشتیم. نتیجهٔ اجرای این کد نمایش متن ذکر شده در خروجی (مثلاً مرورگر یا کنسول) است. در واقع کاری که fwrite در اینجا انجام میدهد معادل همان echo کردن رشتهها است.
در قسمت های بعدی با سایر استریمها در PHP آشنا خواهیم شد.
#PHP #PHP_streams
@AmirhDeveloper
.