Tag Archive for: PHP

PHP crear un sitio multilingue

Categories: PHP - Tags: ,

Seguro hemos visto muchas páginas web en las que puedes elegir el pais, el idioma, entre otros detalles, crear una programación distinta por cada idioma sería un tanto absurdo por la cantidad de tiempo que demora hacer esto, además que tendriamos que duplicar código y bases de datos, lo que claramente no resulta muy buena idea que digamos.

Para crear múltiples idiomas hay básicamente dos métodos que funcionan similar, el uso de constantes y el uso de arrays, el método más común es utilizar constantes que almacenen el valor por cada idioma.

Bueno, veamos como funcionan ambos métodos y ya depende de cada uno usar uno u otro

Usando Constantes

Para los que no recuerdan como se crean constantes, el funcionamiento es asi:

1
2
3
define("MICONSTANTE", "Aqui el valor de mi constante");
// Y la mostramos asi
echo MICONSTANTE;

La idea es entonces crear un archivo php por cada idioma que contenga las constantes que necesitamos por ejemplo es.php, en.php, etc. y que elija el archivo que corresponda almacenando el idioma en una cookie o en una variable de sesión. Algo asi:

1
2
3
if ($_cookie['idioma']=="es") {
  include("idiomas/es.php");
}

La programación de nuestro sitio quedaría entonces de la siguiente forma
es.php

1
2
define("_mititulo", "Mi tienda");
define("_login", "Inicio sesion");
1
2
<h1><?php echo _mititulo; ?></h1>
<a href="login.php"><?php echo _login; ?></a>

Usando arrays

La idea es muy similar a la anterior sólo que ahora definimos un array con todas las palabras que requerimos

1
2
3
4
5
6
7
8
9
10
<?php
global $lang;
$lang = array (
    'CART_TITLE' => 'Mini Paypal Cart',
    'CATEGORY_TITLE' => 'Categories',  
    'CATEGORY_NOT_FOUND' => 'Category Not Found',
    'PRODUCTS_NOT_FOUND' => 'Products Not Found',
    'ADD_CART' => 'Add to cart'
);
?>

Para invocar los datos del idioma sería algo como:

1
<h2><?php echo $lang['CATEGORY_TITLE'];?></h2>

Parser RSS con PHP

Categories: PHP - Tags: ,

Tal vez el título no te suene a nada y si te digo que un parser es un módulo que sirve para hacer el parseo imagino que suena a chino; pero es más simple de lo que parece.

El parseo sirve para convertir una entrada de texto en un conjunto de datos que pueda ser procesado, llevado al tema de RSS este no es más que un archivo XML con una estructura ya establecida y delimitada que vamos a convertir en un array para poder manejarlo con esto podriamos por ejemplo:

  • Mostrar miniposts de twitter en nuestra página web PHP
  • Mostrar noticias de una web externa en la nuestra y que se actualicen automaticamente
  • Mostrar los últimos post de cualquier blog
  • Finalmente mostrar cualquier información de RSS en nuestra página web con el formato que deseemos

Implementado el parser

Lo bueno es que no nos vamos a romper la cabeza inventando un parser sólo vamos a implementar una clase ya diseñada para dicho fin, en este caso probemos con lastRSS y quedaría nuestro código de la siguiente forma:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
<?php

// Incluimos lastRSS.php
include './lastRSS.php';

// Damos la ruta de nuestra fuente RSS
$url_flux_rss = 'http://www.pcinpact.com/include/news.xml';
$limite       = 10; // nombre d'actus à afficher

// Creamos el objeto lastRSS
$rss = new lastRSS;

// Configuramos lastRSS
$rss->cache_dir   = './cache'; // carpeta del cache
$rss->cache_time  = 3600;      // frecuencia del cache (en segundos)
$rss->date_format = 'd/m';     // formato de fecha (basado en la funcion date() )
$rss->CDATA       = 'content'; // retiro de la etiqueta CDATA

// leemos la fuente RSS
if ($rs = $rss->get($url_flux_rss))
{
  for($i=0;$i<$limite;$i++)
  {
    // Mostramos los datos
    echo '<strong>'.$rs['items'][$i]['pubDate'].'</strong> &middot; <a href="'.$rs['items'][$i]['link'].'">'.$rs['items'][$i]['title'].'</a><br />';
  }
}
else
{
  die ('RSS no funka');
}

?>

Como vemos es muy simple ya que la clase se encarga de la parte complicada, podriamos darle el formato que quisieramos modificando esta linea:

1
echo '<strong>'.$rs['items'][$i]['pubDate'].'</strong> &middot; <a href="'.$rs['items'][$i]['link'].'">'.$rs['items'][$i]['title'].'</a><br />';

Podriamos usar h1, h2, p, ul, li… y asi darle un mejor formato al resultado obtenido.

Como enviar correos usando PHP

Categories: PHP - Tags:

Enviar correos con PHP es una de las cosas más comunes de hacer con PHP ya sea para enviar formularios de contacto, enviar correos para verificar el correo del usuario, enviar notificaciones y un largo etc.

La forma más sencilla de enviar correos es con una simple línea de código usando el comando mail de PHP el problema es que aunque funciona lo más probable es que nuestro correo llegará no sólo a la carpeta de no deseados sino que gmail o hotmail lo pondrán con unos mensajes de advertencia que espantarán a cualquier usuario.

Un último aspecto que debemos considerar es que desde localhost no se pueden enviar correos ya que ningun paquete como wamp, xamp, appserve u otro instalan un servidor de correo (ya queda a criterio de cada uno montar el suyo).

Envio simple de correo

Esta línea permite enviar un correo de la forma más simple

1
2
3
4
/// nuestro mensaje
$message = "Este es el cuerpo de nuestro correo";
/// enviar mail
mail('usuario@mail.com', 'Mi subject', $message);

Este comando mail tiene muchisimos parámetros más, especialmente en cuanto a encabezados(headers), archivos adjuntos, enviar correos HTML etc.

Enviar un correo usando PHPMailer

Como dije antes el comando mail tiene muchisimos parámetros adicionales pero salvo que tengamos conocimientos avanzados suele ser un tanto complicado usarlo por lo que recomiendo una clase llamada PHPMailer que nos haga la vida más simple, la pueden bajar AQUI

Veamos ahora un ejemplo de envío de correo usando esta clase

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
<?php
// Incluimos la clase
require_once('class.phpmailer.php');
$mail             = new PHPMailer(); // creamos el nuevo objeto
/// cogemos el mensage de un archivo html
$body             = file_get_contents('contents.html');
$body             = eregi_replace("[\]",'',$body);
/// indicamos quien lo envia
$mail->SetFrom('name@yourdomain.com', 'First Last');
/// con copia a
$mail->AddReplyTo("name@yourdomain.com","First Last");
/// el mensaje es para
$address = "whoto@otherdomain.com";
$mail->AddAddress($address, "John Doe");
/// titulo o subject
$mail->Subject    = "PHPMailer Test Subject via mail(), basic";
/// si no tienes un correo HTML
$mail->AltBody    = "To view the message, please use an HTML compatible email viewer!"; // optional, comment out and test
/// asignamos el mensaje
$mail->MsgHTML($body);
/// agregamos 2 archivos adjuntos
$mail->AddAttachment("images/phpmailer.gif");      // attachment
$mail->AddAttachment("images/phpmailer_mini.gif"); // attachment
/// finalmente lo enviamos
if(!$mail->Send()) {
  echo "Mailer Error: " . $mail->ErrorInfo;
} else {
  echo "Message sent!";
}

?>

Esta clase tiene más funciones pero este ejemplo me parece que cubre las principales, para hacerlo funcionar con un formulario bastaría crear dicho formulario con los campos nombre, correo, cuerpo, mensaje y luego en el ejemplo reemplazar con las variables POST que corresponda, por ejemplo en vez de:

1
2
$address = "whoto@otherdomain.com";
$mail->AddAddress($address, "John Doe");

Seria algo como esto

1
2
$address = $_POST['email'];
$mail->AddAddress($address, $_POST['nombre']);

Como subir una base de datos MySQL a nuestro servidor

Categories: PHP - Tags: ,

Este es un post que ha muchos les puede parecer muy básico pero sin embargo es una pregunta muy común asi que decidí escribir un poco al respecto.

Veamos algunas diferencia en primer lugar cuando trabajamos en localhost (es decir en nuestra pc con wamp, xamp, appserv o similar) normalmente tenemos un usuario de base de datos root sin contraseña sin embargo en un servidor en Internet esto sería muy inseguro otro punto que es distinto en localhost las bases de datos se crean usando PHPMyAdmin en cpanel no se puede, el PHPMyadmin se usa únicamente para agregar tablas, importar, exportar, etc pero no crear bases de datos.

Paso 1: cpanel

Lo primero es entrar al cpanel de nuestro servidor, si usas Plesk o tienes un servidor en godaddy la forma de hacerlo es un poco distinta. En nuesto cpanel respecto a base de datos tenemos varias opciones Base de datos MySQL, PHPMyAdmin, Postgree, Administrador acceso remoto entre otras. Vamos a elegir la opción “Bases de datos MySQL”.

Paso 2:Creando la base de datos

Lo primero es crear una base de datos con un nombre no mayor de 8 letras, luego hay que crear un usuario; una vez que ambos estén creados debemos asignar nuestro usuario a nuestra base de datos(eso esta casi al final donde dice Añadir usuario a la base de datos) luego nos pedirá indicar que permisos deseas que tenga este usuario sobre esa base de datos, puedes elegir todos.

Paso3: Exportando la base de datos

En nuestro servidor local entramos a PHPMyAdmin, seleccionamos nuestra base de datos y le damos click a la pestaña “Exportar”, esto nos dará algunas opciones interesantes para exporta sólo estructura, sólo datos, ambos, comprimido, archivos de texto, formato excel entre otras.

phpmyadmin exportar

phpmyadmin exportar

Paso4: Importando la base de datos

En el PHPmyAdmin de nuestro servidor elegimos la base de datos que hemos creado (si no aparece aún hay que recargar la página) luego le damos click a la pestaña “Importar” allí podemos elegir el archivo que creamos en el paso anterior.

PHPmyadmin Importar

PHPmyadmin Importar

Paso5: Configurar PHP

Finalmente debemos configurar nuestro script para se conecte adecuadamente a nuestra base de datos, esos cambios ya dependen de nuestro script PHP

Puedes ver más detalles en este videotutorial

PHP agregar marca de agua GD2

Categories: PHP - Tags:

Podriamos añadir marcas de agua usando Photoshop pero cuando tenemos cientos de imágenes y encima queremos que las imágenes que suban los usuarios automáticamente tengan una marca de agua lo mejor es hacer que PHP se encargue, para eso vamos a usar GD2.

Para los que no conocen GD2 es una extensión de PHP que nos permite manejar imágenes en los principales formatos web JPG, GIF, PNG, nos permite cambiarles el tamaaño, crear imágenes nuevas, ponerles textos, crear captchas, etc.

OJO En la mayoría de servidores se encuentra instalada por defecto, si trabajamos en localhost es posible que debamos activarla primero si usas Wamp PHP/PHP extensions/GD2

Creando la marca de agua

Podemos usar un PNG 24bits o un PNG común, la ventaja del primero es que podremos tener un watermark semitransparente y sin bordes pixelados para obtener un mejor efecto.

GD2 con PHP

Bueno veamos esta función para crear la marca de agua

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
/// la imagen que usaremos como marca de agua
$watermark = "proof150.png"; /// PNG 8 o 24 bits
$quality = "75"; // calidad del JPG resultante
$imagedir = "images";
watermark($imagen_original, $imagen_con_watermark, $watermark, $quality);

function watermark($srcfilename, $newname, $watermark, $quality) {
$imageInfo = getimagesize($srcfilename);
$width = $imageInfo[0];
$height = $imageInfo[1];
$logoinfo = getimagesize($watermark);
$logowidth = $logoinfo[0];
$logoheight = $logoinfo[1];
$horizextra =$width - $logowidth;
$vertextra =$height - $logoheight;
$horizmargin =  round($horizextra / 2);
$vertmargin =  round($vertextra / 2);
$photoImage = ImageCreateFromJPEG($srcfilename);
ImageAlphaBlending($photoImage, true);
$logoImage = ImageCreateFromPNG($watermark);
imagealphablending($logoImage,true);
$logoW = ImageSX($logoImage);
$logoH = ImageSY($logoImage);
// añadimos marca de agua
ImageCopy($photoImage, $logoImage, $horizmargin, $vertmargin, 0, 0, $logoW, $logoH);
//ImageJPEG($photoImage); // No grabarlo sino mostrarlo en el browser
ImageJPEG($photoImage,"images/watermarked/wm_".$newname, $quality);
// Liberamos memoria
ImageDestroy($photoImage);
ImageDestroy($logoImage);
}

Como imagen de origen podemos usar un archivo ya existente o podríamos usar una imagen enviada desde un formulario.