Contenido

Enviar emails HTML con PHP

9 Jun

+ 18

Enviar un mail en texto con PHP es tan sencillo como usar la función mail(), que únicamente puede ocuparnos una línea de texto como esta:

mail($to, $asunto, $body, $headers);

Resalto los $headers por que son la clave para permitirnos enviar un email en HTML. En ellos indicaremos los datos que los lectores de correo deberán tener en cuenta para distinguir entre un simple email de texto y uno de HTML.

$headers = "From: " . strip_tags($from) . "\r\n";
$headers .= "Reply-To: ". strip_tags($to) . "\r\n";
$headers .= "CC: CON COPIA\r\n";
$headers .= "MIME-Version: 1.0\r\n";
$headers .= "Content-Type: text/html; charset=ISO-8859-1\r\n";

Como podemos ver en el código en negrita estamos indican que el Content-type del email es un text/html y con la codificación ISO-8859-1, además de permitir añadir un emails en copia o incluso en copia oculta.

Esto nos permitirá usar un HTML bastante limitado, pero en fin HTML para hacer nuestros emails algo más elegantes y más ordenados. Nuestro $body ya podrá contener dichos tags.

$body = '<strong>Texto en negrita</strong> este no lo es :D';

La mágia es que podemos seguir usando la misma función mail() para enviar nuestro email.
Via

Google Analytics API Class para PHP

30 May

+ 14

Hace unas semanas conocimos la noticia de Google Analytics había publicado su API pública para permitir que usáramos nuestros datos almacenados en sus servidores en nuestras aplicaciones. Si estás interesado en ella y además el lenguaje de programación que quieres usar es PHP esta class hará tu vida más fácil.

<?php
// include the Google Analytics PHP class
include "googleanalytics.class.php";

// create an instance of the GoogleAnalytics class using your own Google {email} and {password}
$ga = new GoogleAnalytics('{email}','{password}');

// set the Google Analytics profile you want to access - format is 'ga:123456';
$ga->setProfile('{GA Profile ID}');

// set the date range we want for the report - format is YYYY-MM-DD
$ga->setDateRange('2009-04-01','2009-04-07');

// get the report for date and country filtered by Australia, showing pageviews and visits
$report = $ga->getReport(
	array('dimensions'=>urlencode('ga:date,ga:country'),
		'metrics'=>urlencode('ga:pageviews,ga:visits'),
		'filters'=>urlencode('ga:country=@Australia'),
		'sort'=>'-ga:pageviews'
		)
	);

//print out the $report array
print_r($report);
?>

Modo de empleo

Como vemos en el código, además de llamar a la class al inicio del fichero declaramos una nueva instancia del objeto GoogleAnalytics, al que le pasamos los parámetros de email y password, los que usamos para hacer login en Google Analytics. Despues indicamos el perfil del que queremos obtener datos. Este perfil lo podemos obtener de la misma página de Google Analytics. Simplemente hace referencia al ID asociado a la página web que vemos en el menú, en la URL podemos encontrarlo fácilmente.

ga-url
(Ver Imagen)

El formato requerido es el siguiente: ga:XXXXXX donde XXXXXX es el id que vemos arriba en la imagen.

Ya solo nos queda indicar un rango de fechas en formato YYYY-MM-DD y lanzar la petición de lo que queremos solicitar.

$report = $ga->getReport(
	array('dimensions'=>urlencode('ga:date,ga:country'),
		'metrics'=>urlencode('ga:pageviews,ga:visits'),
		'filters'=>urlencode('ga:country=@Australia'),
		'sort'=>'-ga:pageviews'
		)
	);

El resultado lo recibimos como un array con los datos solicitados.

Array
(
    [20090406~~Australia] => Array
        (
            [ga:pageviews] => 11
            [ga:visits] => 9
        )

    [20090401~~Australia] => Array
        (
            [ga:pageviews] => 8
            [ga:visits] => 6
        )

    [20090402~~Australia] => Array
        (
            [ga:pageviews] => 8
            [ga:visits] => 4
        )

    [20090405~~Australia] => Array
        (
            [ga:pageviews] => 4
            [ga:visits] => 2
        )

    [20090407~~Australia] => Array
        (
            [ga:pageviews] => 4
            [ga:visits] => 2
        )

    [20090403~~Australia] => Array
        (
            [ga:pageviews] => 2
            [ga:visits] => 2
        )

)

396 funciones de PHP portadas a Javascript

27 May

+ 3

Los desarrolladores de PHP nunca tuvieron una oportunidad más buena de usar Javascript. En PHPJS, han recopilado ya más 390 funciones de PHP y las han migrado a Javascript. Con el fín de hacer su uso más sencillo. Impresionante como han añadido más de 300 en poco más de 1 año.

Crea un chat como el de gMail/Facebook con jQuery

15 May

+ 9

Si estás buscando un chat para tu aplicación web, no dejes pasar este similar a los implementados en gMail o Facebook. Se trata de una implementación con jQuery y PHP que nos facilitará el trabajo de crearlo desde 0 nosotros mismo. El resultado, lo puedes ver en este ejemplo.[Descargar]

myTinyTodoList, completa y sencilla todolist en PHP

3 May

+ 4

Max Pozdeev publica este pequeño script que nos permite montar una TODO list (Lista de tareas) en PHP y jQuery. Se trata de una lista bastante completa y sencilla de usar que a más de uno nos ayudaría a tener administradas las tareas pendientes.[Demo][Descargar]

Obtener la IP del usuario mediante PHP

23 Abr

+ 7

Este código está por internet repetido una infinidad de veces, pero siempre que lo busco no lo encuentro. Así que me lo dejo aquí para futuros usos.

getIP()

Se trata de una función que obtiene la «IP real» ( o por lo menos la más acertada ) del usuario que te está visitando.

function getIP(){
    if( isset( $_SERVER['HTTP_X_FORWARDED_FOR'] )) $ip = $_SERVER['HTTP_X_FORWARDED_FOR'];
    else if( isset( $_SERVER ['HTTP_VIA'] ))  $ip = $_SERVER['HTTP_VIA'];
    else if( isset( $_SERVER ['REMOTE_ADDR'] ))  $ip = $_SERVER['REMOTE_ADDR'];
    else $ip = null ;
    return $ip;
}

REMOTE_ADDR

Por defecto, el lugar en el que encontramos la IP del cliente. Aunque, no siempre es la más exacta…

HTTP_X_FORWARDED_FOR y HTTP_VIA

Ambas se encargan de recoger datos enviados por servidores proxy. En ellos encontraremos datos más exactos de la IP del usuario. En caso de que el visitante llegué atraves de un proxy estas variables nos devolverán la ruta de IP’s necesarias para llegar a la IP real.

Todo dependerá de la configuración del proxy ya que depende del tipo y de la configuración aplicada que nos lleguen una, dos o ninguna informadas.En 25fps48khz nos lo explican perfectamente.

Geolocalización gratis con PHP

14 Abr

+ 13

Hace unos días que se viene hablando de iplocationtools, una aplicación gratuita que nos permite obtener datos sobre la geolocalización de una IP(en mi caso me ha ubicado en otro pais… así que no me fio mucho).

Inicialmente la aplicación está pensada para devolvernos los datos mediante una petición GET, así que unas pocas líneas de código podrían mostrarnos una serie de datos muy interesantes de nuestros usuarios.


<?php
    function get_ip_location($ip, $format="xml") {
        $formats_allowed = array("json", "xml", "raw");
        $query_url = "http://iplocationtools.com/ip_query.php?ip=";
        if(!in_array($format, $formats_allowed)) {
            $format = "xml";
        }
        $query_url = $query_url . "{$ip}&output={$format}";
        $ch = curl_init();
        curl_setopt($ch, CURLOPT_URL, $query_url);
        curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);
        curl_setopt($ch, CURLOPT_TIMEOUT, 15);
        return curl_exec($ch);
    }
?>

Modo de empleo

Este script, nos permite obtener los datos en 3 formatos diferentes, dependiendo del valor que le pasemos como segundo parámetro a la función get_ip_location().

// XML
  $location_data = get_ip_location("209.85.153.104");
  print_r($location_data);
// Respuesta
<Response>
	<Ip>209.85.153.104</Ip>
	<Status>OK</Status>
	<CountryCode>US</CountryCode>
	<CountryName>United States</CountryName>
	<RegionCode>06</RegionCode>
	<RegionName>California</RegionName>
	<City>Mountain View</City>
	<ZipPostalCode>94043</ZipPostalCode>
	<Latitude>37.4192</Latitude>
	<Longitude>-122.057</Longitude>
</Response>

//JSON
  $location_data = get_ip_location("209.85.153.104", "json");
  print_r($location_data);
//Respuesta
{
	"Ip" : "209.85.153.104",
	"Status" : "OK",
	"CountryCode" : "US",
	"CountryName" : "United States",
	"RegionCode" : "06",
	"RegionName" : "California",
	"City" : "Mountain View",
	"ZipPostalCode" : "94043",
	"Latitude" : "37.4192",
	"Longitude" : "-122.057",
}

// RAW
  $location_data = get_ip_location("209.85.153.104", "raw");
  print_r($location_data);
// Respuesta
  209.85.153.104,OK,US,United States,06,California,Mountain View,94043,37.4192,-122.057

[Descargar]

Ecoder, el editor de PHP escrito en Javascript

24 Mar

+ 7

Ecoder, es una aplicación escrita en PHP y Javascript que nos podemos descargar y con la que podremos editar los ficheros PHP de nuestro servidor directamente desde nuestro navegador.

ecoder
(Ver Imagen)

Puedes probarlo directamente desde la página oficial y descargarlo para usarlo en tu web directamente desde aqui.

User twitter para controlar los errores de tus apps

18 Mar

+ 10

Lo que no se pueda hacer con twitter no se puede hacer con ninguna otra aplicación y es que es una idea tan simple que cualquier idea se puede adaptar a él.

Lo último es usarlo como log de errores de aplicaciones, y en un principio pensé:

No creo que ayude a nadie que entre «Me voy a comer!!» y «Acabo de llegar a casa, que cansado estoy» veamos un «Error en aNieto2k – El login introducido es incorrecto».

Pero profundizando más en la idea, puede ser interesante, tener un usuario recopilatorio en el que meter todos los errores detectados en todas tus aplicaciones. O incluso enviarte mensajes directos usando la api de Twitter.

function tweet_error ($error, $description) {
	$username = 'yourusername';
	$password = 'yourpassword';
	$status = "#$error - $description";

	$update_url = 'http://www.twitter.com/statuses/update.xml'; // http://identi.ca/api/statuses/update.xml will use identi.ca instead.

	$curl = curl_init();
	curl_setopt($curl, CURLOPT_URL, "$update_url");
	curl_setopt($curl, CURLOPT_CONNECTTIMEOUT, 2);
	curl_setopt($curl, CURLOPT_RETURNTRANSFER, 1);
	curl_setopt($curl, CURLOPT_POST, 1);
	curl_setopt($curl, CURLOPT_POSTFIELDS, "status=$status");
	curl_setopt($curl, CURLOPT_USERPWD, "$username:$password");

	$result = curl_exec($curl);
	$resultArray = curl_getinfo($curl);

	curl_close($curl);

	return ($resultArray['http_code'] == 200);
}
// Modo de empleo
tweet_error("404", $_SERVER[SCRIPT_URL]);

Si queremos enviar un mensaje directo tendremos que modificar un poco la función.

function tweet_error($error, $description, $user) {
	$username = 'yourusername';
	$password = 'yourpassword';
	$status = "#$error - $description";

	$update_url = 'http://twitter.com/direct_messages/new.xml';
	$curl = curl_init();
	curl_setopt($curl, CURLOPT_URL, "$update_url");
	curl_setopt($curl, CURLOPT_CONNECTTIMEOUT, 2);
	curl_setopt($curl, CURLOPT_RETURNTRANSFER, 1);
	curl_setopt($curl, CURLOPT_POST, 1);
	curl_setopt($curl, CURLOPT_POSTFIELDS, 'user='.urlencode($user)."text=$status");
	curl_setopt($curl, CURLOPT_USERPWD, "$username:$password");

	$result = curl_exec($curl);
	$resultArray = curl_getinfo($curl);

	curl_close($curl);

	return ($resultArray['http_code'] == 200);
}
// Modo de empleo
tweet_error("404", $_SERVER[SCRIPT_URL], "anieto2k");

Si a esto le añadimos el uso de set_error_handler() de php podemos conseguir que nos avise automáticamente de los errores que se está produciendo en nuestras aplicaciones.

function tweet_error ($num_err, $cadena_err, $archivo_err, $linea_err) {
	$username = 'yourusername';
	$password = 'yourpassword';
	$status = "#$num_err - $cadena_err ($archivo_err:$linea_err)";

	$curl = curl_init();
	curl_setopt($curl, CURLOPT_URL, 'http://www.twitter.com/statuses/update.xml');
	curl_setopt($curl, CURLOPT_CONNECTTIMEOUT, 2);
	curl_setopt($curl, CURLOPT_RETURNTRANSFER, 1);
	curl_setopt($curl, CURLOPT_POST, 1);
	curl_setopt($curl, CURLOPT_POSTFIELDS, "status=$status");
	curl_setopt($curl, CURLOPT_USERPWD, "$username:$password");

	$result = curl_exec($curl);
	$resultArray = curl_getinfo($curl);

	curl_close($curl);

	return ($resultArray['http_code'] == 200);
}

set_error_handler("tweet_error");
// Parámetros enviados por el callback de set_error_handler ($num_err, $cadena_err, $archivo_err, $linea_err)

20+ librerías PHP para usar cada día

18 Mar

+ 14

Las librerías están ahí para usarlas. Cuando el tiempo es un factor determinante de nuestros proyectos estas nos ayudan a mitigar un poco la presión (aunque no siempre :D) y hacernos respirar un poco más tranquilos. Por eso conocer algunas de ellas nunca viene mal:

Continua —>