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