رفع باگ PHP – Warning: Division by zero در افزونه Exifography

2 558

مدتی هست که از افزونه Exifography در برخی پروژه ها مانند پینکوب استفاده می کنم بعد از کمی استفاده از این افزونه متوجه شدم گاهی این نرم افزار با خطای Warning: Division by zero رو به رو میشه. دلیل خطا بطور کلی این هستش که ما بخواهیم یک مقداری رو بر یک متغیر تقسیم کنیم که اون متغیر صفر باشه (یا نال باشه یا اصلا وجود نداشته باشه) و راه حل هم خیلی سادس، کافیه از شرط IF استفاده کنیم تا مطمئن بشیم اگر اون متغیر بزرگتر از صفر نیست عملیات تقسیم انجام نشه به مثال کلی زیر توجه کنید:

$var = 0;
echo 31 / $var;

راه حل بصورت کلی:

$var = 0;
if($var > 0){
    echo 31 / $var;
}

حالا بریم سراغ افزونه مشکلش رو به همین روش حل کنیم، فایل exifography.php رو در ویرایشگر باز کنید و خط ۲۷۲ رو مشاهده کنید:

		function pretty_shutter_speed($imgmeta) {
			if (isset($imgmeta['image_meta']['shutter_speed'])) {
				if ((1 / $imgmeta['image_meta']['shutter_speed']) > 1) {
					$speed = "1/";
					if ((number_format((1 / $imgmeta['image_meta']['shutter_speed']), 1)) == 1.3
					or number_format((1 / $imgmeta['image_meta']['shutter_speed']), 1) == 1.5
					or number_format((1 / $imgmeta['image_meta']['shutter_speed']), 1) == 1.6
					or number_format((1 / $imgmeta['image_meta']['shutter_speed']), 1) == 2.5) {
						$speed .= number_format((1 / $imgmeta['image_meta']['shutter_speed']), 1, '.', '') . "s";
					}
					else
						$speed .= number_format((1 / $imgmeta['image_meta']['shutter_speed']), 0, '.', '') . "s";
				}
				else
					$speed = $imgmeta['image_meta']['shutter_speed']."s";

				return $speed;
			}
		}

حالا کد زیر رو جاگزین کد بالا کنید:

		function pretty_shutter_speed($imgmeta) {
			if($imgmeta['image_meta']['shutter_speed'] > 0){
				if (isset($imgmeta['image_meta']['shutter_speed'])) {
					if ((1 / $imgmeta['image_meta']['shutter_speed']) > 1) {
						$speed = "1/";
						if ((number_format((1 / $imgmeta['image_meta']['shutter_speed']), 1)) == 1.3
						or number_format((1 / $imgmeta['image_meta']['shutter_speed']), 1) == 1.5
						or number_format((1 / $imgmeta['image_meta']['shutter_speed']), 1) == 1.6
						or number_format((1 / $imgmeta['image_meta']['shutter_speed']), 1) == 2.5) {
							$speed .= number_format((1 / $imgmeta['image_meta']['shutter_speed']), 1, '.', '') . "s";
						}
						else
							$speed .= number_format((1 / $imgmeta['image_meta']['shutter_speed']), 0, '.', '') . "s";
					}
					else
						$speed = $imgmeta['image_meta']['shutter_speed']."s";

					return $speed;
				}
			}
		}

موفق باشید 🙂 اگر از قالب پینکوب استفاده می کنید این راه حل حتما پیشنهاد میشه البته این مشکل رو به سازنده افزونه گزارش کردم و احتمالا بزودی بصورت یک آبدیت مشکل حل میشه…

پ.ن: نویسنده افزونه این مشکل در نسخه ۱.۳.۱ رفع کرد و دیگر نیاز به اعمال تغییرتی که ذکر شده نیست!

2 نظرات
  1. Rasool Badrkhani می گوید

    اصلا کاربرد این افزونه چیه و چه طوری طوی پینکوب استفاده شده؟

    1. محمد عنبرستانی می گوید

      پس نصب این افزونه در قسمت نمایش تصویر اطلاعات دوربین عکاسی هم نمایش داده میشه ( مارک دوربین فاصله کانونی و…) البته درصورت وجود!

ارسال یک پاسخ