Blog de Promineo Studios http://promineostudios.com es Games Experiences & Apps Sustituir rutas relativas por rutas absolutas con PHP http://promineostudios.com/blog/articulo/sustituir-rutas-relativas-por-rutas-absolutas-con-php vie, 27 ago 2010 22:01:00 GMT Yoné Rocha http://promineostudios.com/blog/articulo/sustituir-rutas-relativas-por-rutas-absolutas-con-php Hace unos días portamos los feed de éste blog a feedburner para aprovecharnos de todas las ventajas que ofrece éste servicio, como seguimiento de suscriptores o la suscripciones por email.

En la antigua administración interna de los RSS la imágenes que componían los artículos tenían rutas relativas. En parte decidimos prescindir de rutas absolutas por, si en algún momento cambiabamos de dominio, evitar tener que editar cada uno de los artículos con las nuevas rutas. Pero con feedburner las rutas relativas no son válidas y hemos tenido que improvisar una función que dinámicamente cambie las rutas relativas por absolutas, y así que las imagenes se sigan mostrando en los feed vinculados a feedburner.

La función PHP para reemplazar las rutas relativas por rutas absolutas en imágenes y enlaces internos de determinado contenido y, por consiguiente, la manera de que feedburner muestre nuestras imágenes es la siguiente:

	/*
* Convierte cualquier url de las etiquetas <img> o <a> de relativas en absolutas
*/

public function urlAbsoluta($contenido, $url){
// reemplaza <img src=""/> y <a href=""/> con rutas absolutas
return preg_replace( "/<(a|img)(.*?)(href|src)=('|\")\/(.*?)('|\")/s", "<\\1\\2\\3=\"".$url."/\\5\"", $contenido);
}
]]>
RabbitVCS: Cliente gráfico SVN para Ubuntu http://promineostudios.com/blog/articulo/rabbitvcs-cliente-grafico-svn-para-ubuntu vie, 20 ago 2010 13:10:00 GMT Yoné Rocha http://promineostudios.com/blog/articulo/rabbitvcs-cliente-grafico-svn-para-ubuntu Cuando desarrollamos cualquier tipo de software debemos contar con un buen sistema de control de versiones. Subversion (SVN) es el sistema de facto para ésta tarea. En Promineo Studios usamos SVN desde nuestro inicio, sería una locura prescindir de un sistema de control de versiones si se requiere continuidad en el desarrollo.

Hasta hace un mes el control de versiones lo hacíamos con el plugin para SVN que incorpora el IDE Aptana. No nos ha dado problemas, pero requeríamos un cliente gráfico que se integrase directamente en el Sistema Operativo Ubuntu 10.04. RabbitVCS cumplía éste requisito.

Para los que conocen algo sobre clientes gráficos para SVN, RabbitVCS es para ubuntu lo que TortoiseSVN es para Windows. Se integra de maravilla con Gnome y su gestor de archivos Nautilus.

Para instalar RabbitVCS es tan sencillo como introducir los siguientes comandos en la terminal:

sudo add-apt-repository ppa:rabbitvcs/ppa

sudo apt-get update

sudo apt-get install rabbitvcs-core

sudo apt-get install rabbitvcs-nautilus rabbitvcs-thunar rabbitvcs-gedit rabbitvcs-cli

Fuente de la noticia: ubuntugeek.com |fetishcode

]]>
Acortar direcciones con PHP y TinyUrl http://promineostudios.com/blog/articulo/acortar-direcciones-con-php-y-tinyurl mar, 17 ago 2010 00:03:00 GMT Yoné Rocha http://promineostudios.com/blog/articulo/acortar-direcciones-con-php-y-tinyurl Si deseas acortar las direcciones de tu página web puedes usar ésta simple función que utiliza la API del servicio TinyUrl.

 

function tinyUrl($url){  
    return file_get_contents("http://tinyurl.com/api-create.php?url=".$url);  
}
 
//Imprime la url corta  
echo tinyUrl("http://www.promineostudios.com");  

Visto en Webintenta

]]>
PHPMailer. Enviar correos electrónicos con PHP http://promineostudios.com/blog/articulo/phpmailer-enviar-correos-electronicos-con-php jue, 13 may 2010 12:06:00 GMT Yoné Rocha http://promineostudios.com/blog/articulo/phpmailer-enviar-correos-electronicos-con-php Habitualmente, para el envío de correo con PHP se utiliza la función mail(), integrada en el propio lenguaje. Sí bien la función cumple con su cometido, son notorias sus limitaciones.

PHPMailer es una clase que cubre las carencias de mail() y facilita el uso de propiedades avanzadas en el envío de correos. Por ejemplo, permite ficheros adjuntos o utilizar un servidor SMTP con autenticación. Gracias a esta última característica podremos enviar correos desde nuestra cuenta Gmail y evitar la instalación de un servidor de correo.

El primer paso para usar PHPMailer es descargar la clase de sourceforge. Nos encontraremos con dos archivos que debemos instanciar en nuestro código, class.phpmailer.php con la clase y class.smtp.php, opcional para utilizar servidores SMTP.

Empezamos con un ejemplo simple usando Sendmail:

require 'class.phpmailer.php';
 
$mail = new PHPMailer();
 
$mail->IsSendmail();//usamos Sendmail, también podemos usar mail() con isMail()
 
$mail->FromName = 'Juan Palomo';
$mail->From = 'remitente@dominio.com';//email de remitente desde donde se envía el correo.
 
$mail->AddAddress('destinatario@dominio.com', 'Destinatario');//destinatario que va a recibir el correo
 
$mail->AddCC('copia@dominio.com', 'copia');//envía una copia del correo a la dirección especificada
 
$mail->Subject = 'Asunto de email';
 
$mail->AltBody = 'cuerpo del mensaje en texto plano';//cuerpo con texto plano
 
$mail->MsgHTML('Mensaje con HTML');//cuerpo con html
 
$mail->AddAttachment("archivo.zip");//adjuntos un archivo al mensaje
 
if(!$mail->Send()) {//finalmente enviamos el email
   echo $mail->ErrorInfo;//si no se envía correctamente se muestra el error que ocurrió
} else {
   echo 'Correo enviado correctamente';
}
 

Enviar un correo usando Gmail y PHPMailer:

require 'class.phpmailer.php';
require 'class.smtp.php'; //incluimos la clase para envíos por SMTP
$mail = new PHPMailer();
 
 
$mail->IsSMTP();
$mail->CharSet = 'UTF-8';
$mail->SMTPAuth = true;
$mail->SMTPSecure = "ssl";
$mail->Host = "smtp.gmail.com"; //servidor smtp
$mail->Port = 465; //puerto smtp de gmail
$mail->Username = 'email@gmail.com';
$mail->Password = 'tucontraseña';
 
$mail->FromName = 'Juan Palomo';
$mail->From = 'remitente@dominio.com';//email de remitente desde donde se envía el correo.
 
$mail->AddAddress('destinatario@dominio.com', 'Destinatario');//destinatario que va a recibir el correo
 
$mail->AddCC('copia@dominio.com', 'copia');//envía una copia del correo a la dirección especificada
 
$mail->Subject = 'Asunto de email';
 
$mail->AltBody = 'cuerpo del mensaje en texto plano';//cuerpo con texto plano
 
$mail->MsgHTML('Mensaje con HTML');//cuerpo con html
 
$mail->AddAttachment("archivo.zip");//adjuntos un archivo al mensaje
 
if(!$mail->Send()) {//finalmente enviamos el email
   echo $mail->ErrorInfo;//si no se envía correctamente se muestra el error que ocurrió
} else {
   echo 'Correo enviado correctamente';
}
 

 

]]>
Imprimir array - matriz PHP http://promineostudios.com/blog/articulo/imprimir-array-matriz-php vie, 29 ene 2010 11:18:00 GMT Yoné Rocha http://promineostudios.com/blog/articulo/imprimir-array-matriz-php Puedes imprimir los valores almacenados en un array con la función print_r(). Nos devolverá los valores de la matriz en una estructura legible.

$equipos = array ('Real Madrid', 'Tenerife', 'Barcelona', 'Valencia'); 
echo <pre>'.print_r ($equipos).'<pre>';

Salida:
Array
(
    [0] => Real Madrid
    [1] => Tenerife
    [2] => Barcelona
   [3] => Valencia

)

También puedes usar la función implode para imprimir los valores en orden de aparición de un array siguiendo un patrón de separación entre elementos, en este ejemplo la coma.

echo implode (",", $equipos);

Salida:

Real Madrid, Tenerife, Barcelona, Valencia

Aclaración: Implode() sólo funciona con matrices unidimensionales.

 

]]>
Cortar una cadena de caracteres sin partir la última palabra http://promineostudios.com/blog/articulo/cortar-una-cadena-de-caracteres-sin-partir-la-ultima-palabra mié, 21 oct 2009 22:50:00 GMT Yoné Rocha http://promineostudios.com/blog/articulo/cortar-una-cadena-de-caracteres-sin-partir-la-ultima-palabra En PHP tenemos multitud de funciones para tratar cadenas de caracteres. Una de ellas, substr, nos devuelve un fragmento o porción de la cadena que estamos manipulando. El problema viene cuando queremos que no se  corte la última palabra de la subcadena que obtenemos. Ninguna función de manipulación de cadenas es capaz de identificar una palabra y no cortarla, pero podemos utilizar una combinación de éstas funciones para obtener una subcadena sin cortar palabras por la mitad.

Con el código que describo a continuación podéis cortar una cadena, dado un número de caracteres, sin partir la última palabra de la subcadena resultante.

$texto = 'Lorem ipsum dolor sit amet, consectetur adipiscing elit.';
$cantidadCaracteres = 25;
 
//1.- Obtenemos un fragmento de la cadena desde el índice cero hasta la longitud dada por la variable$cantidadCaracteres
$subcadena = substr($texto,0,$cantidadCaracteres);
 
//2.- strrpos encuentra la posición de la ultima aparición de un caracter, en éste caso el último espacio en blanco de la cadena que obtenemos con substr
$indiceUltimoEspacio = strrpos($subcadena," ");
 
//3.- Con substr obtenemos una subcadena de $texto desde la posicion inicial hasta la posición del último espacio que nos interesa
echo substr($texto,0, $indiceUltimoEspacio);
//salida por pantalla-> Lorem ipsum dolor sit

Y ahora el mismo código  en una sola línea:

$texto = 'Lorem ipsum dolor sit amet, consectetur adipiscing elit.';
$cantidadCaracteres = 25;
echo substr($texto,0,strrpos(substr($texto,0,$cantidadCaracteres)," "));

Este aporte no es ni mucho menos mío, debemos darle las gracias a Javier Cerezo que dejo  un comentario en un artículo de la página programacionweb.net con este tip. 

]]>
MySQL + PHP: Recuperar valores de un campo ENUM http://promineostudios.com/blog/articulo/mysql-php-recuperar-valores-de-un-campo-enum vie, 18 sep 2009 13:02:00 GMT Yoné Rocha http://promineostudios.com/blog/articulo/mysql-php-recuperar-valores-de-un-campo-enum Entre los distintos tipos de datos que puede manejar MySQL se encuentran las enumeraciones, definidas con la palabra clave enum. Una lista de enumeradores, como se denomina un enum, no es más que un conjunto de constantes con nombre que definimos en la estructura de nuestra base de datos.

Si has usado un enum en un campo de una tabla, seguro que has querido extraer todos los valores que componen la lista de enumeradores y, posiblemente, no has sabido como hacerlo. He aquí la solución usando PHP:

//Asumo que ya estamos conectados a la base de datos
//Consultamos todos los posibles valores de la columna ENUM
$consulta = $this->db->prepare('SHOW COLUMNS FROM nombreTabla LIKE "nombreCampoEnum"');
$consulta->execute();
//Obtenemos los resultados de la consulta
$array = $consulta->fetch(PDO::FETCH_ASSOC);
//expresión regular que obtiene los valores de enum
$array = explode("','",preg_replace("/(enum|set)\('(.+?)'\)/","\",$array['Type']));
print_r($array);

La clave de todo está en la línea en que llamamos a la función explode(). Mediante una expresión regular analizamos la variable $array y extraemos los valores del enum.

P.D: Para los más despistados... Uso para la consulta a la base de datos PHP Data Objects.

 

 

]]>
¿Cómo contar el número de líneas de código fuente de nuestros proyectos? http://promineostudios.com/blog/articulo/como-contar-el-numero-de-lineas-de-codigo-fuente-de-nuestros-proyectos dom, 30 ago 2009 15:20:00 GMT Yoné Rocha http://promineostudios.com/blog/articulo/como-contar-el-numero-de-lineas-de-codigo-fuente-de-nuestros-proyectos La respuesta tiene nombre propio, slccount. Un pequeño programa para GNU/Linux que, como casi siempre, podemos descargar desde los repositorios de Ubuntu. Para eso tenemos que escribir el siguiente comando en la consola:

sudo apt-get install sloccount

Una vez instalado sólo debemos llamar a sloccount pasando la ruta de nuestro proyecto, yo lo he usado en puskasCMS que está escrito en PHP5, pero se puede usar con otros muchos lenguajes de programación.

sloccount /ruta_del_código_fuente

Además, nos proporciona una estimación económica de nuestro proyecto, eso sí, un tanto desorbitada desde mi punto de vista.

Total Physical Source Lines of Code (SLOC) = 57.868

Development Effort Estimate, Person-Years (Person-Months) = 14,18 (170.13)

Estimated Average Number of Developers (Effort/Schedule) = 9,66

Total Estimated Cost to Develop = $ 1.915.147 (average salary = $56.286/year)

¡Mi gestor de contenidos tiene casi 60.000 líneas de código! Tengo que hacer más vida social...

]]>
Include(), include_once() VS require(), require_once() http://promineostudios.com/blog/articulo/include-includeonce-vs-require-requireonce mar, 11 ago 2009 16:59:00 GMT Yoné Rocha http://promineostudios.com/blog/articulo/include-includeonce-vs-require-requireonce PHP ofrece cuatro declaraciones para insertar código de un archivo externo en nuestro archivo fuente:

  • include "archivo"
  • include_once "archivo"
  • require "archivo"
  • require_once "archivo"

Cualquiera de estas declaraciones es sustituida por el código del archivo que se invoca. Hasta ahí todos los que están acostumbrados a desarrollar en PHP llegan, el problema viene cuando no sabes donde se debe usar una u otro tipo de declaración, es eso lo que vamos a intentar aclarar en este artículo, las diferencias entre las declaraciones de inclusión.

La declaración require() sustituye el código antes de que se ejecute el script, mientras que con include() la sustitución se realiza en tiempo de ejecución. Una gran diferencia pero no la única. Si usas include() e intentas incluir, valga de redundancia, un archivo que no existe te devolverá un warning y el script se seguirá ejecutando. Con require() en caso de no encontrar el archivo que se requiere te devolverá un error fatal y la ejecución del script se detendrá.

En mis proyectos suelo usar require() para el núcleo de la aplicación que lleva el peso de toda la lógica, así me aseguro que si por alguna razón no se incluye un archivo no se seguirá ejecutando, evitando de esta manera fallos más importantes. Para incluir archivos html como un pie de página si uso include(), ya que si estos archivos no se cargan no impide el correcto funcionamiento de la aplicación.

Tanto require_once() como include_once() funcionan de la misma manera que sus homónimos nombrados anteriormente, con una única salvedad. Aseguran que el código del archivo es agregado una sola vez, evitando redeclaraciones de variables o funciones. Hay que tener en cuenta que require_once e include_once son más pesadas de procesar que require e include, por lo que debemos usarlas con prudencia.

Referencias: Ali Hartono's Diary | nachox

 

]]>
Servidor web en Kubuntu (Apache2 + PHP5 + MySQL) http://promineostudios.com/blog/articulo/servidor-web-en-kubuntu-apache2-php5-mysql mar, 04 ago 2009 17:10:00 GMT Yoné Rocha http://promineostudios.com/blog/articulo/servidor-web-en-kubuntu-apache2-php5-mysql Montar un servidor web básico, bajo una distribución basada en Ubuntu, es una tarea realmente sencilla si sabes los pasos que debes seguir. Ejecutando  los comandos de consola que escribiré a continuación no tendrás ningún problema para instalar tu propio servidor local.

lamp

Leer el resto del artículo]]>