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

مدتی هست که از افزونه 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;
				}
			}
		}

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

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

محمد عنبرستانیمشاهده نوشته ها

Avatar for محمد عنبرستانی

توسعه دهنده و طراح وب و همچنین مهندس عمران هستم و البته به موضوعاتی مثل برندینگ، طراحی آرم (لوگو)، رسم و نقاشی، معماری و سایر هنر های بصری علاقه مند هستم! اینجا سعی می کنم اطلاعات مفید و آموزنده که در زمینه کاریم و علایقم هستن رو با شما به اشتراک بگذارم.

2 دیدگاه

دیدگاهتان را بنویسید