miércoles, 1 de agosto de 2012

Silex - Comentario sobre la instalación

En mi servidor local no he tenido problemas para ubicar Silex fuera del servidor Web. Me explico: el raíz de mi servidor Web se encuentra en C:\Carpeta1\Carpeta2\WebServer de modo que el fichero index.php es exactamente C:\Carpeta1\Carpeta2\WebServer\index.php

He copiado la carpeta vendor del paquete Silex dentro de Carpeta2 dejando las cosas con la siguiente disposición:

C:\Carpeta1\Carpeta2\vendor
C:\Carpeta1\Carpeta2\WebServer\index.php
C:\Carpeta1\Carpeta2\WebServer\.htaccess

Y el index.php de prueba con el siguiente contenido

<?php
require_once __DIR__.'/../vendor/autoload.php';
$app = new Silex\Application();
$app->get('/hello', function() {
    return 'Hello!';
});
$app->run();
?>

me ha funciona sin problemas, es decir, http://localhost/hello me devuelve "Hello!".

Cuando el servidor Web es de un tercero nos podemos encontrar con que no se permite crear carpetas "por debajo" del nivel del raíz del servidor, por lo que lo que se puede hacer es copiar la carpeta silex en el raíz y ajustar la ruta del autoload de index.php. Las disposición queda


C:\Carpeta1\Carpeta2\WebServer\silex\vendor
C:\Carpeta1\Carpeta2\WebServer\index.php
C:\Carpeta1\Carpeta2\WebServer\.htaccess

con

require_once __DIR__.'/silex/vendor/autoload.php';

SILEX - Sorry, the page you are looking for could not be found

Nada más empezar a probar Silex nos podemos encontrar con que nos sale todo el rato un mensaje en el navegador como el que se muestra a continuación:


Algo no va bien y al ejecutar ejemplos tan sencillos como este:

<?php
require_once __DIR__.'/../vendor/autoload.php';
$app = new Silex\Application();
$app->get('/hello', function() {
    return 'Hello!';
});
$app->run();
?>

nos sale el mencionado mensaje. Este ejemplo, extraído de la documentación de Silex, debería hacer que con una simple llamada del tipo localhost/miweb/hello, el navegador mostrara la salida "Hello!".

Para resolver esta situación tenemos que hacer algunas cosas.
  1. Instalar el módulo mod_rewrite en Apache si no lo tuviéramos instalado
    Esto está explicado en esta entrada.
  2. Habilitar el uso de .htaccess en nuestro Apache
    Esto está explicado en esta entrada
  3. Poner en el raíz de nuestra Web un fichero .htaccess con el siguiente contenido:
  RewriteEngine On
  RewriteCond %{REQUEST_FILENAME} !-f
  RewriteCond %{REQUEST_FILENAME} !-d
  RewriteRule ^(.*)$ index.php [QSA,L]

Una pequeña explicación sobre el contenido del .htaccess
Silex nos podría funcionar simplemente con este contenido...

  RewriteEngine On
  RewriteRule ^(.*)$ index.php [QSA,L]

(donde el significado de los FLAGS  QSA y L están muy bien descritos en esta página)

... que lo "mandaría" todo sin excepción a index.php, pero se han añadido dos condiciones de forma que, teniendo en cuenta que , %{REQUEST_FILENAME} es una variable del servidor que contiene la ruta local completa de la petición en el sistema de archivos local, la condición

RewriteCond %{REQUEST_FILENAME} !-f
... hace que si la petición es la de un fichero que existe en el servidor, entonces no se sirve index.php. Es decir, si la petición se corresponde con un fichero real, se sirve éste y no index.php

y la condición

RewriteCond %{REQUEST_FILENAME} !-d
... hace que si la petición es la de un directorio  que existe en el servidor, entonces no se sirve index.php. Es decir, si la petición se corresponde con un directorio real, se sirve el contenido de éste y no index.php.

Nota final:
Por lo que he podido leer en algunos casos es posible que en el .htaccess antes de los RewriteCond sea necesario incluir una línea como la siguiente:

RewriteBase /path/to/app

MUY IMPORTANTE:
Al poco de escribir esta entrada he visto que en esta página se encuentra la documentación oficial de Silex sobre cómo se ha de configurar Apache.

Activar mod_rewrite en Apache

Este es uno de lo módulos más útiles de Apache que nos permiten sacar mucho partido a los .htaccess. Para comprobar si lo tenemos instalado hay que mirar en el apartado "Loaded Modules" de la información que obtenemos mediante la función phpinfo() de php. Si en la lista no aparece mod_rewrite, entonces tendremos que configurar Apache para que lo cargue.

Es muy sencillo, simplemente hay que editar el fichero httpd.conf ubicado en la carpeta "conf" del directorio donde está instalado Apache y habilitar la línea "LoadModule rewrite_module modules/mod_rewrite.so". Luego reiniciamos Apache y con phpinfo() podremos verificar si se ha cargado el módulo.

viernes, 4 de mayo de 2012

NetBeans - Problemas con MySQL

En ocasiones me he encontrado con que al hacer un query desde NetBeans a una base de datos MySQL se produce un error "can not be represented as java.sql.Date".

Para solucionarlo hay que seguir los siguientes pasos:

Paso 1
Haciendo clic derecho sobre la conexión y utilizando la opción marcada en rojo en la imagen que sigue, la desconectamos. Entonces el icono aparecerá como partido.


Paso 2
Con clic derecho editamos las propiedades de la conexión tal y como se muestra en la figura que sigue mediante la opción resaltada en rojo:


Paso 3
Ahora editamos la "URL de la base de datos" (destacada en azul en la imagen de arriba) y añadimos 'zeroDateTimeBehavior=convertToNull' con lo que la URL del ejemplo quedaría de la forma:

jdbc:mysql://localhost:3306?zeroDateTimeBehavior=convertToNull

Con esto ya queda resuelto el problema.

martes, 3 de abril de 2012

NetBeans - Problemas con el FTP

Al configurar un proyecto para que NetBeans actualice directamente los ficheros vía FTP, me encontraba con que cada vez que NetBeans intentaba subir un fichero se producía un error como el siguiente.

NetBeans a problem with FTP operations

El mensaje indica que es una cuestión de FireWall, pero después de varios intentos infructuosos de resolverlo desde la ventana de gestión del FireWall de Windows, lo he solucionado ejecutando directamente esta instrucción desde la línea de comandos como administrador:

netsh advfirewall set global StatefulFtp disable

(Esta situación se ha producido trabajando sobre un Windows 7 Professional)

viernes, 2 de marzo de 2012

Habilitar el funcionamiento de .htaccess en local

Si nuestro Apache hace caso omiso de nuestros ficheros .htaccess, lo más probable es que haya que hacer un pequeño cambio en su fichero de configuración. Tendremos que ir a la carpeta "conf" del directorio en el que se encuentra instalado Apache y editar el fichero httpd.conf.

Simplemente hay que hacer una modificación como la que se muestra a continuación, grabar los cambios y reiniciar el servidor Apache.

<Directory "C:/Apache2.2/htdocs">
    Options Indexes FollowSymLinks
    AllowOverride None (Cambiar por AllowOverride All)
    Order allow,deny
    Allow from all
</Directory>

Atención:
En otras partes del fichero httpd.conf nos podemos encontrar con bloques del tipo

<Directory "C:/LaRutaQueSea">
.
.
</Directory>

donde tendremos que hacer la misma operación sustituyendo AllowOverride None por AllowOverride All.

jueves, 5 de enero de 2012

SILEX - PHP micro-framework basado en Symfony2

Como Symfony es complejo y el proceso de aprendizaje no tan rápido como uno quisiera, SensioLabs nos ofrece SILEX como alternativa. No lo he probado todavía, pero es como un mini-Symfony y posiblemente para el desarrollo de muchas aplicaciones sea más que suficiente.

Habrá que aprovechar y ver también que es Pimple, una mini-herramienta utilizada por SILEX.