یک اسکریپت PHP بنویسید که یک فایل را از یک آدرس راه دور با fopen باز کند، با استفاده از stream_set_timeout برای محدود کردن زمان خواندن تنظیم، محتوای آن را به صورت دانلود به مرورگر بفرستد و در صورت رخداد timeout یک پیام خطا نمایش دهد.

7.0 بازدید آخرین ویرایش در 201 روز قبل ساعت 03:49

0.0

از fopen یا stream_socket_client برای باز کردن استریم HTTP/فایل استفاده کنید، سپس با stream_set_timeout(handle, seconds) زمان‌سنج را تنظیم کنید و محتوا را به‌صورت بلوکی با fread یا fpassthru بخوانید؛ قبل از ارسال داده‌ها هدرهای مناسب مثل Content-Type و Content-Disposition را ارسال کنید و برای تشخیص timeout از stream_get_meta_data(handle) و فیلد 'timed_out' استفاده کنید. نکات: بررسی کنید که fopen موفق بوده باشد، در حلقه خواندن به feof پایان دهید، در صورت timeout استریم را ببندید و پیام خطا یا کد وضعیت HTTP مناسب برگردانید، و در صورت نیاز با ob_end_flush و flush خروجی را فوراً ارسال کنید.

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

برای این کار حتما بررسی کنید که fopen موفق است و خطاها به درستی مدیریت می‌شوند زیرا قطع اتصال ناخواسته می‌تواند منجر به پیام خطای غیر قابل فهم شود. با استفاده از stream_get_meta_data(handle) و فیلد timed_out می‌توانید تایم‌اوت را تشخیص دهید و در صورت وقوع تایم‌اوت استریم را ببندید و پاسخ مناسب HTTP یا پیام خطا برگردانید. قبل از ارسال داده‌ها، هدرهای Content-Type و Content-Disposition را بنویسید و با استفاده از ob_end_flush و flush خروجی را فوراً ارسال کنید. در حلقه خواندن feof را چک کنید و در صورت پایان فایل از fread یا fpassthru استفاده کنید؛ همچنین مطمئن شوید دسترسی به URL مجاز است (مثلاً با تنظیم allow_url_fopen یا استفاده از stream_socket_client) و بهینه‌سازی‌های کوچکی مانند محدودکردن اندازه در هر بلوک را رعایت کنید.

گزارش

1 پاسخ

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

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