viernes, 6 de abril de 2012

Aprovechar al máximo NetBeans

Antes de empezar nuestra primera aplicacion en ZF nos conviene Hacer una configuracion supersencilla en el NetBeans que nos va a facilitar muchisimo el trabajo.


  1. Como es logico abrir el NetBeans
  2. Iremos al menu Tools
  3. Abriremos Options (Imagen 1.1)
  4. Iremos hasta keymap
  5. En el campo de búsqueda, le escribiremos Zend
  6. Le daremos al botón de los 3 puntitos en el apartado de acceso directo (Imagen 1.2)
  7. Presionaremos las teclas que querramos usar para abrir las opciones de Zend, en el ejemplo he usado Ctrl+Shift+Z (Imagen 1.3) y presionaremos Enter para que quede guardado.
  8. Le daremos al botón de Ok en la parte inferior para cerrar y listo

Imagen 1.1

Imagen 1.2

Imagen 1.3


En el siguiente Post veremos una gran utilidad

Directorios de un proyecto Zend y su funcionamiento

Como funciona Zend??
ZF se basa en MVC (Modelo, Vista, Controlador) Esto es una forma de trabajar que separa el código, de la base de datos, de la vista al usuario, también conocido como modelo en 3 capas.

Como lo hace??
El usuario entra en nuestra web, por lo que solicita al servidor una vista.
la vista, hace una petición al controlador.
El controlador, pide los datos de la BBDD al Modelo
El modelo, le devuelve los datos al Controlador
El controlador, le pasa los datos a la vista

Con esto lograremos tener unas aplicaciones web, bien organizadas y escalables, lo que quiere decir que si tenemos que ampliar alguna parte no tendremos problema con las demás, ya que esta todo separado, además de que si queremos trabajar con distintas bases de datos (para hacer pruebas por ejemplo) no necesitaremos andar cambiando en todas las paginas el acceso a la base de datos, con un solo cambio lo tendremos en toda la web, lo mismo ocurre con cualquier función, etc; e incluso si queremos cambiar la interfaz del usuario, podremos hacerlo sin problemas ya que el código y los datos van por otro lado.

Después de crear el proyecto como ya hemos visto con NetsBeans nos creara una serie de directorios, necesarios para su funcionamiento.


Como podemos ver el primero se llama application este es uno de los mas importantes, si lo abrimos podemos ver que a su vez alberga una serie de carpetas y archivos.


La primera carpeta que nos encontramos es configs que es la encargada de guardar application.ini en donde deberemos editar la configuración de nuestra aplicaicon.Por defecto viene algo así:

1-[production]
2-phpSettings.display_startup_errors = 0
3-phpSettings.display_errors = 0
4-includePaths.library = APPLICATION_PATH "/../library"
5-bootstrap.path = APPLICATION_PATH "/Bootstrap.php"
6-bootstrap.class = "Bootstrap"
7-appnamespace = "Application"
8-resources.frontController.controllerDirectory = APPLICATION_PATH "/controllers"
9-resources.frontController.params.displayExceptions = 0
10-
11-[staging : production]
12-
13-[testing : production]
14-phpSettings.display_startup_errors = 1
15-phpSettings.display_errors = 1
16-
17-[development : production]
18-phpSettings.display_startup_errors = 1
19-phpSettings.display_errors = 1
20-resources.frontController.params.displayExceptions = 1
21-


Esta es la configuración que le daremos a cada uno de los 4 estados de trabajo que se usan en Zend

  • production
  • staging : production
  • testing : production
  • development : production
Las 3 ultimas heredan la configuración de production, excepto lo que reescribamos, en la configuración de arriba podemos ver como en la linea 2 y 3 tenemos:

1-[production]
2-phpSettings.display_startup_errors = 0
3-phpSettings.display_errors = 0
mientras en  las 14 y 15

13-[testing : production]
14-phpSettings.display_startup_errors = 1
15-phpSettings.display_errors = 1
Como vemos en las lineas 1 y 13 pertenecen a distintos estados, el estado testing hereda toda la configuración de production, pero reescribe la configuración para mostrar los errores
Esto es muy útil ya que cambiando una única linea de código en el index.php podemos pasar de un estado a otro, y no solo para mostrar u ocultar los errores, si no también podemos configurar distintas bases de datos y otras configuraciones aquí dejo algunos ejemplos:

Para inicializar la conexión a nuestra BBDD .

[production]
resources.db.adapter = PDO_MYSQL
resources.db.params.host = localhost
resources.db.params.username = root
resources.db.params.password = clave1234
resources.db.params.dbname = tabla1

Para inicializar Zend_Layout .

[production]
resources.layout.layout = "NameOfDefaultLayout"
resources.layout.layoutPath = APPLICATION_PATH "/layouts/scripts/"

Otro archivo importante que tenemos en el directorio application y que no esta ubicado en ninguna subcarpeta es: Bootstrap.php que si nos hemos fijado lo inicializamos en las lineas 5 y 6 del application.ini que acabamos de explicar

Este archivo por defecto tiene este contenido:


1-<?php
2-
3-class Bootstrap extends Zend_Application_Bootstrap_Bootstrap
4-{
5-
6-
7-}

Como vemos viene vacío, pero este archivo nos sirve para inicializar las clases del modelo MVC y llamar a algunas funciones que queremos que se llamen para todas ellas, para definir un recurso los nombres de los métodos deberán ser protegidos (protected) y comenzar con _init  así cuando se inicialice la aplicación todos los métodos que cumplan con este prefijo serán ejecutados. Como por ejemplo en:
class Bootstrap extends Zend_Application_Bootstrap_Bootstrap

{

protected function _initEjemplo()

{
La siguiente carpeta que nos encontramos es: controllers
que como su nombre indica albergara los controladores de la  aplicación.
Zend usa el patrón Front Controller para determinar que controlador tiene que ser procesado. Nosotros nos tenemos que encargar de crear los distintos controladores.
Crear un controlador es crear una clase con un nombre determinado que extienda de Zend_Controller_Action y crear uno o varios métodos que serán ejecutados.
Por ejemplo podemos tener la siguiente estructura un sitio:
  • /datos/insertar/
  • /datos/modificar/
  • /datos/imprimir/
  • /datos/
Esto seria algo así:
<?php

class DatosController extends Zend_Controller_Action
{

    public function insertarAction()
    {
    }


    public function modificarAction()
    {
    }

    public function imprimirAction()
    {
    }

    public function indexAction()
    {
        // cuando no hay ninguna accion definida esta es la que se ejecuta.
    }
}

Deberemos tener una vista por cada controlador; para acceder a un método de nuestro controlador deberemos poner en la URL del navegador dominio/controlador/metodo; por ejemplo localhost/datos/insertar
La forma de nombrar un controlador, siempre es NombredelcontroladorController.php; es decir el nombre que queramos darle, comenzando por Letra y Mayuscula, seguido de Controller, también en mayúscula, y con la extensión php
como no hay forma mejor de entender el funcionamiento que trabajando lo veremos con un ejemplo practico en el siguiente post

La siguiente carpeta es la de models esta es la carpeta que contendrá los archivos que trabajan con la BBDD, es pronto todavía para ver como se hace esto, en siguientes post entraremos a detallarlo.

La carpeta que le sigue es views  aquí tendremos las vistas (lo que finalmente vera el usuario)
Dentro de esta carpeta tenemos otras 2

  • helpers: que como su nombre indica es para guardar los archivos de ayuda
  • scripts: este nombre quizás sea menos identificativo, dentro de esta carpeta tendremos una carpeta mas por cada controlador que hallamos creado, ahora mismo por defecto tenemos 2 carpetas error, con su correspondiente vista error.phtml; y también tenemos index, con la vista index.phtml, correspondientes a los controladores ErrorController.php e IndexController.php respectivamente

La siguiente carpeta que nos encontramos es docs y contiene un readme.txt; el cual traducido al castellano nos dice:
README
======

Este directorio debe ser usado para colocar la documentación del proyectoincluyendo specfic
pero no se limita a las notas del proyecto, generado API / phpdocdocumentación, o
archivos manuales generados o escrito a mano. Lo ideal sería que este directorio se mantendría
en su entorno de desarrollo y no debe ser desplegado con su
aplicación para la localización de la producción final.


Configuración de la VHOST
=====================

La siguiente es una muestra de VHOST es posible que desee considerar para su proyecto.

<VirtualHost *:80>
    DocumentRoot "C :/ xampp / htdocs / ZendPrueba / público"
    ServerName. Locales

    # Esto debe ser omitida en el entorno de producción
    SetEnv APPLICATION_ENV el desarrollo

    <Directory "C:/xampp/htdocs/ZendPrueba/public">
        Opciones Indices MultiViews FollowSymLinks
        AllowOverride All
        Order allow, deny
        Dejar de todas las
    </ Directory>

</ VirtualHost>

Esta carpeta es cosa del NetBeans no de ZF, creo que queda claro para lo que sirve, pero no vamos a entrar, al menos de momento en como se crea la documentación.

La siguiente carpeta que nos encontramos es library en esta carpeta deben ir todas las carpetas, archivos y como el nombre dice librerías ya hechas, entre ellas la del ZendFramework, si el editor no nos ha creado dentro la carpeta Zend (tal y como esta escrita) deberemos crearla y copiar dentro todo el contenido de las librerías de Zend, si hemos seguido este tutorial, lo tenemos todo en: C:\ZendFramework-1.11.11\library\Zend; también podremos colocar en esta carpeta todas las librerías que vallamos creando, o que vallamos a usar en nuestro proyecto, sean propias o ajenas.

Ahora nos encontramos con nbproject es otra carpeta del NeatBeans guarda información acerca del proyecto que es usada por el NeatBeans.

Llegando al final nos encontramos con la carpeta public hay tenemos que colocar todas las paginas que va a ver el usuario, como podemos ver tenemos el index.php, que si entramos a nuestro proyecto por la Url, o le damos en el NetBeans a ejecutar sera la pagina que veamos, aquí también deberemos colocar las hojas de estilos, las imágenes, etc.



jueves, 5 de abril de 2012

Crear un proyecto en Netbeans con Zend

En este post crearemos nuestro primer proyecto con Zend desde Netbeans; para ello deberemos de haber dejado listo el Netbeans según lo explicado en el anterior post.
Lo primero, como es lógico sera abrir el IDE.
Después deberemos darle al botón de crear nuevo Proyecto,


nos preguntara que tipo de proyecto deseamos crear, le daremos a Php, y alli a aplicacion en Php,


 le daremos a siguiente, y nos pedirá el nombre del proyecto , yo he elegido PruebasZend, puedes poner el nombre que prefieras.


Le daremos a siguiente y nos pedirá la URL desde la que deseamos lanzar el proyecto;



le daremos a siguiente, y marcaremos la casilla de Zend Framework



Deberemos a Finish, y listo ya tenemos nuestro primer proyecto Zend creado con toda la estructura necesaria para su buen funcionamiento, en el próximo post la explicaré.

Instalacion de Zend Framework en Windows

Bueno hoy os explicare como instalar el Framework para Php en windows, y a que es algo sencillo, pero si no lo hemos hecho nunca, seguramente nos salten trabas por todos lados, como me ocurrió a mi XD.

Lo primero que necesitamos es tener en nuestra maquina instalado una versión actualizada de Php y Apache, esto ya lo hicimos en uno de nuestros pasos anteriores.

Quien no conozca Zend solo comentare que es un Framework el cual nos va a hacer la vida mas fácil a la hora de programar, para entre otras cosas, como se suele decir no perdamos tiempo en reinventar la rueda; para mas información, os dejo la pagina oficial http://www.zend.com/en/ .

1- Lo primero que debemos hacer es descargarnos la ultima versión http://www.zend.com/en/community/downloads

es recomendado descargar la versión mínima, ya que de momento no vamos a usar todas su funcionalidades, y es mas ligero.

2- Después deberemos descomprimirlo, en una carpeta a poder ser no muy larga, yo lo he dejado en: C:\ZendFramework-1.11.11

domingo, 25 de marzo de 2012

Resultados

Hoy seré breve después de mas de 2 horas conectado a mi servidor local desde 3 Ip´s distintas siguio sin cortarse.
Por lo que el problema de los cortes en los servidores web, esta claro que es algo relacionado con la seguridad que tengan instalada... ahora queda descubrir el que, he estado investigando un poco sobre la seguridad en apache, y aunque no estoy seguro, creo que la configuración que busco no esta hay, quizás en algún firewall ...

Me estoy registrando en un tercer servidor gratuito, a ver si hay mas suerte en este, aun asi sigo investigando.

Un saludo.
http://www.poque.es

jueves, 22 de marzo de 2012

Proxy y otras utilidades

Para ocultar tu Ip y así poder probarlo desde tu propia red de ordenadores puedes usar varias opciones, aquí te dejo las que mas uso yo:
TOR
https://www.torproject.org/
es un programita que se ejecuta en tu ordenador, y te abre un navegador portátil, en la versión que tengo yo te abre un firefox, todo lo que visites desde ese firefox portable, estara visto como si fuera desde otra Ip, en la web oficial explican a la perfección su funcionamiento.
Proxy
http://proxy.org/
por poner un ejemplo, en esta web a la derecha tienes un listado de proxy´s elije uno, y busca donde tiene para que pongas la dirección web a la que quieres ir, tipeala, y listo ya estas en la web que quieres visitar, como si accedieras desde otra IP.

Acceder a tu servidor desde fuera

Para que tu web pueda ser vista desde internet, es necesario un par de configuraciones, lo mas importante que necesitamos es conocer la Ip real, para ello tenemos miles de paginas en internet, como por ejemplo:
http://www.cualesmiip.com/

Allí, en mi caso me ha dado: 82.158.17.99 (no os molestéis en intentar nada, tengo Ip dinámica en cuanto lance el post reiniciare el router)
También deberemos configurar nuestro router, para que redireccione las peticiones entrantes por el puerto 80, a la Ip privada de nuestro server, para ello como es obvio nuestro server debe tener una Ip fija, o cada vez que lo reiniciemos podrá tener una Ip distinta y abra que configurar de nuevo el router.(no voy a explicar como hacerlo ya que cambia según el sistema operativo que se use, y es algo muy básico, si tenéis alguna duda, poner un comentario, estaré encantado de ayudar)
Pues bien deberemos entrar en nuestro router, por lo general poniendo en el navegador 192.168.1.1 y logeandote puedes entrar, si no as cambiado los datos de acceso de fabrica suele ser admin/admin ; 1234/1234 , o alguna combinación de ambos, para otros casos mirar el manual del aparato, consultar con tu ISP o a googlear XD

Una vez estemos en el router, deberemos ir a las opciones de NAT, o como en mi caso (NetGear
Reenvío de Puertos) una vez estemos allí deberemos decir que todo el trafico que entre por el puerto 80, que nos lo dirija, al puerto 80 de la ip del server
En mi caso:

Externo
Interno 
 NombrePuerto inicialPuerto finalPuerto inicialPuerto finalProtocolaDirección IP Local
192.168.1.

Una vez realizado esto ya lo tendremos listo, tan solo deberemos abrir un navegador (desde otro ordenador, móvil, etc) y poner
http://"DireccionIpExterna"/"NombreDeTuWeb"/ 
en mi caso:
http://82.158.17.99/poque/ 

Comprueba que no tengas ningún cortafuegos, o antivirus activado, ya que podría cortarte el acceso; con esto ya tenemos nuestro servidor instalado, y visible desde fuera; es posible que si intentas entrar desde la misma red te de algún tipo de error, para evitarlo desde otros ordenadores usa un servicio de proxy.

Con esto ya hecho, solo queda abrir la web, y esperar a ver si también me lo corta como me pasa con el servidor web.

Un Abrazo y Hasta el Próximo post

Funcionamiento en Local

Después de tenerlo unas 3 horas encendido visualizando la pagina principal de la web, la que contiene el chat, la cual refrescándose cada segundo, exactamente igual que la que esta OnLine en mi servidor local no ha fallado.

Esto es debido a que estoy haciendo la petición desde el la misma Ip que aloja la web??
O a que la configuración por defecto no "capa" cuando hay "excesos" de peticiones??

mañana intentare descubrirlo, haré peticiones al server desde Ip´s de fuera y a ver como se comporta, tambien intentare conseguir la configuración del Apache del server OnLine para compararla con la que yo tengo montada, os iré comentando.

Un saludo
http://www.poque.es

miércoles, 21 de marzo de 2012

Configurar conexion BBDD

Cosa sencilla, tan solo deberemos crear una nueva pagina con este código


<?php
mysql_connect("TuServer"," TuUsuario "," TuContraseña") ;
mysql_select_db(" TuBaseDeDatos ");
?>

Otra forma de hacerlo, un poco mas completa seria:


$conexion=mysql_connect("TuServer","TuUsuario","TuContraseña")
  or  die("Problemas en la conexion");
mysql_select_db("TuBaseDeDatos",$conexion)
  or  die("Problemas en la selección de la base de datos");

De esta ultima forma si ocurriera un error en la conexión o a la hora de seleccionar la BBDD nos saldría un error avisandolo.

Esta pagina puede llamarse: ConexionABBDD.php (por ejemplo)
después tendremos que llamarla desde cada una de las paginas que accedan a los datos, o por lo menos a esa misma tabla (esto podría mejorarse metiendo una función que pida un nombre de una tabla en concreto y que mediante un switch te conecte con una o con otra tabla por ejemplo)

Para llamar a esta pagina desde las demás deberemos copiar este código antes de cualquier llamada a los datos:
require_once('RutaDeTuPagina/TuPagina.php');
Un ejemplo seria:
require_once('./Funciones/ConexionABBDD.php'); 

PD: aunque aquí no venga a cuento, tan solo recordar que si pasas estos datos por alguna variable que nunca contenga "ñ" como por ejemplo en contraseña ya que da problemas, en su día yo me volví loco, para hacer un simple login que me comparaba el nombre de usuario con la contraseña almacenada en la BBDD, y me dejaba entrar o no, es lo que tiene ser novato XD.

Problema De Configuración

Nada mas arrancar mi web en local me a dado este error en medio de la pagina, y por supuesto toda descuadrada:

Call to undefined function curl_init()

no era mas que habilitar la extensión de curl para PHP
en php.ini, ubicado en :
C:\xampp\php

hay que buscar curl y borrar el " ; " que tiene delante reiniciar los servicios y listo

ahora tan solo me queda cambiar la conexión de la BBDD, lo cual me recuerda una tarea que tenia pendiente, y es crear un archivo de configuración en el que tener estos datos, y llamarlo desde todas las paginas, para casos como este, o si hacemos las cosas en condiciones, y desarrollamos y probamos en local, cuando subamos la web no tener que andar cambiando algo tan básico como la conexión a la BBDD en todas y cada una de las paginas, tan solo abra que hacerlo en una de ellas, y es mas, si ese archivo lo dejamos quieto en el servidor y no lo pisamos, no habría que modificar nada; así que no se hable mas, manos a la obra