یک اسکریپت PHP بنویسید که یک فایل متنی را بخواند و محتوای آن را با استفاده از stream_filter_append روی php://output به صورت Base64 رمزگذاری کرده و با هدر مناسب به مرورگر ارسال کند.

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

0.0

برای حل این مسئله فایل منبع را با fopen باز کنید، سپس یک stream به php://output باز کنید و با stream_filter_append فیلتر "convert.base64-encode" را با حالت STREAM_FILTER_WRITE به خروجی ضمیمه کنید؛ قبل از نوشتن داده‌ها هدرهای مناسب مثل Content-Type و Content-Transfer-Encoding: base64 (و در صورت نیاز Content-Disposition) را ارسال کنید و سپس با stream_copy_to_stream داده‌ها را از فایل به خروجی منتقل کنید. این روش به صورت جریان‌محور (streaming) است و از بارگذاری کل فایل در حافظه جلوگیری می‌کند — دقت کنید که هدرها قبل از هر خروجی ارسال شوند و دسترسی فایل و مجوزها صحیح باشند.

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

نکته اصلی این روش این است که هدرها باید قبل از هر خروجی ارسال شوند و مطمئن شوید خروجی buffering فعال نیست تا فیلتر base64 به درستی روی خروجی اعمال شود. برای کارکرد صحیح، فایل را با fopen بخوانید، خروجی را باز کنید و فیلتر convert.base64-encode را با STREAM_FILTER_WRITE به php://output اضافه کنید، سپس با stream_copy_to_stream داده‌ها را به خروجی منتقل کنید. اگر می‌خواهید کاربر فایل را دانلود کند، Content-Disposition: attachment و Content-Type مناسب را اضافه کنید. این روش از حافظه بهره می‌برد و با streaming، حتی فایل‌های بزرگ را بدون بارگذاری کامل در RAM منتقل می‌کند.

گزارش

1 پاسخ

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

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