یک اسکریپت PHP بنویسید که یک فایل بزرگ را به صورت غیرهمبلوک (non-blocking) با استفاده از stream_set_blocking خوانده و با ارسال هدر مناسب به مرورگر آن را به صورت تدریجی استریم کند.
7.0 بازدید آخرین ویرایش در 201 روز قبل ساعت 03:48 0.0
در این تمرین از توابع PHP مثل fopen، stream_set_blocking($stream, false)، fgets یا fread برای خواندن از استریم، و header برای ارسال هدرهای HTTP (مثلاً Content-Type یا Transfer-Encoding: chunked) استفاده کنید؛ برای ارسال تدریجی خروجی از ob_flush و flush بهره ببرید و مراقب باشید هدرها قبل از خروجی چاپ شوند. نکات: در حلقه خواندن از feof یا stream_get_contents با چک دورهای استفاده کنید تا در حالت non-blocking منتظر داده نباشید و با usleep زمانبندی کوتاه برقرار کنید تا CPU زیاد مصرف نشود.
1 پاسخ
جدید ترین قدیمی ترین بالاترین امتیاز پاسخ های من
در حال بارگیری...
برای ارسال پاسخ باید با حساب کاربری وارد شوید.
ورود به حساب کاربری
برای استریم غیرهمبلوک یک فایل بزرگ با PHP از stream_set_blocking($fh, false) استفاده کنید تا خواندن استریم غیرهمزمان انجام شود. قبل از هر خروجی، هدر مناسب (مثلاً Transfer-Encoding: chunked یا Content-Type) را ارسال کنید و با استفاده از ob_flush() و flush() خروجی را تدریجی کنید. در حلقه خواندن از feof یا بررسی وضعیت استریم بهطور دورهای استفاده کنید و با usleep(1000) یا مقدار کوچک دیگری مانع مصرف بالای CPU شوید. مطمئن شوید هیچ خروجی یا فاصلهای قبل از ارسال هدرها چاپ نشود تا هدِرها به درستی ارسال شوند.
گزارش