Archivo de la categoría: PHP

Todo lo relacionado con la programación en PHP

“SCRAM-SHA-1” authentication mechanism requires libmongoc built with –enable-ssl

Vamos a ponernos en antecedentes, estaba con una contenedor de Docker, para ser mas claros el de WordPress, en el cual quería habilitar unos módulos de PHP que necesitaba, uno de ellos el de mongodb. La instalación de la extensión de MongoDB para PHP se realiza, como la mayoría de los modulos con pecl. El modulo que estoy instalando es la versión 1.4.1.

# pecl install mongodb

Bien una vez realizado esto, el código que tenia ejecutándose en esta maquina me ha devuelto este bonito error, buscando documentación he encontrado que el motivo de este error es que para usar el mecanismo de autentificación SCARM-SHA-1 debe estar habilitado en el modulo de php de mongodb el libmongoc SSL, el cual no se habilita cuando se instala el modulo. Solución,  pues lo mas fácil es:

      1. Desinstalamos el modulo si lo tenemos
        # pecl uninstall mongodb
      2. Debemos comprobar si tenemos instalado el libssl-dev, y si no instalarlo, por ejemplo en sistemas Debian (Ubuntu, Mint)
        # sudo apt-get install libssl-dev
      3. Una vez instalado, podemos o bien descargar el mongodb-1.4.1 u otra versión desde la web de pecl o bien utilizar el que hemos descargado anteriormente que seguramente esta en los temporales. Pecl MongoDB
      4. Ahora viene la parte mas “complicada”, descomprimimos el fichero, y nos ubicamos dentro de la carpeta que se ha generado por medio del terminal:
        # descomprimidos el fichero descargado
        $ tar -xvf mongodb-1.4.1.tgz
        # Accedemos a la carpeta
        $ cd mongodb-1.4.1
        # Ejecutamos dentro de la carpeta el phpize
        $ phpize
        # Una vez ejecutado configuramos la extensión asi - Comprobar la salida de la
        # instalación con pecl para ver donde esta la ruta de --with-php-config
        $ ./configure --with-php-config=/usr/local/bin/php-config --with-mongodb-ssl=openssl
        # Finalizada la configuración correctamente generamos la extensión
        $ make
        # Ahora copiamos las extension generada al directorio donde estan nuestras
        # extensiones. Se puede comprobar con el phpinfo() o con php -i en linea
        $ cp modules/mongodb.so /directorio/php/modules/
        
      5. Ya solo queda cargar la extensión, si no lo habíamos hecho antes agregando la linea “extension=mongodb.so” a nuestro php.ini o creando el fichero en el directorio de carga de extensiones de PHP.

     

Anuncios

Como aumentar y reducir las fechas con PHP

DateTime es una clase la cual nos ayuda a manejar las fechas y las horas con PHP desde la versión 5.2.0, aunque yo me he encontrado problemas con algún metodo con esta versión. No es una operación muy habitual pero es posible que alguna vez nos veamos en la necesidad de aumentar o reducir una fecha. La manera general es usando el DateInterval, pero la nomenclatura de este puede ser un tanto liosa, ya que por ejemplo para representar un dia tienes que pasa P1D como parametro y cosas asi. Una manera mas sencilla es utilizando el metodo modify.

// Creamos el objeto fecha con el dia actual
$fecha = new DateTime();
// Agregamos 1 dia a la fecha
$fecha->modify('+1 day');
// Quitamos 1 dia a la fecha
$fecha->modify('-1 day');

Aparte de day para dia podemos usar week, month, year para fechas.

Mas información DateTime modify en PHP

 

Detección de Genero con Gender API o Genderize.io

A la hora de detectar el genero de una persona en base al nombre, nos podemos ayudar de dos servicios web, gender API y Genderize.io. Los dos funcionan estupendamente, y los dos tienen un limite de peticiones, y funcionan los dos muy rápidos, y tienen los  dos un funcionamiento prácticamente igual. He creado un gist que usa los dos servicios, por defecto usa Gender API, y que esta configurado para España, aunque se puede cambiar para cualquier país cambiando el código de país.

Mas info: https://gender-api.com y https://genderize.io

Uso de array_map para codificar los valores de un Array

En alguna situación nos podemos encontrar con la necesidad de tener que codificar todos los valores de un array. Un método largo seria por medio de un foreach o el for, o podemos usar array_map para aplicar una función a todos lo valores contenidos en el array.

 

$encodedArray = array_map("utf8_encode", $decodedArray);

Mas Info: http://php.net/manual/es/function.array-map.php

¿Como saber cuando cae el domingo de pascua de un año en particular con PHP? – Funciones curiosas de PHP

Hace poco que ha pasado la Semana Santa y las fechas en las que cae es algo que nos preguntamos cada año, es muy típica la conversación – ¿Oye el año que viene cuando cae Semana Santa?, puff ni idea.

Hagamos un poco de historia:

La fecha del Domingo de Pascua fue definida por el Concilio de Nicea en el año 325 D.C. como el domingo después de la primera luna llena que cae en o después del Equinocio de Primavera. El equinoccio se asume que cae en el 21 de marzo, por lo que el cálculo se reduce a determinar la fecha de la luna llena y la fecha del siguiente domingo.

Para poder calcular cuando cae ese Domingo en un año en particular, podemos usar 2 funciones con PHP, easter_days() y easter_date().

easter_date

Obtener la fecha Unix para la medianoche de Pascua de un año dado


<span class="type">int</span> <span class="methodname">easter_date</span> ([ <span class="methodparam"><span class="type">int</span> <code class="parameter">$year</code><span class="initializer"> = date("Y")</span></span> ] )

Si no le pasamos ningún parámetro nos devuelve la fecha Unix del domingo de pascua del año actual. Esta función tiene un problema, y es nos devolverá un error si en año no esta en el rango de 1970 y 2037, lo cual es lógico si nos devuelve la fecha Unix. Para calcular cuando cae el domingo de Pascua en años anteriores o posteriores a ese rango utilizaremos easter_days.

easter_days

Obtener el número de días despúes del 21 de marzo en el cuál cae Pascua para un año dado


<span class="type">int</span> <span class="methodname">easter_days</span> ([ <span class="methodparam"><span class="type">int</span> <code class="parameter">$year</code><span class="initializer"> = date("Y")</span></span> [, <span class="methodparam"><span class="type">int</span> <code class="parameter">$method</code><span class="initializer"> = CAL_EASTER_DEFAULT</span></span> ]] )

+ información: http://php.net/manual/es/function.easter-date.php http://php.net/manual/es/function.easter-days.php

Agregar mas de un destinatario al enviar Mails con Zend_Mail – Zend Framework

Supongamos el siguiente ejemplo de Zend_Mail


$mail = new Zend_Mail()

$mail->setBodyText('This is the text of the mail.');

$mail->setFrom('somebody@example.com', 'Some Sender');

$mail->addTo('somebody_else@example.com', 'Some Recipient');

$mail->addCc('somebody_else@example.com', 'Some Recipient');

$mail->addBcc('somebody_else@example.com', 'Some Recipient');

$mail->setSubject('TestSubject');

$mail->send();

Si queremos agregar mas de un destinatario al addTo(), addCc() y al addBcc() lo podemos hacer por medio de un array de direcciones de correo. En el caso del addTo() y el addCc(), estas arrays pueden ser asociativas, y en estas la key es el nombre del destinatario. Es decir:


$toRecipients = array('Some Recipient' => 'somebody_else@example.com', 'Other' => 'other@example.com');

$hideRecipients = array('one@example.com', 'two@example.com');

$mail->addTo($toRecipients);

$mail->addCc($toRecipients);

$mail->addBcc($hideRecipients);

+ Información: http://framework.zend.com/manual/1.12/en/zend.mail.adding-recipients.html

Función para eliminar los espacios no deseados dentro de un texto

Alguna vez nos podemos encontrar con que a la hora de que el usuario introduzca texto en nuestra aplicación, este de una manera “no voluntaria” nos ponga espacios en blanco extra. Esto lo podemos solucionar de una manera simple con un trim() o ltrim() o rtrim(), ¿pero que pasa si los espacios extras estan dentro del texto? Para esto he creado una función la cual nos deja solo un espacio entre palabras.