| Subcribe via RSS

Reiniciar Apache en Ubuntu

Marzo 2nd, 2007 | 2 Comments | Posted in apache, php, ubuntu

Por si alguien tiene dudas de cómo se hace lo indico aquí (me lo han preguntado varios):

Reiniciar Apache:

sudo /etc/init.d/apache2 restart

Parar/Arrancar:

sudo /etc/init.d/apache2 stop
sudo /etc/init.d/apache2 start
Tags: , ,

Code Igniter - framework PHP

Febrero 27th, 2007 | 3 Comments | Posted in php, programacion

Code Igniter es un framework para PHP que he probado recientemente para un par de proyectos y me ha enamorado.

Está pensado para ofrecer un alto rendimiento, ser ligero y fácilmente instalable (puede usarse en un alojamiento compartido y no es necesario tener acceso a la línea de comando). Además, gracias a la documentación y los foros (en inglés ambos), el aprendizaje es muy rápido y en un par de horas se puede empezar a trabajar con él. Por supuesto, será necesario más tiempo para conocer su funcionamiento completo, pero enseguida pueden empezar a hacerse cosas muy interesantes.

Viene con varias librerías para gestionar el acceso a datos, sesiones de usuarios, formularios, la seguridad, etc… Además la comunidad de usuarios ha creado una serie de plugins, clases y librerías para extenderlo que lo hacer aún más interesante.

Si estás buscando un framework para PHP te recomiendo que pruebes Code Igniter.

Code Igniter

Tags: , , ,

Introducción a PHPMailer

Diciembre 3rd, 2006 | 6 Comments | Posted in herramientas-para-tu-web, php

Dado que muchos lo estáis pidiendo me he animado a escribir una pequeña introducción a PHPMailer. Lo primero es descargarnos el archivo con la última versión y descomprimirlo en el directorio de nuestro proyecto, por ejemplo en el directorio phpmailer. Para poder usar PHPMailer basta añadir:

include("phpmailer/class.phpmailer.php");

con la ruta adecuada a PHPMailer.

En este ejemplo, modificación del que aparece en la “web oficial”, se puede ver lo fácil que es usar PHPMailer:

SetLanguage('es','phpmailer/language/'))
{
	echo '

No se ha podido cargar el fichero de idioma adecuado.

';
}

// Introducimos la información del remitente del mensaje
$mail->From     = "remitente@email.com";
$mail->FromName = "Remitente";
$mail->AddReplyTo("info@site.com","Information");
// y los destinatarios del mensaje. Podemos especificar más de un destinatario
$mail->AddAddress("paco@correo.com","Paco Martínez Soria");
$mail->AddAddress("klaatu@correo.com");  // Como se puede ver aquí el nombre del destinatario es opcional
$mail->AddCC("otrodestinatario@correo.com"); // También podemos enviar con copia de carbón
$mail->AddBCC("destiantaariooculto@correo.com"); // y copia de carbón oculta

// Establecemos los parámetros del mensaje: ancho y formato.
$mail->WordWrap = 50; // ancho del mensaje
$mail->IsHTML(true); // enviar como HTML

// Añadimos el mensaje: asunto, cuerpo del mensaje en HTML y en formato
// solo texto
$mail->Subject  =  "Asunto del mensaje";
$mail->Body     =  "Este es el mensaje en formato HTML";
$mail->AltBody  =  "Y este es el mensaje de solo texto"; // Para los queno pueden recibir en formato HTML

// Añadimos los adjuntos al mensaje
$mail->AddAttachment("/var/tmp/file.tar.gz"); // podemos añadir un adjunto directamente
$mail->AddAttachment("/tmp/image.jpg", "new.jpg"); // O podemos indicar un nuevo nombre para el adjunto.

if(!$mail->Send())
{
   echo "El mensaje no se ha podido enviar

";
   echo "Error: " . $mail->ErrorInfo;
   exit;
}
echo "El mensaje se ha enviado correctamente";
?>

Este ejemplo no funcionaría si el servidor que usarmos es SMTP. En ese caso tendríamos que añadir estas líneas al principio:


$mail->IsSMTP();                                   // enviar vía SMTP
$mail->Host     = "smtp1.site.com;smtp2.site.com"; // Servidores SMTP
$mail->SMTPAuth = true;     // activar la identificacín SMTP
$mail->Username = "jswan";  // usuario SMTP
$mail->Password = "secret"; // clave SMTP

Otras funciones interesantes:

- ClearAddresses () - Borra todos los destinatarios del campo ‘TO’, es decir, todos los destinatarios que se han añadido con la función AddAddress.

- ClearAllRecipients () - Borra todos los destinatarios TO, CC y BCC.

- ClearAttachments () - Borra los adjuntos.

Existe información más completa, en inglés, con todas las funciones disponibles en:

http://phpmailer.sourceforge.net/docs/

Introducción a Prototype - un toolkit Ajax

Diciembre 2nd, 2006 | 2 Comments | Posted in ajax, php

Realmente Prototype no es sólo un framework para Ajax, es un framework para Javascript. Es bastante sencillo de usar y ligero. Existen otras opciones, como Dojo, pero yo uso habitualmente Prototype principalmente porque lo conozco desde hace más tiempo y por su sencillez (también me convenció que se usa en el proyecto de Ruby on Rails).

Voy a escribir una serie de artículos (tres en principio) para mostrar cómo usar las características Ajax de Prototype.

Lo primero es descargarse es fichero prototype.js de su web (elige la opción “just the .js please”). La instalación es sencilla, símplemente añade el fichero al directorio de tu proyecto. Yo suelo ponerlo en un directorio, por ejemplo en dist/prototype.js. Y con esto ya está listo para usar.

Este ejemplo que he preparado lo único que hace es cargar un fichero del servidor y mostrarlo en la página. Vamos a ver el código y luego lo analizamos:











Cargar texto

Cuando pinchamos en el enlace ‘Cargar texto’ se ejecuta la función cargar(). Esta función crea un objeto Ajax, definido en prototype.js, y hace una llamada. Los parámetros que usa para la llamada son:

  • url - la dirección a la que se conecta.
  • method - el tipo de llamada post o get.
  • parameter - los parámetros que se pasa a la url (en el ejemplo está en blanco).
  • onComplete - la función que se va a ejecutar cuando se finalice la llamada. Es este caso mostrarTexto.

En este ejemplo se hace una llamada a la URL: http://localhost/Readme.txt y se carga el contenido de ese fichero en el objeto originalRequest. Gracias a:

$('textoCargado').innerHTML = originalRequest.responseText;

el contenido del div textoCargado se sustituye por el contenido del fichero Readme.txt.

Nota: la función $() nos facilita acceder a cualquier elemento de la página a través de su ‘id’ (como hace getElementById, pero $() es más completa).

Como se puede apreciar es bastante sencillo usar Ajax gracias a Prototype. En la próxima entrega vamos a ver cómo hacer una llamada conectándonos a una base de datos usando PHP y Prototype.

Más información, en inglés, aquí.

Cambiar la extensión de varios archivos con PHP

Noviembre 26th, 2006 | 4 Comments | Posted in oscommerce, php, zencart

Suele suceder a muchos de mis clientes que usan OsCommerce y Zen-Cart que cuando suben las imágenes de los productos vía FTP la extensión de los archivos está en mayúsculas pero en la base de datos aparece el mismo archivo con la extensión en minúsculas. Resultado: la imagen no se puede encontrar. Algunos de ellos optan por la solución de renombrar las imágenes y volver a subirlas pero, dado que era muy incómodo, escribí este pequeño código que renombra las imágenes directamente en el servidor:

// Corregir las extensiones de los ficheros de imágenes. Cambiar las extensiones en mayúsculas por minúsculas.

$directorio_imagenes = 'images/';
if ($directorio = dir($directorio_imagenes))
{
	while ($fichero = $directorio->read())
	{
		$info_fichero = pathinfo($fichero);
		// Si la extensión no está en minúsculas ponerla en minúsculas
		if (isset($info_fichero['extension']) && $info_fichero['extension']!=strtolower($info_fichero['extension']))
		{
			$info_fichero['basename_we'] = substr($info_fichero['basename'], 0, -(strlen($info_fichero['extension']) + ($info_fichero['extension'] == '' ? 0 : 1)));
			rename(
				$directorio_imagenes . $info_fichero['basename'],
				$directorio_imagenes . $info_fichero['basename_we'] . '.' . strtolower($info_fichero['extension'])
				);
			echo '<br/>' . $info_fichero['basename'] . ' cambiado.';

		}
	}
}

El script busca en el directorio especificado los directorios con la extensión en mayúsculas y los cambia a minúsculas. La “magia” se hace con este if:

if (isset($info_fichero['extension']) && $info_fichero['extension']!=strtolower($info_fichero['extension']))

que compara la extensión del fichero con su versión en minúsculas. Esto detecta las extensiones como: .JPG, Jpg, jpG y las convierte a .jpg.

Un sencillo programita que puede ahorrarnos muchas horas de trabajo. Esta versión sólo busca en un único directorio, no sería muy difícil modificarlo para que busque también en los subdirectorios.

El futuro ZenCart 1.4

Noviembre 22nd, 2006 | No Comments » | Posted in php, zencart

Según el equipo de Zen-Cart en la futura (y esperemos que no muy lejana) versión 1.4 van a hacer una serie de cambios muy interesantes:

  1. Importantes mejoras en el acceso a la base de datos: un sistema de localización de errores más inteligente, reducción del número de consultas a la base de datos, creación de una clase para la gesión de los precios de productos. Se espera una reducción en el número de consultas de unas 800 a sólo unas 150.
  2. Control de stock por atributos (una característica muy solicitada).
  3. Revisión de las clases y funciones para reducir la duplicidad.
  4. Plantillas para los emails tanto en html como en texto plano.
  5. Más provincias, países y monedas añadidas al instalador.

Según mi punto de vista los puntos más fuertes de esta futura versión son los relativos a la reducción en los accesos a la base de datos y el control de stock por atributos. Son muchos los clientes que nos solicitan sobre todo esta última mejora.

La revisión y simplificación del proceso de compra tendrá que esperar aún más tiempo. Espero que no se demore esta nueva versión y que podamos disfrutar de ella en breve. Dado el ritmo de nuevas versiones con que están sacando nuevas versiones ultimamente no creo que tengamos que esperar mucho tiempo.

Qué hacer cuando una página en PHP aparece en blanco

Noviembre 17th, 2006 | 1 Comment | Posted in apache, php

Si te dedicas a la programación en PHP probablemente te habrás encontrado en alguna ocasión con la siguiente situación: cuando entras en una determinada página en PHP aparece en blanco pero no se muestra ningún error.

¿Qué es lo que está sucediendo? Lo más seguro es que en el fichero php.ini esté desactivada la opción de mostrar errores. Esta es una práctica muy habitual en las compañías que ofrecen alojamiento web, se suele hacer porque en un servidor en producción no es aconsejable mostrar errores para no dar pistas a los posibles atacantes.

¿Cómo solucionarlo?

1) Si tienes acceso al fichero php.ini busca la linea que dice:

error_reporting = ...

y cámbiala para que quede así:

error_reporting = E_ALL & ~E_NOTICE

Si la línea comienza con un ‘;’ quítalo; se usa para indicar que la línea es un comentario.

2) Si no tienes acceso al fichero php.ini (que es la situación más habitual si tienes contratado el hosting con otra compañía):

Puedes usar este “truquillo” que encontré en la web oficial de PHP: Añade el siguiente código al comienzo de la página que te está dando problemas:

set_error_handler('errorHandler');

function errorHandler( $errno, $errstr, $errfile, $errline, $errcontext)
{
  echo 'Into '.__FUNCTION__.'() at line '.__LINE__.
  "\n\n---ERRNO---\n". print_r( $errno, true).
  "\n\n---ERRSTR---\n". print_r( $errstr, true).
  "\n\n---ERRFILE---\n". print_r( $errfile, true).
  "\n\n---ERRLINE---\n". print_r( $errline, true).
  "\n\n---ERRCONTEXT---\n".print_r( $errcontext, true).
  "\n\nBacktrace of errorHandler()\n".
  print_r( debug_backtrace(), true);
}

Esto me hará un rastreo de los errores. Seguramente te aparecerá la información muy confusa, puedes ver el código fuente de la página resultante para analizar mejor el error (queda mejor formateado).

Existe también una clase llamada Errorhandler que nos permite visualizar y gestionar los errores de la forma que nos resulte más cómoda.

Configuración básica de LAMP en Ubuntu - en inglés

Septiembre 27th, 2006 | No Comments » | Posted in apache, php

He encontrado este wiki donde explican (en inglés) cómo configurar Apache en Ubuntu. Bastante sencillo y para principiantes.

LAMP en Ubuntu

Septiembre 4th, 2006 | 7 Comments | Posted in apache, mysql, php, ubuntu

Instalar LAMP (abreviatura para Linux, Apache, Mysql, PHP/Perl/Phyton) en Ubuntu es sencillo:

sudo apt-get install php5 apache2 mysql-server

Es posible que no funcione el soporte PHP para MySQL, en ese caso son necesarios tres pasos más:

  1. Añadir el soporte para MySQL:
    sudo apt-get install php5-mysql
  2. Editar el fichero php.ini:
    sudo gedit /etc/php5/apache2/php.ini

    buscar la línea: ;extension=mysql.so y eliminar el ‘;’ del comienzo (’;’ es el carácter que se usa para comentar líneas en php.ini)

  3. Reiniciar apache (yo lo hago desde el panel de control de Webmin.

¡y listo! :-)

Puede que interese añadir soporte para PEAR, Curl o GD:

apt-get install php5-cli php-pear php5-curl php5-gd

Y no puede faltar PHPMyAdmin:

apt-get install phpmyadmin

Más información en inglés aquí:
http://www.linuxforums.org/servers/setting_up_a_server.html.

Tags: , , ,

EasyPHP: Servidor Apache+PHP+MySQL en Windows

Septiembre 3rd, 2006 | 1 Comment | Posted in mysql, php

La manera más sencilla de tener un servidor Apache+PHP+MySQL en Windows es EasyPHP:

EasyPHP

La instalación es muy cómoda y queda todo perfectamente configurado, incluyendo PHPMyAdmin.