Infografía: Evolución de PHP

Captura de pantalla 2016-07-18 a las 11.38.02

Una pequeña gran infografía que muestra la evolución de PHP, desde su creación en 1994 hasta el reciente lanzamiento de PHP en versión 7

 

Vía: http://www.cabotsolutions.com/2016/06/the-evolution-of-php-infographic/?utm_campaign=Laravel+News&utm_medium=email&utm_source=ln112

Evolution-of-PHP-01-1.png

Anuncios

Validar número IBAN en PHP

adios-ccc-hola-iban

Dejo por aquí una pequeña función escrita para PHP encargada de validar cualquier código bancario internacional (IBAN).

Para ello, la validación se encarga de verificar:

IBAN:GB82 WEST 1234 5698 7654 32

  • Reordenación : W E S T12345698765432 G B82
  • Conversión a entero: 3214282912345698765432161182
  • Sobre el número resultante, calcular el módulo 97, si el resultado es correcto, la operación dará como resultado 1.3214282912345698765432161182mod 97 = 1
 
<?php

function isValidIBAN ($iban) {

  $iban = strtolower($iban);
  $Countries = array(
    'al'=>28,'ad'=>24,'at'=>20,'az'=>28,'bh'=>22,'be'=>16,'ba'=>20,'br'=>29,'bg'=>22,'cr'=>21,'hr'=>21,'cy'=>28,'cz'=>24,
    'dk'=>18,'do'=>28,'ee'=>20,'fo'=>18,'fi'=>18,'fr'=>27,'ge'=>22,'de'=>22,'gi'=>23,'gr'=>27,'gl'=>18,'gt'=>28,'hu'=>28,
    'is'=>26,'ie'=>22,'il'=>23,'it'=>27,'jo'=>30,'kz'=>20,'kw'=>30,'lv'=>21,'lb'=>28,'li'=>21,'lt'=>20,'lu'=>20,'mk'=>19,
    'mt'=>31,'mr'=>27,'mu'=>30,'mc'=>27,'md'=>24,'me'=>22,'nl'=>18,'no'=>15,'pk'=>24,'ps'=>29,'pl'=>28,'pt'=>25,'qa'=>29,
    'ro'=>24,'sm'=>27,'sa'=>24,'rs'=>22,'sk'=>24,'si'=>19,'es'=>24,'se'=>24,'ch'=>21,'tn'=>24,'tr'=>26,'ae'=>23,'gb'=>22,'vg'=>24
  );
  $Chars = array(
    'a'=>10,'b'=>11,'c'=>12,'d'=>13,'e'=>14,'f'=>15,'g'=>16,'h'=>17,'i'=>18,'j'=>19,'k'=>20,'l'=>21,'m'=>22,
    'n'=>23,'o'=>24,'p'=>25,'q'=>26,'r'=>27,'s'=>28,'t'=>29,'u'=>30,'v'=>31,'w'=>32,'x'=>33,'y'=>34,'z'=>35
  );

  if (strlen($iban) != $Countries[ substr($iban,0,2) ]) { return false; }

  $MovedChar = substr($iban, 4) . substr($iban,0,4);
  $MovedCharArray = str_split($MovedChar);
  $NewString = "";

  foreach ($MovedCharArray as $k => $v) {

    if ( !is_numeric($MovedCharArray[$k]) ) {
      $MovedCharArray[$k] = $Chars[$MovedCharArray[$k]];
    }
    $NewString .= $MovedCharArray[$k];
  }
  if (function_exists("bcmod")) { return bcmod($NewString, '97') == 1; }

  // http://au2.php.net/manual/en/function.bcmod.php#38474
  $x = $NewString; $y = "97";
  $take = 5; $mod = "";

  do {
    $a = (int)$mod . substr($x, 0, $take);
    $x = substr($x, $take);
    $mod = $a % $y;
  }
  while (strlen($x));

  return (int)$mod == 1;
}

Auto link urls en cadenas de texto (PHP)

2e6ee13

Aquí dejo un sencillo script escrito en PHP que podemos utilizar para parsear una cadena de texto y añadir automáticamente un enlace html en las direcciones url encontradas en él.

 
	public static function autolink($str, $attributes=array()) {
		$attrs = '';
		foreach ($attributes as $attribute => $value) {
			$attrs .= " {$attribute}=\"{$value}\"";
		}
		$str = ' ' . $str;
		$str = preg_replace(
			'`([^"=\'>])(((http|https|ftp)://|www.)[^\s<]+[^\s<\.)])`i',
			'$1<a href="$2"'.$attrs.' target="_blank">$2</a>',
			$str
		);
		$str = substr($str, 1);
		$str = preg_replace('`href=\"www`','href="http://www',$str);
		return $str;
	}

Laravel 4.2: publicará su framework bajo un modelo freemium de pago

Imagen

 

Taylor Otwell, máximo responsable del framework Laravel, anunció en su blog  que la próxima versión Laravel 4.2 seguirá un modelo freemium de pago para algunas de sus características “no esenciales”:

The core of the framework should include only the components most web applications need. But, what about the stuff a lot of us need? There are some amazing packages I want to build in the next 5 months, and I think they will add some of the most amazing Laravel features yet! […] I’m calling them Laravel expansions, and I already have one of them written! […] These premiumopt-in features of Laravel […]

Así que a partir de la versión 4.2, algunas de las mejores funcionalidades de Laravel serán de pago. Esta decisión parece dar la razón a aquellos programadores preocupados con la financiación del proyecto Laravel.

Si es verdad que está decisión busca que el proyecto siga avanzando en principio no es malo, dado que en mi opinión, tener un market de pago para bundles y packages de pago, es bueno para todos nosotros, los desarrolladores. Veremos como acaba esto.

Fuente: http://symfony.es/noticias/2014/01/05/laravel-publicara-su-framework-bajo-un-modelo-freemium-de-pago/

SSL heartbeat fix (Ubuntu)

Imagen

 

Con motivo de la reciente vulnerabilidad descubierta en el protocolo SSL, dejo aquí unos sencillos pasos para cubrirnos las espaldas y evitar que nuestro servidor esté expuesto a dicha vulnerabilidad.

  1. Lo primero será comprobar que nuestra versión de SSL está afectada, para ello, basta con ejecutar este comando

    sudo openssl version -a

    Si la versión tiene una fecha de compilación (built on) anterior al 7 de abril de 2014, nuestro servidor puede ser atacado. Sino es así, estamos bien y no hace falta seguir con este pequeño manual.

  2. En caso de estar afectados, podemos solucionarlo con dos sencillos comandos:

    sudo apt-get update

    y actualizamos nuestra versión de SSL

    sudo apt-get upgrade openssl

    Por otra parte, comentar que no es necesario relanzar nuestro servidor web (Apache por ejemplo) ya que el mismo instalador se encarga de hacerlo. Sería también recomendable generar y configurar un nuevo certificado SSL para nuestro servidor, así nos evitamos posibles ataques si nuestro servidor ya fue atacado bajo esta vulnerabilidad.

Configurar nuestro propio nivel de log con Laravel

Una de las cosas que más podemos echar de menos en el fichero app.php de Larvel 4 es una variable donde podamos definir el nivel de log que queremos en nuestra aplicación.

Dado que en este fichero podemos añadir nuestras propias variables de configuración, vamos a crear nuestra propia variable de nivel de logs:

'log_level' => 'warning',

Donde los posibles valores para esta variable será uno de los siguientes [debug, info, notice, warning, error, critical, alert].

Por último, debemos indicarle a Laravel que utilice nuestras preferencias para logs, esto lo definiremos editando el fichero app/start/global, que es donde Laravel registra entre otras cosas la llamada a Logeador. Editamos esta línea:

Log::useDailyFiles(storage_path().'/logs/'.$logFile);

Pasándo ahora como parámetro nuestra variable definida anteriormente:

Log::useDailyFiles(storage_path() . '/logs/' . $logFile, 0, Config::get('app.log_level'));

Y listo, ya tenemos configurado nuestro propio nivel de Log con Laravel 🙂