Помощни статии
Повторно деклариране на geoip функция / Fatal error: Cannot redeclare geoip_country_code_by_name()
Коментирано от Включен 30 November 2014 15:52

Уважаеми клиенти, 

С цел повишаване качеството на предлаганите от нас услуги поетапно добавяме на всички сървъри geoip функцията на PHP. Тя се използва за да може да се ограничи достъпа до Вашето приложение от определени държави с цел превенция на флуд, опити за пробиване на пароли и др. Тъй като към момента тази функция е възможно да бъде добавена и от Вас, когато и ние пуснем функцията по default възниква конфликт, тъй като в PHP не може една функция да бъде деклариране повече от веднъж. Грешката, която ще видите в error лога е: Fatal error: Cannot redeclare geoip_country_code_by_name(), като ще бъде посочена файла и реда, в който се намира функцията. Тази грешка се дължи на това, че плугина, който най-често се използва не е написан правилно и не се проверява дали има вече съществуваща такава функция.  

Файла и номера на реда зависят много от приложението, което имате, но в повечето случай редовете код представляват

 

function geoip_country_code_by_name($gi, $name) {
  $country_id = geoip_country_id_by_name($gi,$name);
  if ($country_id !== false) {
        return $gi->GEOIP_COUNTRY_CODES[$country_id];
  }
  return false;
}

 function geoip_country_name_by_name_v6($gi, $name) {
   $country_id = geoip_country_id_by_name_v6($gi,$name);
   if ($country_id !== false) {
         return $gi->GEOIP_COUNTRY_NAMES[$country_id];
   }
   return false;
 }

За да се справите с възникналия казус е необходимо да махнтете редовете код, които декларират функцията, като също е възможно да
направите промени, така че при изпълнения на Вашия код да се прави проверка дали дадена функция geoip вече не е декларирана. Това може да стане по следния начин:


if (!function_exists('geoip_country_code_by_name')){
    function geoip_country_code_by_name($gi, $name) {
      $country_id = geoip_country_id_by_name($gi,$name);
      if ($country_id !== false) {
            return $gi->GEOIP_COUNTRY_CODES[$country_id];
      }
      return false;
    }
}

if (!function_exists('geoip_country_name_by_name_v6')){
    function geoip_country_name_by_name_v6($gi, $name) {
      $country_id = geoip_country_id_by_name_v6($gi,$name);
      if ($country_id !== false) {
            return $gi->GEOIP_COUNTRY_NAMES[$country_id];
      }
      return false;
    }
}

 


Също и по този начин, който е най-правилен:



if (!function_exists('geoip_country_name_by_name')) {
    function geoip_country_name_by_name($gi, $name) {
      $country_id = geoip_country_id_by_name($gi,$name);
      if ($country_id !== false) {
            return $gi->GEOIP_COUNTRY_NAMES[$country_id];
      }
      return false;
    }
} else {
    function _geoip_country_name_by_name($gi, $name) {
      $country_id = geoip_country_id_by_name($gi,$name);
      if ($country_id !== false) {
            return $gi->GEOIP_COUNTRY_NAMES[$country_id];
      }
      return false;
    }
}




 

Коментари (0)
Направи нов коментар
 
 
Три имена:
Имейл:
Коментари:
CAPTCHA верификация 
 
Моля въведете текста, изписан на снимката в текстовото поле по-долу. Това е необходимо, за да се предотвратят автоматизирани регистрации и заявки.