Categoría: Php

Lo sé, es un título confuso, y quizá en el futuro existan artículos que expliquen cómo hacer un robot electromecánico con IA (inteligencia artificial), rasgos humanos y todo eso, pero de momento habrá que conformarse.

A lo que me refiero es a un crawler, un bot, esos que recorren páginas web en busca de información, como el famoso Google bot, que indexa nuestros blogs y páginas web, u otros programados para hacer spam en blogs o trampas en los mmorpg de navegador.

Aunque carecen de IA, puede ser divertido programarlos, sobre todo por lo útil que puede llegar a ser el resultado.

Bueno, sin más dilación voy a mostrar un ejemplo muy básico de como hacer un robot utilizando una librería llamada cURL, incluida en PHP desde la versión 4, si no recuerdo mal.


Obtener el código fuente de una URL


<?php
function getSource ($url, $agente) {
$curl = curl_init(); //Nueva sesion CURL

curl_setopt ($curl, CURLOPT_URL, $url); //Direccion de destino
curl_setopt ($curl, CURLOPT_RETURNTRANSFER, 1); //Resultado en una cadena de texto
curl_setopt ($curl, CURLOPT_USERAGENT, $agente); //Agente de usuario
curl_setopt ($curl, CURLOPT_HEADER, 0); //Ocultar encabezado

$source = curl_exec ($curl); //Ejecutar sesion CURL
$code = curl_getinfo ($curl, CURLINFO_HTTP_CODE); //Obtener el código de error http
curl_close ($curl); //Cerrar sesion CURL

return ($code == 200) ? $source : 0; //Un error 200 indica que la solicitud ha tenido exito
}

$source = getSource ('http://www.dominio.com/', 'Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.1)');
?>


La función recibe una dirección y un agente de usuario, y devuelve el código fuente de esa dirección, o un cero si ha habido algún error.

Y básicamente esto es todo, una vez obtenido el código fuente tan solo necesitas imaginación y dominio de expresiones regulares. Puedes usar recursividad para hacer una araña que recorra la red almacenando información, descargarte una página web completa, y casi cualquier cosa que se te ocurra.

En los próximos artículos profundizaré un poco más en este tema, como extraer una imagen y guardarla en tu servidor, crear una araña recursiva, etc.

Después del artículo medio en broma donde explico cómo desactivar la tecla mayúscula, traigo un filtro anti mayúsculas que soluciona uno de los problemas más frecuentes que generan los HOYGANS, y otras "criaturas" similares.

Anti Mayúsculas

La función filtro anti-mayúsculas está escrita en PHP mediante lenguajes regulares.


Filtro anti-mayúsculas en PHP


Recoge una cadena de texto, comprueba si hay demasiadas palabras en mayúscula, y si es así, escribe la primera letra después de cada punto en mayúscula y el resto en minúscula.

function anti_mayusculas ($texto) {
//Calculamos la cantidad de letras y mayusculas
$letras = strlen (preg_replace ('/[^a-zA-Z]+/', '', $texto));
$mayusculas = strlen (preg_replace ('/[^A-Z]+/', '', $texto));

//Si la cantidad de mayusculas es superior al 50%, se aplica el filtro
if ((($mayusculas * 100) / $letras) >= 50) {
$origen = array ('Á', 'Ä', 'É', 'Ë', 'Í', 'Ï', 'Ó', 'Ö', 'Ú', 'Ü', 'Ñ', 'á', 'ä', 'é', 'ë', 'í', 'ï', 'ó', 'ö', 'ú', 'ü', 'ñ');
$destino = array ("'A", ":A", "'E", ":E", "'I", ":I", "'O", ":O", "'U", ":U", "'N", "'a", ":a", "'e", ":e", "'i", ":i", "'o", ":o", "'u", ":u", "'n");

//Protegemos los caracteres con tildes o dieresis
$texto = str_replace ($origen, $destino, $texto);

//Nos aseguramos que tenga un punto al final
$texto = (preg_match ('/\.$/', $texto)) ? $texto : $texto.'.';
//Convertimos a mayuscula la primera letra despues de cada punto y el resto en minuscula
$texto = preg_replace ('/([a-zA-Z])([^\.]+)\./e', "strtoupper('\\1').strtolower('\\2').'.'", $texto);

//Restauramos los caracteres con tildes o dieresis
$texto = str_replace ($destino, $origen, $texto);
}

return $texto;
}

Ahora, en la página donde recibes las variables cuando se envía un comentario, (antes de que se almacene en la base de datos), debes aplicar el filtro anti-mayúsculas. Ejemplo:

$contenido = anti_mayusculas ($_POST ['comentario']);

Ando algo ocupado estos días entre estudiar y programar, por lo que no he podido actualizar el blog.

Acabo de hacer una función que puede resultar útil en algunas ocasiones, la de convertir los códigos de colores CSS de rgb (binario) a hexadecimal.

La función dechex (); predefinida en PHP, nos facilita un poco las cosas, ya que convierte un número binario a hexadecimal.

Ahora, teniendo en cuenta que los colores Hexadecimales están compuestos por 3 números binarios (#000000) que representan los 3 colores primarios, construimos la siguiente función.



<?php
function rgbHex ($red, $green, $blue) {
$red = dechex ($red);
if (
strlen ($red) < 2) $red = '0'.$red;

$green = dechex ($green);
if (
strlen ($green) < 2) $green = '0'.$green;

$blue = dechex ($blue);
if (
strlen ($blue) < 2) $blue = '0'.$blue;

$hex = strtoupper ($red.$green.$blue);

return
"#".$hex;
}


Esta función se encarga de convertir cada uno de los 3 colores primarios de rgb a hexadecimal, además de añadir un cero en cada color en caso de que solo devuelva un número.

Podemos hacer lo contrario, en vez de pasar de rgb a hexadecimal, de hexadecimal a rgb; basta con usar la función hexdec () y cambiar un poco la función anterior.


Ejemplo


Ahora por poner un ejemplo práctico, imaginemos que queremos remplazar en un texto todos los estilos CSS que posean colores en rgb, por el formato hexadecimal.

Recurrimos, como es costumbre, a lenguajes regulares y a la función preg_replace ().



<?php
function rgbHex_
replace ($string) {
$string = preg_replace ('/\s+/', ' ', trim ($string));

$pattern = '/style="color:[\s]?rgb\(([0-9]{1,3}), ([0-9]{1,3}), ([0-9]{1,3})\);"/e';
$replacement = "'style=\"color: '.rgbHex ('\\1', '\\2', '\\3').'\"'";

return
preg_replace ($pattern, $replacement, $string);
}
?>


Espero que les haya sido de utilidad, cualquier cosa dejad un comentario.

Por muchos motivos es esencial disponer de un formulario de contacto en tu blog o página web.

En ocasiones un lector puede necesitar contactar contigo ya sea para hacer una crítica, para avisarte de posibles fallos o simplemente para preguntarte algo.

Formulario de contacto

Este tutorial explica cómo hacer un formulario de contacto usando HTML y PHP, y como validar los campos por si se equivocan al escribir algún dato.


Índice


Lo voy a dividir en 3 partes, la primera es el formulario de contacto en HTML, la segunda valida los campos en PHP, y la tercera se encarga de enviar el correo.

Formulario de contacto


A continuación pongo el formulario que puedes modificar o mejor su diseño con estilos CSS.


contacto.php


<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
<title>Formulario de contacto</title>
</head>

<body>
  <h2>Formulario de contacto</h2>
  <div style="border: #333 1px dotted; padding: 20px; width: 300px">
    <form method='post' action="enviar.php">
      <p style="font-size: 12px">Asunto</p>
      <input type="text" name="Asunto" size="30" maxlength="100"/> <br/>

      <p style="font-size: 12px">Mail</p>
      <input type="text" name="Email" size="30" maxlength="300"/> <br/>

      <p style="font-size: 12px">Mensaje</p>
      <textarea name="Mensaje" rows="10" cols="30"></textarea> <br/><br/>

      <input value="Enviar Correo" type="submit" />
    </form>
  </div>
</body>
</html>

Como puedes ver (action="enviar.php"), al pulsar el botón del formulario, accederá a la página enviar.php, enviando el valor de las variables Asunto, Email y Mensaje.

Validar el formulario


Esta función implementada en PHP, recibe un email y el mensaje y comprueba si están vacíos o si hay algún dato incorrecto.


validar.php


<?php
function validar ($mail$mensaje) {
  
$error '';

  if (! empty (
$mail)) {
    if (! 
preg_match('/^([a-z0-9._]+)@([a-z0-9.-]+).([a-z]{2,5})$/'strtolower ($mail))) {
      
$error 'Email incorrecto';
    }

    if (! empty (
$mensaje)) {
      if (
strlen ($mensaje) > '4000') {
        
$error 'El mensaje es demasiado largo';
      }
    }
    else {
      
$error 'El campo Mensaje está vacío';
    }
  }
  else {
    
$error 'El campo Email está vacío';
  }

  return 
$error;
}
?> 


Enviar el correo


Primero comprueba la IP del usuario, y la hora y fecha a la que envió el correo, después valida los datos recibidos desde formulario, con la función validar.php, y si está todo correcto guarda los datos del correo y lo envía.


enviar.php


<?php
require ('validar.php');

$hora date('H').':'.date('i').':'.date('s'); //hora del servidor
$fecha date('d').'/'.date('m').'/'.date('y'); //fecha del servidor
$IP $_SERVER['REMOTE_ADDR']; //IP Usuario

$asunto trim ($_POST['Asunto']); //Asunto del mensaje
$mail trim ($_POST['Email']); //Email del remitente
$mensaje trim ($_POST['Mensaje']); //Contenido del mensaje

$tuemail 'email'//IMPORTANTE: Escribe aquí tu email

$error validar ($mail$mensaje);

if (empty (
$error)) {
  
//Guarda los datos de la consulta en la variable $message
  
$message "
    Enviado el día "
.$fecha." a las ".$hora.".

    Email: "
.$email."
    IP: "
.$IP."

    Mensaje: 
     "
.$mensaje."";

  
//Intenta enviar el mensaje
  
if (mail ($tuemail$asunto$message"From: $mail")){
    
$error '<p>Correo enviado correctamente.</p>';
  }
  else {
    
$error 'No se ha podido enviar el correo, intentalo más tarde.';
  }
}
echo 
'<p>'.$error.'</p>';

?>



Es un ejemplo muy sencillo y está listo para funcionar, solo hay que indicar tu email ($tuemail = 'email';) y subirlo a un servidor.

Y como siempre, si tienes alguna duda, deja un comentario e intentaremos ayudarte.