Función Obtener IP en YII Framework Components

Función Obtener IP en YII Framework Components

Hola, hace rato no posteaba nada, he estado con hartas cosas he ahí el motivo, ahora les mostraré una función que utilizo en mis sistemas creados en YII para obtener la IP de quien se logea o realiza alguna acción en el sistemilla.

Es bastante sencilla y solo hay que alojarla en un nuevo archivo que se debe crear en la carpeta components obviamente que esta clase debe ser extención de controladores globales.

En la carpeta Components creado el siguiente archivo llamado Funcion.php (en realidad el nombre que deseen ponerle al archivo), el cual tendría el siguiente contenido.

<?php
class Funcion extends CController
{
  public static function obtenerIP()
  {
     if(!empty($_SERVER['HTTP_X_FORWARDED_FOR']))
     {
        $client_ip = ( !empty($_SERVER['REMOTE_ADDR']) ) ? $_SERVER['REMOTE_ADDR'] : ( ( !empty($_ENV['REMOTE_ADDR']) ) ? $_ENV['REMOTE_ADDR'] : "unknown" );
        $entries = preg_split('/[, ]/', $_SERVER['HTTP_X_FORWARDED_FOR']);
   
        reset($entries);
        while (list(, $entry) = each($entries)) {
           $entry = trim($entry);
           if ( preg_match("/^([0-9]+\.[0-9]+\.[0-9]+\.[0-9]+)/", $entry, $ip_list) ) {
              $private_ip = array(
                    '/^0\./', 
                    '/^127\.0\.0\.1/', 
                    '/^192\.168\..*/', 
                    '/^172\.((1[6-9])|(2[0-9])|(3[0-1]))\..*/', 
                    '/^10\..*/');
              $found_ip = preg_replace($private_ip, $client_ip, $ip_list[1]);
              if ($client_ip != $found_ip){
                 $client_ip = $found_ip;
                 break;
              }
           }
        }
     } else { $client_ip = ( !empty($_SERVER['REMOTE_ADDR']) ) ? $_SERVER['REMOTE_ADDR'] : ( ( !empty($_ENV['REMOTE_ADDR']) ) ? $_ENV['REMOTE_ADDR'] : "unknown" ); }
     return $client_ip;
  }
}
?>

Ahora para llamar la función es simple desde el controllador agregas la siguiente línea:

$model->ip = Funcion::ObtenerIP();

Y estaríamos listo.

Saludos! 😀

Función Obtener IP en YII Framework Components

Validar RUT Chileno en Model YII

Hace mucho tiempo atrás agregé la función para validar en forma sencilla en el model de YII Framework.

Aca les dejo el simple código.

No olviden que para utilizar hay que agregar en las rules del model.

public function rules(){ 
   array('attribute','rut'); 
}

Y despues agregar la siguiente función.

public function rut($attribute,$params){
  $rut = $this->rut;
  $suma = "";
  if(strpos($rut,"-")===false){
    $this->addError($attribute, 'El RUT ingresado no es válido');
    return false;
  }else{
    $RUT = explode("-", trim($rut));
    if(strlen($RUT[0]) > 6 && strlen($RUT[0]) < 9) { $this->addError($attribute, 'El RUT ingresado no es válido '.$RUT[0].' - '.strlen($RUT[0])); return false; }
    if(is_int(trim($RUT[0]))===false) { $this->addError($attribute, 'El RUT ingresado no es válido '.$RUT[0]);   
return false; }
    $elRut = str_replace(".", "", trim($RUT[0]));
    $factor = 2;
    for($i = strlen($elRut)-1; $i >= 0; $i--):
      $factor = $factor > 7 ? 2 : $factor;
      $suma += $elRut{$i}*$factor++;
    endfor;
    $resto = $suma % 11;
    $dv = 11 - $resto;
    if($dv == 11){
      $dv=0;
    }else if($dv == 10){
      $dv="k";
    }else{
      $dv=$dv;
    }
    if($dv == trim(strtolower($RUT[1]))){
      return true;
    }else{
      $this->addError($attribute, 'El RUT ingresado no es valido');
      return false;
    }
  }
}

Saludos!