[PHP] Convertir segundos en una cadena de tiempo

Me hizo falta hace poco, son de estas cosas que haces una vez y puedes usarla 3 veces a lo largo de tu vida. Los comúnmente conocidos como desarrollos no rentables. En este caso sí lo fue, y como podéis ver por el código no perdí más de 20 minutos en elaborarlo.

Es posible que se os dé el caso y queráis ahorrar vuestro precioso tiempo. Si lo que queréis es simplemente convertir unos segundos en un timestamp en PHP os bastará con crearos en vuestro fichero de funciones:

<?php
function segundosToCadena($segs){
$cadena = ”;
if($segs >= 86400) {
$dias = floor($segs/86400);
$segs = $segs%86400;
$cadena = $dias.’ día’;
if($dias != 1) $cadena .= ‘s’;
if($segs >= 0) $cadena .= ‘, ‘;
}

Leer más » 2 Comentarios

Programar en Bash, pequeño manual de referencia [Cheat Sheet]

Aquí os dejo mi cheat sheet, o pequeño manual de referencia, personal sobre Bash. Faltan cosas pero creo que he cubierto lo más básico. Espero que os guste. 😉

1. Cómo ejecutar scripts Bash

Para escribir en Bash puedes hacerlo directamente desde la consola/terminal de GNU/Linux, sin embargo, su mayor potencia radica en poder escribir ‘scripts’ y ejecutar piezas de código para automatizar tareas. Aquí muestro paso a paso un ejemplo.

1.1. Escribe un ‘script’ Bash

Abre tu editor de textos favoritos y escribe el siguiente código.

#!/bin/bash
echo "Hola mundo"

Guárdalo como holamundo.sh (la extensión no importa pero ésta es renococida por muchos editores de texto) .

1.2. Dale permisos

Para lanzar el ‘script’ Bash, dále permisos de ejecución. Para ello escribe en tu terminal/consola de comandos:

chmod u+x holamundo.sh

Recuerda ejecutar este comando y los siguientes en la misma carpeta/directorio donde se encuentra holamundo.sh

1.3. Ejecútalo

Lanza el ‘script’ ejecutando en tu terminal/consola:

./holamundo.sh

Si no ha habido ningún problema se ejecutará el ‘script’ de Bash mostrando la frase “Hola mundo”.

2. Características Bash

Aquí se mostrarán las características de dicho intérprete de comandos o shell de GNU. Recuerda que los comandos son las acciones a ejecutar desde la consola/terminal Linux. En la siguiente sección hay una recopilación de ellos.

2.1. Comentarios

Los comentarios en Bash se hacen línea a línea con el símbolo #.

#!/bin/bash

#
# Hola Mundo comentado
#

echo "Hola mundo"

2.2. Variables

Las variables no tienen tipo, es decir, una variable puede contener una cadena, un número, etc. sin necesidad de definirlo.

La sintaxis es:

nombre_variable=valor_variable

Es obligatorio no dejar espacios antes o despues del simbolo ‘=’ ya que sino Bash interpretaría la variable como un comando Linux.

Para acceder a una variable simplemente escribe como prefijo $ en el nombre de la variable.

echo $varname

Un ejemplo sencillo:

#!/bin/bash

# Asignación y salida de variables

mivariable="Me llamo Nacho"
echo $mivariable

2.2.1. Paso de variables

Cuando ejecutas desde tu terminal/consola tienes la posibilidad de pasarle más argumentos. Por ejemplo:

./miScript.sh hola 4

Para recoger estos valores escribe $ y a continuación el número de posición del argumento pasado. El primer argumento tiene valor $1, que sería ‘hola’, y el segundo argumento sería $2, en el ejemplo sería el número 4. La variable $0 es el propio nombre del archivo.

#!/bin/bash

#
# Paso de variables
#

echo "Tu primer argumento es" $1
echo "Tu segundo argumento es" $2

También hay que destacar que $? guarda el valor de salida del último comando ejecutado. $* almacena todos los argumentos y $# es el número de argumentos pasados.

2.3. Comparaciones y/o expresiones

Los condicionales y bucles se rigen mediante la evaluación de una expresión. Por eso lo primero es saber cómo programar en Bash las evaluaciones de una expresión.

La evaluación de una expresión da como resultado verdadero o falso. Si la comparación o evaluación de la expresión es verdadera se ejecutará el bucle o la condicional, si es falsa la evaluación no se ejecutará.

En Bash, la sintaxis es la siguiente:

test expresión

ó

[ expresión ]

Un ejemplo de expresión sería [ 3 -eq 5 ] que comprueba si el valor 3 es igual a 5. Como es incorrecto, el valor que devuelve es falso. Los símbolos [ y ] tienen que estar obligatoriamente separados por un espacio.

2.3.1. Comparaciones numéricas

numero1 -eq numero2: Devuelve verdadero si 'numero1' es igual a 'numero2'. numero1 -ge numero2: Devuelve verdadero si 'numero1' es igual o mayor a 'numero2'. numero1 -gt numero2: Devuelve verdadero si 'numero1' es mayor a 'numero2'. numero1 -le numero2: Devuelve verdadero si 'numero1' es igual o menor a 'numero2'. numero1 -lt numero2: Devuelve verdadero si 'numero1' es menor a 'numero2'. numero1 -ne numero2: Devuelve verdadero si 'numero1' no es igual a 'numero2'. read more

Leer más » 23 Comentarios

Descargar ficheros sin usar enlaces con PHP

Cuando me refiero a no usar enlaces, me refiero a no usar enlaces al fichero en sí, por ejemplo: https://www.linuxhispano.net/logo.jpg sino a algo así como http://www.dominio.com/obtener_fichero.php?id_fichero=100.

¿Con qué idea podemos querer utilizar esto? Además de ocultar algo más de nuestra estructura interna, que siempre viene bien, es útil saber cómo descargar ficheros de este modo para tener un mayor control sobre el flujo, de forma que podamos comprobar rol de la persona que descarga, acceder a una base de datos para obtener el fichero de un campo BLOB o culaquier otro tratamiento que queramos hacer.

Para ello con PHP y suponiendo que tenemos el fichero ya accesible en disco (si está almacenado en una BBDD una solución podría ser crear un temporal mientras tanto), sólo tendremos que hacer lo siguiente:

header('Content-Description: File Transfer');
header("Content-Type: application/force-download");
header('Content-Disposition: attachment; filename='.basename($ruta));
header('Content-Transfer-Encoding: binary');
header('Content-Length: ' . obtenerTamanhoFichero($ruta));
readfile($ruta);

exit;

Utilizo una funcion obtenerTamanhoFichero que ahora os presentaré porque la función equivalente de PHP en ocasiones no funciona correctamente. Por cierto, el fichero en cuestión estará en la ruta indicada por la variable correspondiente, $ruta.

function obtenerTamanhoFichero ($url) { if (substr($url,0,4)=='http') { $x = array_change_key_case(get_headers($url, 1),CASE_LOWER); if ( strcasecmp($x[0], 'HTTP/1.1 200 OK') != 0 ) { $x = $x['content-length'][1]; } else { $x = $x['content-length']; } } else { $x = @filesize($url); } return $x; } read more

Leer más » 2 Comentarios

Instalar el conector de MySQL sobre Mono

Introducción

Ya que no hay demasiado documentación de Mono en la red y creo que es una alternativa muy válida para muchos proyectos, voy a seguir publicando más tutoriales y tips sobre este tema.

Mi intención hoy es comentar cómo referenciar el conector de MySQL dentro de un proyecto de Mono con MonoDevelop, de forma que podamos utilizarlo con la arquitectura y las funcionalidades de ADO.NET para manejar datos con un servidor de base de datos MySQL. El conector os valdrá tanto para aplicaciones web como locales. read more

Leer más » 12 Comentarios

Resetear autoincremento en MySQL

La posibilidad de generar valores automáticos para nuestras claves primarias gracias a la propiedad: AUTO_INCREMENT presente en muchos sistemas gestores de bases de datos modernos, es además de cómodo, seguro para quien lo implementa.

Sin embargo, en caso de borrar todos los datos de una tabla y volver a introducirlos, el valor del campo con AUTO_INCREMENT activado, en lugar de empezar desde 1, seguirá con la cuenta anterior. Esto es un detalle sin mucha importancia en algunos casos, pero que en algunas implementaciones puede dar problemas. Imaginemos una tabla con 10 registros con valores para su clave primaria numérica comprendidos entre 65 y 74. Sería por lo menos raro. read more

Leer más » 7 Comentarios

Formatear Javascript a código legible

JAVA

No sé si os ha pasado en alguna ocasión, que cuando estáis utilizando algún código Javascript de un tercero, ya sea de algún plugin, framework, etc. o cualquier código que estéis utilizando, aparece en una sola línea, mal tabulado o con una sintaxis un tanto difusa. Si queréis tratar dicho código y manejarlo, porque queráis ampliarlo o algo por estilo y no encontráis una versión para desarrolladores que sea más legible, la mejor solución es utilizar un formateador de Javascript. read more

Leer más » 1 Comentario

Revertir un commit errado en Subversion

Interesante entrada de Checho explicando los pasos a seguir para solucionar el error cuando realizamos un commit indebido.

Cómo revertir un commit errado en Subversion por Checho.

Leer más » 1 Comentario

Matar un proceso por su nombre en Ubuntu

Existen muchas maneras de matar un proceso si sólo sabes el nombre del proceso. Aquí se supone que el proceso se llama ‘programa’, sólo tienes que cambiarlo por el nombre del proceso que quieras eliminar. Aquí están las posibilidades:

 killall -v programa

 pkill programa

 kill $(pgrep programa) 
kill `ps -ef | grep programa | grep -v grep | awk ‘{print $2}’`

Estas técnicas pueden ser útiles en los scripts para el shell en donde puedes no saber el ID del proceso y necesitas eliminarlo por su nombre.

Leer más » 5 Comentarios

Rotar un texto vía CSS

Probablemente en alguna ocasión hayáis necesitado rotar texto en algún sitio web. La opción que os traigo hoy para este problema, utiliza CSS, por lo que se integra a la perfección en cualquier tipo de sitio y es perfectamente compatible con los navegadores más populares de la actualidad: Mozilla Firefox (y familia Gecko), Google Chrome/Chromium (y familia WebKit) e incluso Internet Explorer (aunque de una manera menos directa).

Las reglas CSS a incluir son las siguientes (rotación de -90º o 270º):
-webkit-transform: rotate(-90deg);
-moz-transform: rotate(-90deg);
filter: progid:DXImageTransform.Microsoft.BasicImage(rotation=3);
read more

Leer más » 1 Comentario

Usar una imagen ISO en Ubuntu

Abre una ventana de terminal de consola y escribe los siguientes comandos:

sudo mkdir /media/iso

sudo modprobe loop
sudo mount filename.iso /media/iso -t iso9660 -o loop

Ahora deberías ser capaz de ver en la carpeta /media/iso los contenidos de la imagen ISO. Si quieres desmontar la imagen ISO ejecuta lo siguiente:

sudo umount /media/iso
Leer más » 2 Comentarios