یک اسکریپت 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 زیاد مصرف نشود.

توسط پژوهشگر در 201 روز قبل ساعت 03:48
دسته بندی ها: PHP PHP for beginner
nima در 201 روز قبل ساعت 05:08

برای استریم غیرهم‌بلوک یک فایل بزرگ با PHP از stream_set_blocking($fh, false) استفاده کنید تا خواندن استریم غیرهم‌زمان انجام شود. قبل از هر خروجی، هدر مناسب (مثلاً Transfer-Encoding: chunked یا Content-Type) را ارسال کنید و با استفاده از ob_flush() و flush() خروجی را تدریجی کنید. در حلقه خواندن از feof یا بررسی وضعیت استریم به‌طور دوره‌ای استفاده کنید و با usleep(1000) یا مقدار کوچک دیگری مانع مصرف بالای CPU شوید. مطمئن شوید هیچ خروجی یا فاصله‌ای قبل از ارسال هدرها چاپ نشود تا هدِرها به درستی ارسال شوند.

گزارش

1 پاسخ

جدید ترین قدیمی ترین بالاترین امتیاز پاسخ های من

در حال بارگیری...
ورود به حساب کاربری