اگر به دنیای برنامه نویسی علاقه مند هستید وبلاگ نوپرداز را دنبال کنید آموزش های بسیار مفیدی را برای کاربران و علاقه مندان وب و توسعه دهندگان قرار میدهد.
امروز می خواهم با ذکر مثال به این پرسش که چگونه وقتی می خواهیم فایلی آپلود کنیم میزان درصد پیشرفت دقیق فایل آپلود شده را بدست بیاوریم. با بدست آوردن میزان دقیق پیشرفت بصورت عدد و نمایش آن به درصد می توانید اسکریپت شما بسیار دقیق کار خواهد کرد.
هنگام آپلود فایل، شما میتوانید از متد $_FILES['file']['size']
استفاده کنید که حجم فایل آپلود شده را بر میگرداند. برای محاسبه درصد پیشرفت آپلود، ابتدا باید حجم کل فایل را محاسبه کنید و سپس با هر فایل آپلود شده، مقدار آپلود شده را جمع کنید و درصد پیشرفت را محاسبه کنید.
به عنوان مثال، اگر فرض کنیم که فایل شما با نام file
آپلود شده است، کد زیر نشان میدهد چگونه میتوانید این کار را انجام دهید:
روش اول:
$file_size = $_FILES['file']['size']; // حجم کل فایل
$uploaded = 0; // حجم فایل آپلود شده
$handle = fopen($_FILES['file']['tmp_name'], "rb"); // باز کردن فایل برای خواندن
while (!feof($handle)) { // محاسبه حجم فایل آپلود شده
$buffer = fread($handle, 8192);
$uploaded += strlen($buffer);
// انجام عملیات پردازشی برای هر بخش فایل
}
fclose($handle); // بستن فایل
$progress = round(($uploaded / $file_size) * 100, 2); // محاسبه درصد پیشرفت
echo "Uploaded $uploaded bytes of $file_size bytes ($progress%)";
در کد بالا، از تابع 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 "Upload progress: " . round($percent_complete, 2) . "%<br>";
}
تفاوت این کد با کد قبلی این است که ما از تابع file_get_contents
برای خواندن هر قطعه از فایل استفاده کردهایم و در همان حلقه for
پیشرفت آپلود را به صورت درصدی محاسبه کرده و چاپ میکنیم. همچنین، از محاسبه اندازه فایل و اندازه قطعات در خارج از حلقه استفاده شده است تا بهبود کارایی کد.
کد اول فایل آپلود شده را به صورت یکجا باز کرده و تمامی پردازشهای لازم را بر روی آن انجام می دهد و در نهایت درصد پیشرفت آپلود فایل را محاسبه می کند.
کد دوم فایل آپلود شده را به چند بخش تقسیم کرده و هر بخش را جداگانه پردازش می کند و درصد پیشرفت آپلود فایل را بر اساس اندازه هر بخش محاسبه می کند.
اگر از آموزش های من خوشتون آمده با ثبت دیدگاه به من کمک کنید و نظرات و پرسش های خودتون رو برای من ارسال کنید.
با تشکر
حمید داستانی
0 دیدگاه