links for 2007-04-20

| |

Laboratorio: área clientes mediante Apache y PHP

Viendo diferentes empresas con página corporativa, he visto que suele ser común el área para los clientes. En este mundo es normal que el tema de los pagos suela dar complicaciones, por eso yo creo que es preferible subir lo que se va desarrollando para el cliente en un servidor propio que en el servidor del cliente, ya que hasta que no pague en su totalidad, no dispone de ello.

Si te encuentras en esta situación, quizás te sea útil este truco para habilitar una área privada protegida para los clientes, la cual redireccionará al contenido del cliente, ya sea el propio trabajo en sí o una aplicación en particular.

Para el caso del ejemplo, yo lo he hecho para unas páginas web estáticas, y luego que cada cual, si le interesa, que lo adapte a su gusto.

El funcionamiento es el siguiente: el usuario accede a una ruta con acceso restringido a usuarios válidos mediante Apache. También mediante Apache se le redirigirá a una página propia, en este caso las páginas HTML que están guardadas en un directorio específico para clientes (fuera del webroot) y en un directorio específico para ese cliente en concreto.

Supongamos que tenemos el directorio webroot siguiente home/www y el área web de clientes está en el directorio home/www/clientes y el espacio físico específico de clientes está en home/www/_clientes. Lo primero que debemos hacer es añadir el siguiente .htaccess en el directorio clientes.

AuthType Basic
AuthName "Acceso a clientes"
AuthUserFile [path]\passwords.conf
Require valid-user
RewriteEngine On
RewriteCond %{REQUEST_URI} ^/clientes(.*)$
RewriteRule ^(.*)$ /_clientes/index.php?url=$1  [L,QSA]

Lo que hace esta configuración es añadir autenticación al directorio clientes y redireccionar al script index.php del directorio _clientes, pasándole como parámetro la url a la que se accede.

El script index.php para este ejemplo, lo que he hecho ha sido incrustar el fichero que se quiere directamente, teniendo en cuenta el Content-Type y que si no se añade ninguna url después de clientes se tome por defecto el fichero index.html.

<?php
// Devuelve el content-type
function content_type($url) {
$ext = substr($url, strrpos($url, '.')+1);
if ($ext == 'swf') {
header("Content-type: application/octet-stream");
} else if ($ext == 'png') {
header("Content-type: image/png");
} else if ($ext == 'jpg') {
header("Content-type: image/jpeg");
} else if ($ext == 'gif') {
header("Content-type: image/gif");
} else if ($ext == 'js') {
header("Content-type: text/javascript");
} else if ($ext == 'css') {
header("Content-type: text/css");
} else if ($ext == 'html') {
header("Content-type: text/html");
} else {
header("Content-type: text/plain");
}
}
// Obtengo el usuario y la ruta a la que quiere acceder
$user = $_SERVER['REMOTE_USER'];
$url = substr($_SERVER['REQUEST_URI'], strlen("/clientes"));
$url = $url == '/'? '/index.html' : $url;
// Añado el content-type
content_type($url);
// Inserto el fichero
if (file_exists('./'.$user.$url)) {
include './'.$user.$url;
}
?>

Por supuesto a este truco le faltan cosas, como seguridad en el directorio _clientes, a parte de que hay que tener cuidado con los paths relativos o absolutos, y alguna cosilla más, pero creo que como idea desde la que partir no está mal.

| |

API para Feeds de Google

Google ha sacado un API para obtener feeds mediante Javascript. Podremos usar esta librería para obtener los feeds de cualquier dominio de una forma más sencilla mediante Ajax.
El API devuelve los resultados en dos formatos: JSON y XML. Por defecto usa JSON, devolviendo los datos del RSS de forma abreviada y con un formato específico.
También existe la posibilidad de que te devuelva los resultados en un formato mezcla de JSON y XML, devuelve el formato JSON y la modo de acceso XML.
Una librería que nos puede ser muy útil.
Announcing the Google AJAX Feed API
Vía / Ajaxian

links for 2007-04-19

Comunicación con los puertos serie en PHP

Hace tiempo nos preguntaban como leer de los puertos serie desde PHP, y ahora acabo de encontrar eso mismo y además cómo hacerlo para Windows y para Linux.
Para Windows se necesita la extensión PHP Serial Extension, la cual una vez instalada nos permite manejar los puertos y las comunicaciones de los puertos serie. Aunque su uso se sale de lo normal, pero seguro que hay algún caso en el que pueda ser útil, como controlar cámaras, video, modems y terminales GSM, lectores de códigos de barras o algún otro dispositivo conectado al puerto serie.
En el caso de Linux, es necesaria la clase PHP Serial Class, la cual toma la ruta del dispositivo y comprueba qué es válido antes de abrir la conexión, y una vez abierta, envía datos al puerto serie. Además puede cambiar los parámetros de conexión para el dispositivo conectado.
Vía / VT’s Tech Blog

Captura pantallas con PHP y GD

El tema de los screenshots de páginas web es algo que ahora está bastante de moda. Existen servicios que nos muestran miniaturas de páginas web a las que enlazamos (algo que a mucha gente desespera), pero en algunos casos somos nosotros quienes queremos obtener esas capturas.
En este caso se van a realizar mediante PHP y la librería GD, aunque para ello haya que modificar la librería GD por esta otra, la cual añade las funciones imagegrabscreen y imagegrabwindow, permitiendo grabar pantallas completas y ventanas (usando su manejador) respectivamente.
Los ejemplos que nos muestran funcionan bajo Windows y ejecutando PHP en modo línea de comandos, nos abre una ventana de IE y captura su contenido. ¿Pegas? no tengo claro si se puede redimensionar la ventana y nos muestra también el IE, no el contenido HTML únicamente.
Screen capture with PHP and GD
Vía / Planet PHP

links for 2007-04-18

Generar documentos Excel con CakePHP

CakePHP es uno de los mejores frameworks de PHP que nos ofrece muchas posibilidades en nuestros desarrollos. En este caso se trata de crear documentos Excel, algo muy frecuente en las aplicaciones de gestión de empresas.
En el artículo ofrecido por la gente de CakePHP, nos indican paso a paso qué pasos debemos seguir para poder exportar nuestros contenidos a hojas Excel. Para ello es necesario tener instalado las librerías que aporta PEAR para la generación de documentos Excel.
Mi experiencia desarrollando una librería para generar Excel (en Java) me obliga a decir dice que cualquier ayuda es buena, ya que la diferencia entre versiones de Excel es significativa.
No olvidemos a Drake si queremos usar esta librería en nuestro Drupal.
Generate Excel spreadsheets from your database
Vía / Prográmame.net

|

Lingua: otra herramienta de blogs

lingua.pngLingua es un CMS pensado para la creación de blogs, desarrollado como proyecto opensource, está basado en PHP, MySQL y Ajax. Diseñado para ser muy flexible, potente y sobre sin pesar demasiado.
Aún no está disponible una versión inicial, pero los fuentes los podemos bajar del Subversion y podemos probarlo un poco en la demo.
lingua2.png
Ahora solo falta que el grupo de desarrolladores y colaboradores creen un repertorio interesante de extensiones y temas.
Lingua
Vía / Kernel Source

| | |

Microsoft pide revisar el acuerdo Google-DoubleClick

Microsoft ha pedido revisar el acuerdo al que han llegado Google y DoubleClick por temas de antimonopolio (antitrust).
Según comenta la gente de Microsoft, los 3,100 millones de dólares del acuerdo anunciado el viernes, podrían resentir el mercado de publicidad en la web, el cual crece de forma muy rápida, a parte de reunir demasiada información personal por parte de Google, uno de las empresas más importantes en este negocio.
Como respuesta a esta afirmación, Eric E. Schmidt, director ejecutivo de Google, dice que la reclamación lanzada por Microsoft no es cierta. Para ellos Google atiende los intereses y las preferencias de los usuarios de su motor de búsqueda, teniendo en cuenta que DoubleClick es el líder en servicio de publicidad en formato gráfico y vídeo.
Paralelo a todo esto Time Warner no han decidido si intentar bloquear el trato entre Google y DoubleClick, y Yahoo no realiza ningún comentario.
Microsoft Urges Review of Google-DoubleClick Deal
Vía / Techmeme