April 28th, 2012 Category: Programacion Zend Framework
30 Comments »

Increiblemente he recibido muchas preguntas sobre como instalar Zend Framework en un hosting donde no tengo acceso al virtual host, y a la configuracion de apache en general.

Realmente esto es muy simple, ahora vamos a ver porque.

Zend Framework no requiere que el proyecto donde se use, sea con MVC lo sugiere pero no hace falta. Por lo que no veamos la estructura de carpetas de Zend Framework como algo estricto.

Las carpetas que Zend_Tool crea cuando inicia un proyecto son las siguientes.

application/
docs/
library/
public/
tests/

Siendo public/ el punto de entrada a nuestra aplicacion, si nosotros configuramos el virtual host en apache vamos a apuntar el documentRoot de la aplicacion a la carpeta public, esto es debido a que esta carpeta contiene dos archivos escenciales para el funionamiento de la aplicacion creada en Zend Framework, index.php y .htaccess. Estos archivos van a procesar todas las urls de nuestra aplicacion y la van a redirigir al controller necesario, o al arcvhivo estatico. Teniendo en cuenta esto. Vamos a analizar como es hoy un hosting comun y corriente.

Hace mucho que no uso un hosting como los de elserver.com, datattec.com, y todos esos server que ofrecen servicios de hosting compartidos, no voy a hablar ni bien ni mal, prefiero no desviar el tema, si pueden paguense un VPS no son tan caros.

Cuando activamos nuestra cuenta en el hosting, le asignamos un dominio por ejemplo mipaginazf.com, nos van a dar una cuenta de FTP y con esa cuenta nosotros vamos a entrar desde filezilla, o el cliente FTP que usen. Cuando nos logueamos con nuestros datos podemos ver un listado de directorios con diferentes propositos

cgi/
public_ftp/
public_html/
backup/

etc… esto dependene del proveedor pero pueden tener diferentes nombres, mas o menos carpetas.

Lo que tenemos que tener como importante es que todos nuestros archivos web “deberian” ir en la carpeta public_html para ser interpretados, esta carpeta va a ser el punto de entrada de nuestro dominio mipaginazf.com

Digo deberian, con comillas (“) porque en nuestro caso tenemos una carpeta pubic/ que es nuestro punto de entrada, donde tenemos todos los archivos estaticos de nuestro proyecto y nuestro index.php y .htaccess que determinan que controller ejecutar.

Teniendo en cuenta esto, podriamos tener en el root/ de nuestro FTP las siguientes carpetas

cgi/
public_ftp/
public_html/
backup/
application/
docs/
tests/
library/

etc.

Los archivos index.php y .htacces como todo el resto del contenido estatico solo necesitamos moverlo a la carpeta public_html

Y asi de facil es configurar un proyecto en un hosting.

Obviamente antes de contratar un hosting, pregunten que soporte archivos .htaccess, tenga rewrite activo, y la version de php sea mayor a 5.2.x

Subscribe to me on YouTube

Comentar


30 Responses

Usuario agradecido 2012-04-28 16:04:14
Gracias por la información Pablo. También por la serie de artículos sobre Zend Framework, que son de ayuda para tanta gente.

Tengo un par de preguntas.

Supongamos que los directorios

application/
docs/
library/
tests/

En vez de dejarlos ahí en el / del hosting, los quieres meter dentro de otro directorio para tenerlo todo un poco más "ordenado".

Y supongamos que dentro del public_html/ creamos un directorio llamado proyecto/ y ahí metemos el index.php y el .htaccess

Habría que hacer modificaciones en algunas partes del código para que esto funcionase no??

Un saludo y gracias.

Pablo Morales 2012-04-28 16:10:56
Ahi la estarias complicando un poco.

Lo ideal es que vaya todo en el root del ftp.

Si queres algo mas personalizado ya tenes que meterte demasiado a toquetear Zend Framework :(

Se puede pero no es trivial

usuario@agradecido.com 2012-04-28 16:22:47
Pienso que lo interesante sería como expongo, pero sin problemas.

Como mínimo, creo que sería bastante importante poder meter el archivo index.php y .htaccess dentro de otro directorio en /public_html, quedando /public_html/proyecto/ y el index.php y .htaccess, ya que si se tiene más de una web en el mismo hosting es lo mas normal.

De todas formas seguro que es de ayuda este post para mucha gente :)

Tomas Zon 2012-04-28 17:57:26
Buenisimo el aporte Pablo.
Para el usuario agradecido, le recomiendo reflexione sobre dejar un proyecto Zend dentro de otra carpeta. Es bastante engorroso hace eso.
Le recomiendo que se cree varios subdomains (en cualquier hosting te permiten hacer n subdomains gratuitos) y apuntar cada uno de estos a una carpeta en el root de tu cuenta.
Te quedaría algo así:

/public_html <- root de tu cuenta
/proyecto1/
/proyecto1/public_html/ <-root del subdominio
/proyecto1/application/
/proyecto1/library/
/proyecto2/
/proyecto2/public_html/ <-root del subdominio
/proyecto2/application/
/proyecto2/library/

Cabe aclarar que para este tipo de proyectos, sólo necesitás una copia de Zend Framework, solucionando varios problemas de espacio y archivos duplicados. Te quedaría algo así

/public_html <- root de tu cuenta
/library/Zend
/proyecto1/
/proyecto1/public_html/ /library/Zend
/proyecto2/
/proyecto2/public_html/ /library/Zend

Espero que se haya entendido, cualquier duda, ahí tienen mi mail...

Saludos!!

Heraud 2012-04-29 01:01:14
Justo lo que necesitaba. Muchas gracias Pablo

Francisco Pinzón 2012-04-30 18:22:39
Muy buen post, no aplaudo ni cuestiono, no lo he "probado", "reprobado" ni "aprobado", solo lo intenté uina vez en un subdominio en un hsoting gtratis, pero nada, falta hacer buen analisis, pero todo tiene logica, se ve logico.

Gracias PM.

Esteban 2012-05-05 15:03:09
Hola Pablo,
Muchas gracias por postear estos articulos, la verdad son de gran utilidad. Y en este caso me ha servido mucho ya que tenía esa duda hace tiempo. No imaginaba que fuera tan simple.

Ahora me disculpo por hacer una pregunta sobre otro tema, pero no se donde hacerla.

Estoy tratando de validar en un form un campo file junto con un campo text, es decir, tengo que comparar el numero del campo text sea el mismo numero que contiene el nombre del archivo, pero cuando uso $rev->addValidator('ValidaRev', false, array('token' => 'archivo' )); el valor de archivo no pasa, si no solo el valor de MAX_FILE_SIZE,
Como puedo hacer para que pase el valor del $_FILES["archivo"]["name"] ?.
Si esta validacion la hago comparando campos de texto no hay drama, el asunto está con el campo de tipo file.

Muchas gracias.

Saludos

Pablo Rigazzi 2012-05-07 18:33:31
Para los chicos que preguntaron como configurar el Zend Framework en servidores sin public_html o en un subdirectorio... les cuento que esto es algo que siempre me complicó y este año busqué un método para solucionarlo de una vez. Les dejo en link al post donde lo explico :

http://spanish.zendfw.com/zend-framework-en-servidores-sin-public_dir-public_html-o-en-subdirectorio/

Saludos y espero que les sirva.

César 2012-05-11 14:02:50
gracias por todos los tutoriales, los seguí y tengo la pequena aplicacion ahora decidi probarla en un servidor compartido, todo va bien pero de alguna forma tengo el problema con la coneccion a base de datos,
resources.db.adapter = "PDO_MYSQL"
resources.db.params.hosts = "abc.mysql.db.internal"
resources.db.params.username = "abc_root"
resources.db.params.password = "av135"
resources.db.params.dbname = "abc_news123"
resources.db.params.charset = utf8
resources.db.isDefaultTableAdapter = true

pero en localhost funciona sin ningun problema.
Como podria solucionar eso?
muchas gracia spor anticipado
atentamente
César

pablofmorales@gmail.com 2012-05-11 14:35:44
los datos de conexion en el otro ambiente son exactamente los mismos?

cearroyo@hotmail.com 2012-05-11 14:48:34
solo cambie un poco los valores, pero en si, son los mismos datos
y me sale siempre el error
Message: SQLSTATE[HY000] [2002] Can't connect to local MySQL server through socket '/tmp/mysql.sock' (2)
como dije , en local funciona si ningun problema

pablofmorales@gmail.com 2012-05-11 15:11:02
Tu servidor de Mysql no esta corriendo, o esta apuntando el mysql.sock a un lugar diferente que el que espera el php.ini de tu server.

cearroyo@hotmail.com 2012-05-11 15:25:15
el servidor funciona perfectamente, hice un test en php.index comentando las lineas de zend y escribiendo las de session
mysql_connect($db_host,$db_user,$db_pass) or die("Couldn't connect to database, please contact webtiser - ");
mysql_select_db($db_dbname);
y recibo true , si cambio algun dato de la autentificacion recibo el error.
puede ser algun problema en la cofiguracion de PHP? o quizas en el archivo .htaccess?
aunque al menos veo el Layout y las pantallas en las que no se hace consultas de base de datos.
disculpa el abuso de confianza, ya estuve muchas horas dandole vueltas al problema...
Gracias

cearroyo@hotmail.com 2012-05-12 07:53:11
Buenos dias, creo haber encontrado donde esta el problema, pero no se como podria solucionarlo, local trabajo con XAMPP php 5.3.8 y donde la web esta alojada esta instalado php 5.3.10
En mi servidor compartido encuentro la linea (phpinfo):
mysql.default_socket /tmp/mysql.sock /tmp/mysql.sock
mientras que local :
mysql.default_socket MySQL MySQL
segun entiendo deberia configurar la aplicacion para que el socket de mysql apunte al configurado en el servidor compartido, es decir /temp/mysql.sock, intente agregar la linea resources.db.params.unix_socket = "/tmp/mysql.sock" al application .ini, pero no logro solucionar el problema, alguna idea?
Muchas gracais y Saludos
César

Pablo Morales 2012-05-12 09:17:10
Cesar no es error de ZF eso, claramente es un error que tenes que arreglar desde el php.ini o desde el my.cnf la verdad es que en este caso si no sabes arreglarlo te diria que hables con la gente que hace el mantenimiento del servidor, ya que yo te puedo decir toca aca o aca, pero por ahi podes romper algo.

cearroyo@hotmail.com 2012-05-12 09:46:03
acabo de leer tu respuesta, muchas gracias Pablo veré eso el lunes pues durante el fin de semana no hay atencion al cliente.
Saludos
César

Daniel 2012-05-17 01:09:13
Hola pablo:
Lo que hago es evitar la carpeta public, es decir sacar el index.php y el .htaccess al nivel de application, library, docs, etc. Solo que en este caso se tiene que cambiar el PATH de application dentro del index.php.

Lo que se tiene:

defined('APPLICATION_PATH')
|| define('APPLICATION_PATH', realpath(dirname(__FILE__) . '/../application'));

Lo que Hago:
defined('APPLICATION_PATH')
|| define('APPLICATION_PATH', realpath(dirname(__FILE__) . '/application'));

con esto se podria poner la aplicación dentro de public_html o dentro de otro directorio.

Es una buena practica lo que estoy haciendo. Espero tu comentario y/o recomendaciones.

muchas gracias.

eternauta 2012-05-30 21:30:11
Saludos, tu blog es excelente, de los pocos que ofrecen contenido de calidad sobre php y zend, me saco el sombrero.

Krauzer 2012-06-20 13:52:22
Interesante artículo.

Solo que te quería pedir un poco de ayuda. La documentación de Zend Framework es malísima y hay cosas que no se explican bien ni siquiera en la comunidad que hacen uso de este framework.

Es por ello me gustaría pedirte que me orientes en alguna guía o forma de aprender a utilizar este framework para los proyectos de mi empresa.

Desde ya agradezco tu ayuda.

Álvaro 2012-06-20 18:47:08
Pablo:

He estado siguiendo tus videos para comenzar a trabajar con Zend Framework y me han parecido excelentes. Ahora estoy creando un proyecto para un ramo en la universidad y tengo la siguiente duda: ¿cómo puedo acceder al proyecto desde otro pc? He intentado mediante la IP de mi laptop, puedo acceder a las carpetas que crea Zend_Tool y cuando llego al index.php (situado en public) veo el sitio sin las propiedades de css, es como si fuera sólo html.
Espero me puedas ayudar.

Muchas gracias y saludos.

Omar 2012-06-21 18:31:39
Muchas gracias por el curso de Zend, la verdad que me ha sido de gran ayuda, espero y continúes con el curso.

Francisco 2012-07-09 23:14:07
Pablo una consulta, segui tal cual describiste los pasos pero yo tengo un sitio ya subido en el hosting y lo que quiero es agregar mi app zend en este mismo hosting para lo que cambien el nombre del archivo index.php por indexAdmin.php. Por lo poco que entiendo eso no seria problema. Ahora una vez subido todo obtengo el siguiente error al ingresar a la url de la pagina indexAdmin.php

Parse error: syntax error, unexpected T_OBJECT_OPERATOR in /home/bv000124/public_html/indexAdmin.php on line 26

Alguna idea sobre esto?

Pablo Morales 2012-07-10 02:36:27
fijate que hay en esa linea mal :)

Debes tener algun signo mal escrito te falta un ; o algo.

Roberto 2012-07-23 18:17:57
Geniales videos tutoriales Pablo!...
He visto cada uno de ellos... y me han acelerado muchisimo el aprendizaje.

No querio hacerte consulta, sino pedirte consejos, o mejor aún, algun video tutorial (cortito) sobre decoradores de Zend_Form.

En este momento estoy luchando con eso... tratando de adaptarlos al bootstrap framework css.

Muchas gracias capo!.

Saludos

alexander 2012-07-26 10:42:23
hola sucede que necesito poner mi aplicacion en un subdominio entonces probe loq ue dice daniel mas arriba sobre cambiar los path del index.php pero me salio un error sobre permisos en los Logs y esos archivos ya tienen todos los permisos alguien tiene alguna idea de que sucede?

jhon 2012-08-09 00:14:00
hola subi todo al host como explica el tutorial pero a la hora de escribir la url queda asi :
www.eldominio.com/index.php/elcontroller/elaction/
quiero saber si se puede www.eldominio.com/el cotroller/elaction. lo que quiero es evitar el index.php en la url .
puede hacerse eso??

l3ambin0 2012-09-28 13:40:46
Antes que nada felicidades y gracias por los tutoriales, he logrado seguirlos muy bien...

Mi pregunta es, en un hosting sobre Windows Server, es decir IIS como es posible configurar Zend?..

De antemano muchas gracias. Saludos desde México.

manuel 2012-11-02 21:12:36
hola que tal pablo, gracias por la aportacion, amigo tengo un problema!, hace unos dias contrate un hosting [hostpapa], asegurandome de su soporte [ el .htaccess y que este activa el modo rewritte, ellos me dijieron que si], el orden de las carpetas es tal cual como indicas, sin embargo me marca un error de bucle de dirección.
me gustaria saber el motivo de este, y como solucionarlo. gracias

david 2012-11-15 11:33:00
hola, porfavor si me pudieras apoyar, veras tengo un sistema web que estuve desarrollando en una mac (ZendFramework-1.12.0 que funcionaba perfectamente), y ahora lo lleve a un windows, y no funciona desde el login, me da un error ""NetworkError: 404 Not Found - http://localhost/misistema/controller/view" , despues de haberlo revisado, tengo dos opciones, que no reconozca bien los .js, o que no reconozca la estructura del zend. gracias de antemano

Víctor 2013-02-20 08:28:30
Hola Pablo,

Veo que ha pasado algún tiempo desde tus publicaciones. Sólo darte las gracias por el material que hiciste y animarte a continuar con tu trabajo que a mi modo de ver ayuda de forma inimaginable a gente como yo que empieza en el tema serio del desarrolo de aplicaciones en PHP.

Gracias.