PC Frikis

Beta, como Goooogle

Archive for the ‘Programación’ Category

En muchos servidores de host PHP-MySQL, algunos incluso de pago, no se permite la conexión remota a MySQL por cuestiones de seguridad. Normalmente esto no es un problema ya que la base de datos accedemos desde el propio espacio web y no se necesita la conexión remota.

Pero en otros casos sí puede ser necesario. Tengo un script que recoge datos de varias webs alojadas en distintos servidores y algunos no permiten la conexión remota a MySQL así que tuve que hacer un pequeño wrapper en PHP, muy sencillo, para salir del paso.

Se trata de un script que recoge los parámetros de conexión, una consulta SQL, la serializa, la codifica en base64 y la envía.

$link = mysql_connect("localhost",$_GET['user'],$_GET['pass']);
mysql_select_db($_GET['db'],$link);
$result = mysql_query(base64_decode($_GET['query']),$link);
$output = array();
while($row = @mysql_fetch_assoc($result)) { $output[] = $row; }
echo base64_encode(serialize($output));

Este archivo se situa en el servidor que no permite el acceso remoto a MySQL. Luego para leer estos datos en el servidor que desea acceder remotamente utilizamos este script:

$query = "SELECT * FROM table";
$url = "http://www.remoto.com/wrapper.php?";
$url .= "user=usuariomysql";
$url .= "&pass=passmysql";
$url .= "&db=dbmysql&query=";
$url .= base64_encode($query);
$fp = fopen($url,'r');
$read = '';
while(!feof($fp)) { $read .= fgets($fp); }
fclose($fp);
$read = unserialize(base64_decode($read));

Y si se protege la url http://www.remoto.com/wrapper.php con contraseña mejor todavía.

Captura de un frame de un vídeo

Hoy se me ha planteado un problema, debía obtener una captura en un formato válido para web (jpg, png, gif) de un vídeo cualquiera, ya sea avi, wmv, mov de forma automatizada, es decir, yo le paso a un programa el nombre del vídeo y saca el screenshot.

Recordaba que mplayer permitía muchos formatos de salida de vídeo, fbdev, x11, sdl… y también recordaba haber visto jpeg. Así que voy a confirmarlo…

mplayer -vo help

Y soporta todos los formatos mencionados (jpg, gif, png) y otros como tga. Ahora, si me permite indicarle una posición para empezar a reproducir y que reproduzca sólo un frame, ya lo tengo todo solucionado.

La opción para indicar dónde comenzar a reproducir es “ss” y para capturar un sólo frame se puede hacer con el parámetro “frames” así que ya lo tengo:

mplayer video.avi -ss 60 -frames 1 -vo jpeg

Esto captura un frame del “video.avi” en el segundo 60 y lo guarda como 0000001.jpg

Ahora puedo llamar a este comando desde cualquier lenguaje de programación y obtener fácilmente un screenshot del vídeo.