محمد مهدی امیری
3 سال پیش توسط محمد مهدی امیری مطرح شد
2 پاسخ

تبدیل کردن کد به فایل و دانلود کردنش

سلام خسته نباشید ببخشید من میخوام کاری کنم که متنی که داخل متغیر هستش رو به یک فایل درست کنه و لینک دانلود رو به کاربر بده

                    <?php

                    $myChars = '0123456789abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ';
                    $number12 = str_shuffle($myChars);

                    $myfile = fopen('core/wpuser_' . $number12 . '.php' , 'w') or die("Unable to open file!");
                                fwrite($myfile, $full_code5);
                                fclose($myfile);

                                $zip = new ZipArchive();
                                $ret = $zip->open('core/wpuser_' . $number12 . '.zip', ZipArchive::CREATE | ZipArchive::OVERWRITE);
                                if ($ret !== TRUE) {
                                    printf('Failed with code %d', $ret);
                                } else {
                                    $options = array('add_path' => 'sources/', 'remove_all_path' => TRUE);
                                    $zip->addGlob('core/wpuser_' . $number12 . '.php', GLOB_BRACE, $options);
                                    $zip->close();
                                }

                                $url_download = 'https://project.wpuser.ir/1/core/wpuser_' . $number12 . '.zip';
                    ?>
                    </div>
                    <a class="btn btn-outline-primary" href="<?php echo $url_download; ?>" role="button">download</a>  

این کد این کارو میکنه محتوای داخل متغیر $fullcode5 رو به یک فایل php تبدیل میکنه و در خط بعدی فایل php رو به یک فایل zip تبدیل میکنه و لین رو برای دانلود میده این کار حجم هاست رو پرمیکنه من میخوام محتوای فایل رو php تبدیل کنه و لینکش رو بده و بدون اینکه همچین فایلی بسازه
من این کار رو هم انجام دادم با استفاده از جاوا اسکریپت وقتی که از جا استفاده کردم به این شکل شد روی لینک دانلود کلیک میکنم فایل دانلود میشه ولی بعدش صفحه رفرش میشه و کل صفحه سفید میشه


ثبت پرسش جدید
آرش آریایی
تخصص : برنامه نویس، کارشناس نرم افزار
@ghost 3 سال پیش مطرح شد
0

بنظرم شما از کرون جاب استفاده کنید
بعد از ساخت فایل زیپ
اسمش و زمان اون لحظه در دیتابیس ذخیره کنید
یه فایل چکر بنویسید که چک کنه در دیتابیس چه سطح هایی زمان ساختش با زمان اون لحظه تفاوت بیشتر از 1 ساعت داره حذف کنه اون فایل و یه کرون جاب بنویسید که هر x ساعت فایل چکر رو اجرا کنه


علی بیات
تخصص : توسعه دهنده ارشد وب
@ali.bayat 3 سال پیش مطرح شد
0

این موضوع چند تا راه حل داره که هر کدوم شرایط خاص خودش رو داره.

۱. استفاده از رویدادهای وب‌سرور ... به طور مثال اگر از Nginx استفاده کنی،‌ پس از پایان دانلود ها در آدرسی خاص میتونی یه سری لاگ ایجاد کنی... و در کنارش کافیه تا یه اسکریپت شل داشته باشی و اون لاگ ها رو بخونی و فایل های مورد نظر رو حذف کنی..

۲. فایل های دانلودی رو فولدر خاصی قرار بده و با یه کران جاب، هر چند ساعت یک بار و یا هر شب ، محتویات فولدر رو پاک کن (اگر کاربری در حال دانلود باشه و شما فایل رو پاک کنی، دانلود اون کاربر هم فِیل میشه)

۳. استفاده از یک جاب Delay دار که مدت زمان Delay اون بر حسب اندازه فایل مشخص بشه... مثلا برای فایل ۱۰۰ mb بعد از ۲ دقیقه فایل رو پاک کنی و برای فایل های بزرگتر بیشتر (اما چون سرعت کانکشن ها یکسان نیست، شاید روش خیلی دقیقی نباشه)

۴. میتونی از Symfony Http Foundation استفاده کنی.. کتابخونه بسیار کاربردی هست و لاراول هم ازش استفاده میکنه... در صورتی که ازش استفاده کنی میتونی یه Response از نوع download ایجاد کنی و پس از دانلود فایل اون فایل رو حذف کنی... (اینکه باید از سیستم Storage هم استفاده کنی یا نه رو باید بررسی کنی)

return response()->download($pathToFile)->deleteFileAfterSend(true);

برای ارسال پاسخ لازم است وارد شده یا ثبت‌نام کنید

ورود یا ثبت‌نام