حمید داستانی
حمید داستانی
خواندن ۳ دقیقه·۲ سال پیش

چگونه با PHP بتوانیم میزان درصد فایل آپلود شده را بدست بیاوریم


اگر به دنیای برنامه نویسی علاقه مند هستید من را دنبال کنید آموزش های بسیار مفیدی را برای کاربران و علاقه مندان وب و توسعه دهندگان قرار میدهد.

امروز می خواهم با ذکر مثال به این پرسش که چگونه وقتی می خواهیم فایلی آپلود کنیم میزان درصد پیشرفت دقیق فایل آپلود شده را بدست بیاوریم. با بدست آوردن میزان دقیق پیشرفت بصورت عدد و نمایش آن به درصد می توانید اسکریپت شما بسیار دقیق کار خواهد کرد.

هنگام آپلود فایل، شما می‌توانید از متد $_FILES['file']['size'] استفاده کنید که حجم فایل آپلود شده را بر می‌گرداند. برای محاسبه درصد پیشرفت آپلود، ابتدا باید حجم کل فایل را محاسبه کنید و سپس با هر فایل آپلود شده، مقدار آپلود شده را جمع کنید و درصد پیشرفت را محاسبه کنید.

به عنوان مثال، اگر فرض کنیم که فایل شما با نام file آپلود شده است، کد زیر نشان می‌دهد چگونه می‌توانید این کار را انجام دهید:

روش اول:

$file_size = $_FILES['file']['size']; // حجم کل فایل $uploaded = 0; // حجم فایل آپلود شده $handle = fopen($_FILES['file']['tmp_name'], &quotrb&quot); // باز کردن فایل برای خواندن while (!feof($handle)) { // محاسبه حجم فایل آپلود شده $buffer = fread($handle, 8192); $uploaded += strlen($buffer); // انجام عملیات پردازشی برای هر بخش فایل } fclose($handle); // بستن فایل $progress = round(($uploaded / $file_size) * 100, 2); // محاسبه درصد پیشرفت echo &quotUploaded $uploaded bytes of $file_size bytes ($progress%)&quot

PHP

در کد بالا، از تابع fread برای خواندن فایل استفاده شده است. این تابع، یک بایت‌‌بایت از فایل را می‌خواند و در بوفر (buffer) ذخیره می‌کند. سپس با استفاده از تابع strlen، طول بوفر را به عنوان حجم فایل آپلود شده به متغیر uploaded اضافه می‌کنیم. سپس با تقسیم حجم فایل آپلود شده بر حجم کل فایل، درصد پیشرفت را محاسبه می‌کنیم.

روش دوم

$file_size = $_FILES['file']['size']; $chunk_size = 1024 * 1024; // 1MB chunks $total_chunks = ceil($file_size / $chunk_size); for ($i = 0; $i < $total_chunks; $i++) { $chunk_start = $i * $chunk_size; $chunk_end = min($chunk_start + $chunk_size, $file_size); $chunk_data = file_get_contents($_FILES['file']['tmp_name'], false, null, $chunk_start, $chunk_size); // Do something with the chunk data // ... // Calculate and output progress $percent_complete = ($chunk_end / $file_size) * 100; echo &quotUpload progress: &quot . round($percent_complete, 2) . &quot%<br>&quot }


تفاوت این کد با کد قبلی این است که ما از تابع file_get_contents برای خواندن هر قطعه از فایل استفاده کرده‌ایم و در همان حلقه for پیشرفت آپلود را به صورت درصدی محاسبه کرده و چاپ می‌کنیم. همچنین، از محاسبه اندازه فایل و اندازه قطعات در خارج از حلقه استفاده شده است تا بهبود کارایی کد.

کد اول فایل آپلود شده را به صورت یکجا باز کرده و تمامی پردازش‌های لازم را بر روی آن انجام می دهد و در نهایت درصد پیشرفت آپلود فایل را محاسبه می کند.

کد دوم فایل آپلود شده را به چند بخش تقسیم کرده و هر بخش را جداگانه پردازش می کند و درصد پیشرفت آپلود فایل را بر اساس اندازه هر بخش محاسبه می کند.

اگر از آموزش های من خوشتون آمده با ثبت دیدگاه به من کمک کنید و نظرات و پرسش های خودتون رو برای من ارسال کنید. و چنانچه پست های بیشتری از امروز از من در وب سایت نوپرداز مشاهده خواهید نمود. مرا در نوپرداز دنبال کنید.

منبع: نوپرداز

با تشکر
حمید داستانی


فایل آپلودphpآپلود فایل با phpتوسعه وبآموزش php
شاید از این پست‌ها خوشتان بیاید