یک اسکریپت 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 خروجی را فوراً ارسال کنید.
1 پاسخ
جدید ترین قدیمی ترین بالاترین امتیاز پاسخ های من
در حال بارگیری...
برای ارسال پاسخ باید با حساب کاربری وارد شوید.
ورود به حساب کاربری
برای این کار حتما بررسی کنید که 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) و بهینهسازیهای کوچکی مانند محدودکردن اندازه در هر بلوک را رعایت کنید.
گزارش