jueves, 5 de marzo de 2015

Tratamiento de Fechas Unix Timestamp en Mysql



En Mysql, podemos almacenar fechas en formato Unix Timestamp. La fecha/hora se almacena en número de segundos transcurridos desde el 1 de Enero de 1970 hasta el momento y es utilizado por multitud de plataformas , como por ejemplo Moodle.


Un ejemplo de dato podría ser:

1425580975

que correspondería con la fecha / hora: 2015-03-05 19:42:55

Podemos formatear este campo de fecha, en un formato comprensible, utilizando from_unixtime en Mysql de la siguiente forma:

select  id,denominacion,from_unixtime(time) as fecha from datos;

Utilizando PHP, también podríamos obtener la fecha en curso a partir de una fecha en formato Unix:

<?php
$unixtimestamp= "1425580975";
$anio = date("Y",$unixtimestamp);
$mes = date("m",$unixtimestamp);
$dia = date("d",$unixtimestamp);
echo "$anio-$mes-$dia";
?>


lunes, 2 de marzo de 2015

Comprimir y descomprimir archivos ZIP con PHP



En este tip vamos a ver como generar un archivo .zip a partir de uno o una serie de archivos que tengamos en nuestro servidor, mediante la función ZipArchive de PHP. También mostraremos el código, para descomprimir archivos .zip en nuestro servidor utilizando la función extractTo.

ComprimirArchivos.php

<?php
//Creamos un nuevo archivo .zip
$ArchivoZip = new ZipArchive();
//Le asignamos un mombre
$nombreZip = 'archivocomprimido2.zip';
//Abrimos el zip,
if($ArchivoZip->open($nombreZip,ZIPARCHIVE::CREATE)===true) {
//Añadimos el/los archivos que deseamos al .zip
$ArchivoZip->addFile('imagen1.jpg');
$ArchivoZip->addFile('imagen2.jpg');
//Cerramos el archivo .zip y concluimos
$ArchivoZip->close();
echo "Zip creado correctamente";
}
else
{
echo "Error generando el ZIP";
}
?>




Extraer archivos de un fichero comprimido en el servidor

Para descomprimir y extraer archivos de un fichero .zip subido a nuestro servidor, utilizaremos en este caso la función extractTo, de manera casi análoga a la anterior.

<?php $nombreZip = "archivocomprimido2.zip";
$ArchivoZip = new ZipArchive();
if($ArchivoZip->open($nombreZip) === true )
{
$ArchivoZip->extractTo("directoriozip");
echo "El archivo ZIP ha sido descomprimido correctamente";
}
else {
echo "Se ha producido un error al extraer los archivos";
}
?>




jueves, 26 de febrero de 2015

Convertir monedas en PHP con el API de Google




Vamos a utilizar el API que no proporciona Google, para convertir importes de una moneda a otra. Para ello, programaremos la siguiente función, ConvertirMoneda, que convierte (en este ejemplo) un EURO a Dólares Americanos:


$valor=ConvertirMoneda("USD","EUR",1);


<?php
function ConvertirMoneda($monedaOrigen,$monedaDestino,$importe) 
{
    $valor = file_get_contents("https://www.google.com/finance/converter?          a=$importe&from=$monedaOrigen&to=$monedaDestino");
    $valor = explode("<span class=bld>",$valor);
    $valor = explode("</span>",$valor[1]);  
    return preg_replace("/[^0-9\.]/", null, $valor[0]);
}
$valor=ConvertirMoneda("USD","EUR",1);
echo "1 Euro=$valor Dólares";
?>

La llamada al API nos devuelve el formulario de conversión y lo que hacemos con esta función es eliminar dicho formulario, para que el dato que nos devuelve sea exactamente el valor deseado.

¿Qué monedas acepta el API?

Los códigos de moneda que acepta el API son los siguientes:

AED=United Arab Emirates Dirham (AED)
AFN=Afghan Afghani (AFN)
ALL=Albanian Lek (ALL)
AMD=Armenian Dram (AMD)
ANG=Netherlands Antillean Guilder (ANG)
AOA=Angolan Kwanza (AOA)
ARS=Argentine Peso (ARS)
AUD=Australian Dollar (A$)
AWG=Aruban Florin (AWG)
AZN=Azerbaijani Manat (AZN)
BAM=Bosnia-Herzegovina Convertible Mark (BAM)
BBD=Barbadian Dollar (BBD)
BDT=Bangladeshi Taka (BDT)
BGN=Bulgarian Lev (BGN)
BHD=Bahraini Dinar (BHD)
BIF=Burundian Franc (BIF)
BMD=Bermudan Dollar (BMD)
BND=Brunei Dollar (BND)
BOB=Bolivian Boliviano (BOB)
BRL=Brazilian Real (R$)
BSD=Bahamian Dollar (BSD)
BTC=Bitcoin (&#3647;)
BTN=Bhutanese Ngultrum (BTN)
BWP=Botswanan Pula (BWP)
BYR=Belarusian Ruble (BYR)
BZD=Belize Dollar (BZD)
CAD=Canadian Dollar (CA$)
CDF=Congolese Franc (CDF)
CHF=Swiss Franc (CHF)
CLF=Chilean Unit of Account (UF) (CLF)
CLP=Chilean Peso (CLP)
CNH=CNH (CNH)
CNY=Chinese Yuan (CN¥)
COP=Colombian Peso (COP)
CRC=Costa Rican Colón (CRC)
CUP=Cuban Peso (CUP)
CVE=Cape Verdean Escudo (CVE)
CZK=Czech Republic Koruna (CZK)
DEM=German Mark (DEM)
DJF=Djiboutian Franc (DJF)
DKK=Danish Krone (DKK)
DOP=Dominican Peso (DOP)
DZD=Algerian Dinar (DZD)
EGP=Egyptian Pound (EGP)
ERN=Eritrean Nakfa (ERN)
ETB=Ethiopian Birr (ETB)
EUR=Euro (€)
FIM=Finnish Markka (FIM)
FJD=Fijian Dollar (FJD)
FKP=Falkland Islands Pound (FKP)
FRF=French Franc (FRF)
GBP=British Pound Sterling (£)
GEL=Georgian Lari (GEL)
GHS=Ghanaian Cedi (GHS)
GIP=Gibraltar Pound (GIP)
GMD=Gambian Dalasi (GMD)
GNF=Guinean Franc (GNF)
GTQ=Guatemalan Quetzal (GTQ)
GYD=Guyanaese Dollar (GYD)
HKD=Hong Kong Dollar (HK$)
HNL=Honduran Lempira (HNL)
HRK=Croatian Kuna (HRK)
HTG=Haitian Gourde (HTG)
HUF=Hungarian Forint (HUF)
IDR=Indonesian Rupiah (IDR)
IEP=Irish Pound (IEP)
ILS=Israeli New Sheqel (&#8362;)
INR=Indian Rupee (Rs.)
IQD=Iraqi Dinar (IQD)
IRR=Iranian Rial (IRR)
ISK=Icelandic Króna (ISK)
ITL=Italian Lira (ITL)
JMD=Jamaican Dollar (JMD)
JOD=Jordanian Dinar (JOD)
JPY=Japanese Yen (¥)
KES=Kenyan Shilling (KES)
KGS=Kyrgystani Som (KGS)
KHR=Cambodian Riel (KHR)
KMF=Comorian Franc (KMF)
KPW=North Korean Won (KPW)
KRW=South Korean Won (&#8361;)
KWD=Kuwaiti Dinar (KWD)
KYD=Cayman Islands Dollar (KYD)
KZT=Kazakhstani Tenge (KZT)
LAK=Laotian Kip (LAK)
LBP=Lebanese Pound (LBP)
LKR=Sri Lankan Rupee (LKR)
LRD=Liberian Dollar (LRD)
LSL=Lesotho Loti (LSL)
LTL=Lithuanian Litas (LTL)
LVL=Latvian Lats (LVL)
LYD=Libyan Dinar (LYD)
MAD=Moroccan Dirham (MAD)
MDL=Moldovan Leu (MDL)
MGA=Malagasy Ariary (MGA)
MKD=Macedonian Denar (MKD)
MMK=Myanmar Kyat (MMK)
MNT=Mongolian Tugrik (MNT)
MOP=Macanese Pataca (MOP)
MRO=Mauritanian Ouguiya (MRO)
MUR=Mauritian Rupee (MUR)
MVR=Maldivian Rufiyaa (MVR)
MWK=Malawian Kwacha (MWK)
MXN=Mexican Peso (MX$)
MYR=Malaysian Ringgit (MYR)
MZN=Mozambican Metical (MZN)
NAD=Namibian Dollar (NAD)
NGN=Nigerian Naira (NGN)
NIO=Nicaraguan Córdoba (NIO)
NOK=Norwegian Krone (NOK)
NPR=Nepalese Rupee (NPR)
NZD=New Zealand Dollar (NZ$)
OMR=Omani Rial (OMR)
PAB=Panamanian Balboa (PAB)
PEN=Peruvian Nuevo Sol (PEN)
PGK=Papua New Guinean Kina (PGK)
PHP=Philippine Peso (Php)
PKG=PKG (PKG)
PKR=Pakistani Rupee (PKR)
PLN=Polish Zloty (PLN)
PYG=Paraguayan Guarani (PYG)
QAR=Qatari Rial (QAR)
RON=Romanian Leu (RON)
RSD=Serbian Dinar (RSD)
RUB=Russian Ruble (RUB)
RWF=Rwandan Franc (RWF)
SAR=Saudi Riyal (SAR)
SBD=Solomon Islands Dollar (SBD)
SCR=Seychellois Rupee (SCR)
SDG=Sudanese Pound (SDG)
SEK=Swedish Krona (SEK)
SGD=Singapore Dollar (SGD)
SHP=St. Helena Pound (SHP)
SLL=Sierra Leonean Leone (SLL)
SOS=Somali Shilling (SOS)
SRD=Surinamese Dollar (SRD)
STD=São Tomé &amp; Príncipe Dobra (STD)
SVC=Salvadoran Colón (SVC)
SYP=Syrian Pound (SYP)
SZL=Swazi Lilangeni (SZL)
THB=Thai Baht (THB)
TJS=Tajikistani Somoni (TJS)
TMT=Turkmenistani Manat (TMT)
TND=Tunisian Dinar (TND)
TOP=Tongan Pa&#699;anga (TOP)
TRY=Turkish Lira (TRY)
TTD=Trinidad &amp; Tobago Dollar (TTD)
TWD=New Taiwan Dollar (NT$)
TZS=Tanzanian Shilling (TZS)
UAH=Ukrainian Hryvnia (UAH)
UGX=Ugandan Shilling (UGX)
USD=US Dollar ($)
UYU=Uruguayan Peso (UYU)
UZS=Uzbekistan Som (UZS)
VEF=Venezuelan Bolívar (VEF)
VND=Vietnamese Dong (&#8363;)
VUV=Vanuatu Vatu (VUV)
WST=Samoan Tala (WST)
XAF=CFA Franc BEAC (FCFA)
XCD=East Caribbean Dollar (EC$)
XDR=Special Drawing Rights (XDR)
XOF=CFA Franc BCEAO (CFA)
XPF=CFP Franc (CFPF)
YER=Yemeni Rial (YER)
ZAR=South African Rand (ZAR)
ZMK=Zambian Kwacha (1968–2012) (ZMK)
ZMW=Zambian Kwacha (ZMW)
ZWL=Zimbabwean Dollar (2009) (ZWL)

miércoles, 25 de febrero de 2015

Leer y mostrar un archivo externo con PHP



Vamos a leer el contenido de un archivo (ya esté en nuestro servidor o en otro externo que disponga de permisos) y mostrarlo dentro de nuestra web.

Imaginemos que tenemos un archivo alojado en el servidor x:

http://www.webexterna.com/index.php

(este archivo puede ser cualquier cosa, un txt, un php....)

vamos a acceder al mismo mediante la función fopen , la cual permite abrir un archivo o una URL .

A continuación, leemos hasta el final del archivo con la función fread, cerramos el archivo y mostramos el resultado.

El código PHP sería el siguiente:

<?php
$url = "http://www.webexterna.com/index.php";
$contenido = '';
$archivo = fopen($url, "r");
while (!feof($archivo)) 
       {
 $contenido .= fread($archivo, 8192);
}
fclose($archivo);
echo "$contenido";
?>

martes, 24 de febrero de 2015

Acortar URL en PHP con el API url shortener de Google



En este tip vamos a ver cómo acortar direcciones URL a través del API de Google en dos simples pasos. Primero activaremos el servicio en Google y obtendremos la clave necesaria para su uso, y a continuación programaremos dos sencillos scripts para echarlo a andar.

Lo primero que debemos hacer es disponer de una cuenta en Google y acceder al Área de Desarrolladores para conseguir nuestra API Key:

https://console.developers.google.com/project

En el menú "Proyectos", hacemos clic sobre "Crear Proyecto". En la pantalla emergente que nos aparece a continuación, introducimos el nombre que vamos a dar a nuestro proyecto y hacemos clic en "Crear".

Una vez creado el proyecto, accedemos al menú "APIs y autenticación" y a continuación "APIs" y buscamos "URL Shortener API".

En la siguiente pantalla, activamos el servicio. Dispondremos de un límite de 1.000.000 (un millón) de solicitudes diarias.

Una vez activado el servicio, y dentro del menú de la izquierda "APIs y autenticación", accedemos a "Credenciales" y a continuación hacemos clic en "Crear clave nueva" dentro "Acceso a API pública".

En la siguiente ventana emergente, seleccionamos "Clave de Servidor" e introducimos la IP del servidor (que podremos modificar más adelante) donde instalaremos el servicio.

Aceptamos y ya tenemos disponible nuestra API Key, del estilo:

AIzURixuB9d-deRq3_xIKUEYQoxUSTEz82osxYcTA


Con esta API Key, ya podemos programar nuestro servicio. Para ello vamos a crear dos páginas "acortador.php" (que se conectará al API de Google para acortar la URL) y "acortar.php" (que mostrará un formulario donde introduciremos la URL a  acortar).

acortar.php


<?php
include("acortador.php");
$api = new GoogleURL('AIzURixuB9d-deRq3_xIKUEYQoxUSTEz82osxYcTA');
if($_POST[url]!="")
{
$acortada=$api->encode($_POST[url]);
}
?>
<style>
body{font-family:arial;size:11px;}
input{border: solid 1px #BEBEBE;background-color:#ffffff;height:20px;padding-left:1%;padding-right:1%;font-family:'arial';}
</style>
<form name='formx2ac' method='post' action='acortar.php'>
Acortar URL: <input type='text' name='url' id='url'> <input type='submit' value='Acortar'><br>
</form>
<?php
if($acortada!="")
{
echo "<b>$acortada</b>";
}
?>




Como vemos, acortar.php no es más que un sencillo formulario que se envía a si mismo. Comprueba si ha sido introducida una URL y si es así, realiza una solicitud al API de Google:

$acortada=$api->encode($_POST[url]);


Recordad modificar el valor de esta variable, con el API Key obtenido en los pasos anteriores:
$api = new GoogleURL('AIzURixuB9d-deRq3_xIKUEYQoxUSTEz82osxYcTA');


almacenando el resultado en la variable "$acortada", que mostraremos a continuación.

acortador.php

<?php
class GoogleURL
{
 
private $apiURL = 'https://www.googleapis.com/urlshortener/v1/url';
 
function __construct($apiKey)
{
  //creamos la url de solicitud con nuestra key pública
  $this->apiURL = $this->apiURL . '?key=' . $apiKey;
}
 
//convierte una url larga en una corta
public function encode($url)
{
  $data = $this->cURL($url, true);
  return isset($data->id) ? $data->id : '' ;
}
 
//convierte una url corta en la real (larga)
public function decode($url)
{
  $data = $this->cURL($url, false);
  return isset($data->longUrl) ? $data->longUrl : '' ;
}
 
//enviamos y recogemos los datos del api de google
private function cURL($url, $post = true)
{
  $ch = curl_init();
  if ($post) {
   curl_setopt( $ch, CURLOPT_URL, $this->apiURL );
   curl_setopt( $ch, CURLOPT_HTTPHEADER, array('Content-Type: application/json') );
   curl_setopt( $ch, CURLOPT_POST, true );
   curl_setopt( $ch, CURLOPT_POSTFIELDS, json_encode(array('longUrl' => $url)) );
  }
  else {
   curl_setopt( $ch, CURLOPT_URL, $this->apiURL . '&shortUrl=' . $url );
  }
  curl_setopt( $ch, CURLOPT_RETURNTRANSFER, true );
  curl_setopt( $ch, CURLOPT_SSL_VERIFYPEER, false );
  $json = curl_exec($ch);
  curl_close($ch);
  return (object) json_decode($json);
}
}

?>

Y ya estaría montado nuestro sistema para acortar URLs


Podéis obtener  más información en:
https://developers.google.com/url-shortener/

lunes, 23 de febrero de 2015

Herramientas para verificar si los servidores nos consideran SPAM



Habitualmente los proveedores de servicio de correo se basan en listas de spammers para bloquear el acceso de correos entrantes a los mismos. Si nuestro host se encuentra en una de estas listas, podemos tener un pequeño problema.

Si nos encontramos en esta tesitura o si simplemente queremos asegurarnos de que nuestros correos no son considerados como spam, lo primero que debemos comprobar es que no nos encontramos en estas listas.

Como primer paso, vamos a verificar que nuestro dominio no se encuentra en la lista de Spamhaus.

Spamhaus es una base de datos de direcciones IP consideradas como ilícitas o generadoras de spam.

Accedemos a spamharus.org y a continuación, hacemos click sobre Blocklist Removal Center, donde introduciremos nuestro nombre de host o IP y nos mostrará si hemos sido incluidos en la lista negra o no. En el caso de encontrarnos incluidos, podremos solicitar el desbloqueo desde el formulario destinado a tal efecto en esta pantalla.

Otra utilidad muy interesante es http://mxtoolbox.com/.

Podemos chequear nuestro dominio introduciendo en el navegador:


Nnos mostrará una relación de las principales listas negras de spamers y si nuestro dominio se encuentra incluido en ellas o no.

En el peor de los casos, deberemos acceder a cada lista en la que nos encontremos y tratar de "salir" de las mismas (a parte de todas las acciones que tengamos que definir en nuestro dominio para no volver a entrar).




domingo, 22 de febrero de 2015

Mostrar número de archivos de un directorio en Linux



Conocemos el comando ls en linux, para mostrar el contenido de un determinado directorio y ls -la para mostrar, a parte del nombre de los archivos, alguna de sus características como los permisos asignados a cada uno.

Utilizando la opción -R, el listado se convierte en recursivo:

 ls -la -R nos mostrará el contenido de nuestro directorio y de todos los que contenga.

Si queremos contar el número de archivos que contiene nuestro directorio (o de forma recursiva con el modificador -R) utilizaremos el comando wc de la siguiente forma:

ls  | wc -l

mostrará el número de archivos del directorio donde nos encontramos.

Si deseamos mostrar el número de archivos de un determinado directorio de forma recursiva, utilizaremos:

ls -R /home/llercia/Escritorio/ejemplo  | wc -l

sábado, 21 de febrero de 2015

Instalar y configurar FireStarter como Firewall de Ubuntu



En este Tip vamos a instalar FireStarter, un estupendo y sencillo firewall de Linux, que nos permitirá configurar reglas y bloquear o permitir conexiones remotas hacia y desde nuestro equipo.

FireStarter es un firewall de código abierto que nos permitirá configurar nuestras iptables de una manera gráfica, olvidándonos del terminal para esta tarea.

Para instalarlo, abrimos la consola y ejecutamos:

sudo apt-get install firestarter

Una vez instalado, podemos ejecutarlo desde el terminal ejecutando :

sudo firestarter

o haciendo clic en el icono que encontraremos en el menú Aplicaciones > Herramientas de Sistema > Administración > Firestarter


Configurando reglas en Firestarter

Vamos a bloquear todos los accesos salientes vía web (protocolo HTTP) hacia por ejemplo www.sgae.es, (por decir una al azar...)

1.- Ejecutamos Firestarter. Si es la primera vez que accedemos, nos mostrará el asistente, que podemos cancelar con tranquilidad.

2.- Una vez dentro del programa, activamos el firewall (Menú Cortafuegos > Iniciar el cortafuegos) o pulsando el botón de incio. Si en este punto no nos detecta la tarjeta de red, podemos seleccionarlo en el menú Editar > Preferencias > Cortafuegos > Configuraciones de Red.

3.- Ya se encuentra activo. Ahora vamos a la pestaña "Normativa". Seleccionamos del desplegable en este caso "Normativa para el tráfico saliente", y marcamos el check  "Permisivo por omisión, tráfico en lista negra"

4.- Y con esto, pulsamos el botón derecho del ratón sobre el cajetín de "Denegar conexiones al host" y añadimos el host (sgae.es), y/o la ip  que deseamos bloquear.

5.- Ya por último, hacemos clic en el check verde que nos aparece para confirmar la regla.

6.- Por último reiniciamos Firestarter si observamos que los cambios no aplican.

Evidentemente, en este tip estamos bloqueando las conexiones salientes de nuestro equipo para poder probarlo de una manera sencilla, pero la verdadera gracia de un firewall es establecer reglas de bloqueo de las conexiones entrantes, lo que se haría de idéntica manera.



viernes, 20 de febrero de 2015

Detectar país y establecer zona horaria en PHP




En ocasiones nos encontramos que tenemos una web con varios lenguajes para distintos países y/o que la hora del servidor no coincide con el uso horario del país donde nos encontramos.

En este caso, podemos definir el uso horario que utilizará nuestro sitio, prevaleciendo sobre el definido en el servidor.

La función a utilizar es date_default_timezone_set. Su uso es muy sencillo:

<?php
//El servidor tiene configurada la hora local de España
echo date("d-m-Y H:i:s")."<br>";
date_default_timezone_set("Mexico/General");
echo date("d-m-Y H:i:s");
?>

nos devuelve:

19-02-2015 18:19:51
19-02-2015 11:19:51

Podemos ver todos los timezone en php.net (http://php.net/manual/es/timezones.php).

Obtener datos de geolocalización del usuario

Para obtener los datos de geolocalización del usuario que visita nuestra web, utilizaremos la función   geoip_country_code3_by_name

<?php
$nato= geoip_country_code3_by_name($_SERVER['REMOTE_ADDR']);
echo "Código Nato: $nato";
?>

En este caso devolvería: 

Código Nato: ESP

Lo que nos devuelve el código NATO de la localización física del usuario. En función de este código de país NATO (abreviatura inequívoca de tres caracteres identificativa de cada país).

Podéis encontrar la relación completa de códigos de países NATO en:



Obteniendo el código NATO del usuario, podemos relacionarlo de manera sencilla con su timezone y así personalizar el uso horario de nuestra web en función de la geolocalización de nuestros usuarios.




jueves, 19 de febrero de 2015

La caché de Facebook, requisitos y código HTML de la imagen a compartir



Facebook, guarda en caché las imágenes de nuestras webs. Esto quiere decir, que si modificamos una imagen en la misma y los usuarios hacen "clic" en compartir en Facebook, lo más probable es que publiquen la imagen cacheada y no la actual.

Existe una manera de limpiar este caché de facebook, para que el próximo usuario que comparta nuestra noticia, producto... en Facebook comparta nueva imagen.

Esta URL mencionada es:

https://developers.facebook.com/tools/debug/

Introducimos en el cuadro de búsqueda nuestra URL y pulsamos el botón "Debug".

A continuación nos indicará si la imagen contenida en la URL indicada se encuentra en el caché de Facebook, problemas que pueden ser corregidos en la  URL o la vista previa de cómo compartirían los usuarios tu contenido.

Cabe destacar, que la imagen que queremos, se comparta en Facebook ha de tener al menos 300 px de ancho.

Si tengo varias imágenes en una página ¿Cómo indicar a FB cual quiero compartir?

Es muy sencillo. Para ello disponemos de la meta tag: og:image, indicándole la URL absoluta de la imagen a compartir.

<meta property="og:image" content="http://la_url_completa_de_la_imagen.jpg">




viernes, 13 de febrero de 2015

Cómo matar procesos en Ubuntu



Ubuntu es un SO muy estable pero en ocasiones puede quedarse bloqueada alguna aplicación que estemos corriendo. Existen varias formas de cerrar estos procesos durmientes en Linux:


Ejecutando xkill desde la terminal, nuestro puntero se convertirá en una X, permitiéndonos cerrar de forma gráfica cualquier ventana que tengamos abierta en nuestro escritorio.

Otra forma de terminar procesos, es visualizar la lista de los mismos mediante el comando ps aux y a continuación "matar" el proceso mediante el uso de:

kill id_del_proceso que nos muestra el comando anterior o pkill nombre_del_proceso

También podemos hacer uso del comando kill all

Ej.- killall thunderbird

Con ello nos aseguramos el eliminar una determinada aplicación y todos sus nodos relacionados.

Ubuntu nos proporciona otra forma sencilla de cerrar procesos, al estilo Windows, accediendo al menú:

Aplicaciones > Herramientas del Sistema > Administración > Monitor del sistema > Procesos

Seleccionamos el proceso a eliminar, y pulsamos el botón "Finalizar Proceso".


jueves, 12 de febrero de 2015

Instalar Glipper en Ubuntu, un portapapeles completo.



Glipper es un sencillo pero útil portapapeles para Ubuntu, que permite mantener un historial del texto copiado mientras trabajamos, para volver a reutilizarlo en cualquier momento.

Podemos instarlo desde nuestro terminal:

sudo apt-get install glipper

Una vez instalado, no nos aparecerá de forma inmediata en ningún menú. Para activarlo, pulsamos ALT+F2 para abrir la pantalla "Ejecutar una aplicación" e introducimos: glipper para ejecutarlo.

A partir de este momento, ya tenemos accesible Glipper a través de un pequeño icono en el área de notificaciones, mostrándonos al hacer clic sobre el mismo, los últimos textos copiados.

Su configuración es muy sencilla. Haciendo clic sobre el icono, y pulsando "Preferencias", nos muestra la pantalla de configuración, donde podemos configurar por ejemplo el número de registros (entre 0 y 100) que guardará nuestro historial.



Otra opción curiosa, es que permite guardar textos sin falta de copiarlos. Basta únicamente con seleccionarlos. Selection (mark/middle mouse button)





miércoles, 11 de febrero de 2015

Copiar y Pegar en el Terminal de Ubuntu mediante combinaciones de teclas



Los clásicos CTRL+c y CTRL+v , copiar y pegar mediante combinación de teclas, no son válidos en el terminal de nuestro Ubuntu ya que, por ejemplo, CTRL+c es utilizado para finalizar una tarea que se está ejecutando.

Para las acciones de copiar / pegar, Ubuntu utiliza las siguientes combinaciones de teclas:

Copiar: MAYUS+CTRL+c
Pegar: MAYUS+CTRL+v

Para modificar estas combinaciones de teclas en nuestra terminal, podemos acceder al menú Editar > Combinaciones de teclas.

También podemos modificar las combinaciones de teclas del terminal, y muchas más configuraciones, a través del Editor de Configuración, tecleando en el terminal el comando:

gconf-editor

Accedemos a la herramienta y posteriormente a gnome-terminal > keybindings

martes, 10 de febrero de 2015

Bloquear Bots en Apache mediante .htaccess



Existen diversos bots, spiders... que purulan por la red y que pueden provocar problemas en nuestro sitio web ya que pueden ralentizar la ejecución de las páginas y consumir nuestro preciado ancho de banda al efectuar rastreos recursivos en las mismas.

Podemos utilizar nuestro archivo .htaccess para bloquear a estos bots, de varias maneras.

1.- Bloqueo por IP o rango de IP's

<Limit GET POST>
order allow,deny
deny from 88.84.78.131
deny from 198.27.64.
allow from all
</Limit>

Con ello bloqueamos cualquier petición, ya sea por GET o por POST procedente de la ip 88.84.78.131 y del rango de IP's  198.27.64.xxx y permitiendo el acceso a los demás.

2.- Bloqueo por nombre de agente

Podemos bloquear los diversos spammers, bots, spiders... por su nombre y redireccionarlos a una página de error 403.

RewriteEngine on
RewriteBase /
RewriteCond %{HTTP_USER_AGENT} almaden [OR]
RewriteCond %{HTTP_USER_AGENT} ^Anarchie [OR]
RewriteCond %{HTTP_USER_AGENT} ^ASPSeek [OR]
RewriteCond %{HTTP_USER_AGENT} ^attach [OR]
RewriteCond %{HTTP_USER_AGENT} ^autoemailspider
RewriteRule ^.* - [F,L]

lunes, 9 de febrero de 2015

Cómo matar procesos en MySQL



En ocasiones, la ejecución de scripts en nuestra base de datos MySQL se puede ver ralentizada por múltiples causas, como la falta de optimización de las consultas o una alta carga de procesos corriendo, lo que produce que los nuevas consultas se queden "a la cola" esperando ser ejecutadas con la consecuencia ralentización del sistema.

Podemos ver los procesos que tenemos corriendo en nuestro servidor MySQL, accediendo mediante SSH ( Ver el tip anterior de cómo conectarse a mysql mediante ssh) y ejecutando el comando :

show processlist;

Nos mostrará la relación de procesos que se están ejecutando en el servidor, con su identificador,  su tiempo de ejecución y la consulta ejecutada. Esta consulta, si es muy larga, se puede ver truncada. Para ver las consultas completas, utilizaremos:

show full processlist;

Para "matar" un proceso, primero debemos conocer su id mediante el comando anterior y a continuación eliminarlo con:

kill identificador_proceso;

Ej.- kill 298188;

Pero este es un proceso tedioso, ya que si necesitamos matar 20 ó 30 consultas, se nos puede hacer eterno.

Podemos simplificar el proceso, mostrando en pantalla la lista de procesos a "matar" con una sencilla consulta:

select concat('KILL ',id,';') from information_schema.processlist where user='nombre_usuario_bbdd';

Nos mostrará la relación de consultas a eliminar, con lo que sólo tenemos que copiar/pegar:









domingo, 8 de febrero de 2015

Cómo conectarse a MySQL mediante SSH



Conectarse a nuestro servidor de bases de datos MySQL mediante terminal es muy sencillo.

Lo primero que tenemos que comprobar es que tenemos habilitado el acceso por SSH en nuestro servidor, así como los datos de acceso al mismo.

Para conectarnos, abrimos la terminal y nos conectamos al servidor:

ssh nombre_usuario@40.11.52.233

Tras introducir la contraseña que nos solicita el servidor, ya estamos dentro.

Ya sólo nos queda conectarnos a MySQL:

mysql --host=127.0.0.1 --user=nombre_usuario --password=mipassword

utilizaremos como host, el local (127.0.0.1), nuestro nombre de usuario y contraseña de la base de datos.

Y listo! Ya podemos ejecutar consultas MySQL directamente en nuestro servidor.

sábado, 7 de febrero de 2015

Historial de comandos en Ubuntu



En ocasiones, cuando trabajamos con consola en Ubuntu, nos es necesario introducir un comando utilizado con anterioridad. Mediante las teclas "arriba" y "abajo", podemos visualizar las últimas órdenes introducidas en el terminal, pero si  por ejemplo lo hemos utilizado hace un mes, esta tarea se vuelve tediosa.

Ubuntu almacena todos los comandos introducidos por consola en un archivo de texto: .bash_history

Para visualizar a este archivo:

  1. Accedemos a nuestra carpeta personal
  2. Desplegamos el menú "Ver" y seleccionamos la opción "Mostrar archivos ocultos"
  3. Abrimos el archivo .bash_history
¿cómo saber cuantos registros nos guarda Ubuntu en el historial de comandos? Este valor se encuentra definido en la variable HISTFILESIZE

Para conocerlo, podemos acceder a la terminal CRTL+ALT+T  e introducir:

set | grep HISTFILESIZE


Podemos modificar el número de registros que nos guarda el historial mediante el comando:

HISTFILESIZE=3000
Así mismo, podremos visualizar y definir la ruta del archivo de historial, mediante la variable HISTFILE:

set | grep HISTFILE

Uso del comando history en el terminal

Podemos visualizar los últimos comandos utilizados mediante el uso de history,  que mostrará el historial completo.

Para visualizar, por ejemplo, los últimos 20 registros del historial, utilizaremos history 20

Para limpiar el historial completo, podemos utilizar history -c

Y por último, otro uso interesante del comando history, es que podemos hacer una búsqueda de un comando concreto utilizado con anterioridad. Por ejemplo, si deseamos que nos muestre todos los comandos utilizados que contengan la palabra "apt", utilizaremos:

history | grep apt

jueves, 5 de febrero de 2015

Añadir texto al contenido existente de un campo en mysql



En este tip vamos a comentar cómo añadir contenido mediante una sentencia sql al texto existente en el campo mediante el uso de UPDATE y CONCAT. Si únicamente utilizáramos UPDATE, sustituiría el contenido entero del campo. De esta forma lo concatena (delante o detrás) al texto existente.

Imaginemos tenemos una tabla "paises", con dos campos "id" y "denominacion"

con los siguientes valores:

iddenominacion
1España
2Portugal
3Francia

y queremos añadir el texto "CE" después de la denominación.  El procedimiento sería muy sencillo:

UPDATE paises
SET denominacion = CONCAT(denominacion, '  CE');

El resultado sería:

iddenominacion
1España CE
2Portugal CE
3Francia CE

Si queremos añadir el texto al principio de la cadena, bastaría con modificar el orden:

 CONCAT(' CE ',denominacion);

Esta función es muy útil no sólo para actualizar, sino para mostrar texto concatenado de varios campos en uno sólo:

SELECT CONCAT(nombre_comercial, ' ', cif) AS denominacion FROM empresas;

miércoles, 4 de febrero de 2015

Pagos fraccionados en PayPal



PayPal acepta el pago por suscripción , o pagos periódicos, que podemos programar de forma sencilla desde nuestro site.

El siguiente código ilustra un ejemplo de pago con las siguientes características:

<form action="https://www.paypal.com/cgi-bin/webscr" method="post" name='form'>
<input type="hidden" name="cmd" value="_xclick-subscriptions">
<input type="hidden" name="business" value="y@mail.com">
<input type="hidden" name="item_name" value="nombre_producto">
<input type="hidden" name="item_number" value="493">
<input type="hidden" name="quantity" value="1">
<input type="hidden" name="custom" value="493_119">
<input type="hidden" name="currency_code" value="EUR">
<input type="hidden" name="amount" value="210">
<input type="hidden" name="a3" value="105.00">
<input type="hidden" name="p3" value="1">
<input type="hidden" name="t3" value="M">
<input type="hidden" name="srt" value="2">
<input type='submit' value='Pagar'>
</form>

EXPLICACION

  • cmd: indica el tipo de pago. En este caso, al ser un pago periódico, utilizaremos  el valor _xclick-subscription
  • business: e-mail del vendedor
  • item_name: nombre del artículo o suscripción
  • item_number: identificador numérico del artículo / suscripción
  • quantity: cantidad (en número)
  • custom: variable personalizada.
  • currency_code: código de moneda. 
  • amount: importe total (sin símbolo de moneda)
  • a3: importe de cada una de las cuotas
  • p3: periodo de tiempo entre cada pago. 
  • t3:  periodo de tiempo (D=días, W=semanas, M=meses, Y=años)
  • srt: número de pagos (si no pasamos esta variable, la suscripción es indefinida)
  • 
    
    
    
    Así pues, en el ejemplo expuesto a continuación, realizaríamos dos pagos (srt) mensuales (t3) cada 1 (p3) mes (t3), por importe de 105.00 (a3) euros (currency_code), por un importe total de 210 (amount) euros.

    Recorrer todas las variables POST o GET en PHP



    En ocasiones, al recibir el contenido de un formulario HTML o al recibir una petición mediante URL, no conocemos el nombre de las variables que vamos a recibir.

    Para ello, disponemos de la variable superglobal $_POST (o $_GET si la petición es a través de URL), en la cual se encuentran contenidas todas las variables recibidas.

    Imaginemos que tenemos un formulario con 10 variables, generadas dinámicamente:

    <form name='test' method='post' action='<?php echo "$PHP_SELF";?>'>

    <?php

    for($i=1;$i<11;$i++)
    {
    echo "Var $i <input type='text' name='variable_".$i."' size='20'><br>";
    }

    echo "<input type='submit' value='Enviar'>";

    ?>


    </form>

    Recogeremos estas variables utilizando $_POST, con un sencillo bucle que lo recorra y nos muestre el resultado por pantalla:


    <?php

    foreach($_POST as $nombre_variable => $valor_variable){

    echo $nombre_variable."=".$valor_variable."</br>";



    ?>

    mostrándonos por pantalla, el par nombre / valor de cada una de las variables.

    martes, 3 de febrero de 2015

    Apagar y reiniciar Ubuntu desde el terminal



    El procedimiento para reiniciar y apagar nuestro linux desde consola es muy sencillo. El comando para realizar esta tarea es: shutdown. Ni que decir tiene que debemos tener permisos de Administración para llevar a cabo esta acción.

    Para apagar el sistema de forma inmediata:

    sudo shutdown -h now  o sudo reboot

    Para reiniciar linux inmediatamente:

    sudo shutdown -r now

    Si queremos programar el apagado de nuestro equipo a una hora determinada, utilizaremos:

    sudo shutdown -h 12:03 "mensaje de apagado"

    Mostrará a cualquier usuario del sistema un mensaje de advertencia del apagado unos minutos antes.

    Si por otra parte deseamos reiniciar (o apagar cambiando -r por -h) nuestro sistema dentro de xx minutos, utilizaremos:

    sudo shutdown -r +30

    lo que provocará el reinicio de nuestro equipo 30 minutos después.

    lunes, 2 de febrero de 2015

    Buenas y malas prácticas contando registros en MySql con PHP


    Casi en cualquier ocasión nos encontramos con la necesidad de contar registros de una consulta mysql con PHP.

    Lo peor que podemos hacer es contar los registros mediante la sentencia count(*)

    Ej.- select count(*) from provincias.

    La ejecución de esta consulta consume muchos recursos en el servidor de bases de datos.

    Podemos mejorarla, indicando únicamente un campo, en este caso el identificador primario de la tabla:

    Ej.- select count(id) from provincias

    Aún mejor que esta fórmula, es utilizar mysql_num_rows

    $query_provincias="select id,nombre from provincias";
    $result_provincias=mysql_query($query_provincias,$link) or die ("error");
    $numero_filas = mysql_num_rows($result_provincias);

    while($row_provincias=mysql_fetch_array($result_provincias))
    {
    //mostramos los datos
    }
    echo "El número total de resultados es".$numero_filas;

    Esta función nos devuelve de forma rápida el número de filas de la consulta PERO condicionado por el limitador de resultados si lo incluimos en la consulta.

    Es decir. Si en la consulta indicamos que se muestren sólo 20 registros:
    $query_provincias="select nombre from provincias limit 0,20";
    la variable $numero_filas, nos devolvería 20 como resultado.

    La mejor forma y la más rápida de contar registros es utilizar la función la función SELECT SQL_CALC_FOUND_ROWS combinada con SELECT FOUND_ROWS(). Con ello obtendremos el número total de registros que generaría la consulta sin importar que esta lleve limit o no.

    $query_provincias="select SQL_CALC_FOUND_ROWS id,nombre from provincias";
    $result_provincias=mysql_query($query_provincias,$link) or die ("error");
    $rt = mysql_fetch_row(mysql_query("SELECT FOUND_ROWS()")); // Total de registros

    while($row_provincias=mysql_fetch_array($result_provincias))
    {
    //mostramos los datos
    }
    echo "El número total de resultados es".$rt[0];

    domingo, 1 de febrero de 2015

    Instalar HandBrake para ripear DVD en Ubuntu



    En ocasiones puede ser útil realizar una copia de seguridad de nuestros propios DVD. Ubuntu no dispone de este tipo de herramientas por defecto, así que instalaremos HandBrake para ello.

    Lo primero es añadirlo a nuestro repositorio:

    $ sudo add-apt-repository ppa:stebbins/handbrake-releases

    A continuación, actualizamos nuestro repositorio:

    $ sudo apt-get update

    e instalamos HandBrake:

    $ sudo apt-get install handbrake-gtk

    Una vez instalado el programa, vamos a instalar las librerías libdvdread4, necesarias para poder trabajar con DVD's

    sudo apt-get install libdvdread4

    Con esto ya lo tenemos todo listo para comenzar a ripear nuestro DVD.

    sábado, 31 de enero de 2015

    Instalar paquetes .rpm en ubuntu


    En ocasiones podemos encontrarnos con la necesidad de instalar paquetes .rpm en ubuntu. El procedimiento para su instalación pasa por convertirlos a un formato que Ubuntu pueda manejar, en este caso, .deb

    1. Procedemos a instalar alien, que convierte los .rpm en .deb. Para ello, abrimos consola y ejecutamos los siguientes comandos :
      1. sudo apt-get update
      2. sudo aptitude install alien ó sudo apt-get install alien
    2. Una vez instalado, simplemente ejecutamos alien y le pasamos el nombre del archivo a convertir:
      1. sudo alien flash-plugin-11.2.202.440-release.x86_64.rpm
    3. Y ya tenemos nuestro .deb, que podemos ejecutar sin ningún tipo de problema.

    viernes, 30 de enero de 2015

    Inserta tu timeline de Twitter en Blogger


    Para insertar Twitter en Blogger, sin utilizar plugins de terceros con publicidad, etc y que por el momento no proporcionan un buen servicio, el procedimiento es el siguiente:


    1. Nos logueamos en Twitter. Vamos a configuración y en la columna de la izquierda pulsamos en "Widges".  Con esto vamos a generar el componente que luego insertaremos en Blogger.
    2. Pulsamos sobre "Crear Nuevo". Seleccionamos los parámetros deseados en la pestaña "Cronología del usuario" y por último guardamos pulsando en "Crear widget". Una vez creado, copiamos el código HTML que nos genera, ya que lo utilizaremos a continuación.
    3. Ahora nos dirigimos a Blogger, nos logueamos, vamos a "Diseño", y "Añadir un gadget". 
    4. De entre los gadget que nos muestra, seleccionamos "HTML/JavaScript" (que nos permite insertar cualquier tipo de código html). Pegamos el código anteriormente copiado de twitter, guardamos y LISTO.

    Cómo eliminar un blog de Blogger



    Por si te surge la necesidad de eliminar tu blog en Blogger (un proceso nada intuitivo, todo hay que decir), los pasos son los siguientes:


    1. Nos logueamos en blogger.com, a través de nuestra cuenta Google
    2. En la pantalla principal de nuestra cuenta, nos muestra nuestro listado de blogs. Seleccionamos "configurar" en el desplegable de aquel que deseamos eliminar.
    3. En la columna de la izquierda, pulsamos en la última opción de "Configuración" : "Otros".
    4. Y es en esta pantalla donde nos muestra el enlace de "Eliminar Blog"







    Cómo asignar un rol de Global de Gestor o Tutor a un usuario en Moodle


    En Moodle, puede darse la situación de que un determinado usuario dispone de distintos permisos según el curso en que se encuentre enrolado, y se desee que este disponga de un mismo tipo de permiso (normalmente superior) para todos sus cursos.

    La forma de asignar un rol global (en todo Moodle) es muy sencilla.

    1. Accedemos a Configuraciones > Administración del sitio > Usuarios > Permisos > Asignar roles globales 
    2. Seleccionamos el rol que deseamos modificar de la lista que nos muestra.
    3. Seleccionamos el usuario al que deseamos asignar el rol seleccionado.
    Y Listo.