Foros del Web » Administración de Sistemas » Unix / Linux »

[SOLUCIONADO] Rutas relativas y absolutas en servidor local

Estas en el tema de Rutas relativas y absolutas en servidor local en el foro de Unix / Linux en Foros del Web. He instalado Apache + PHP en Manjaro (Linux), distro que deriba de Archlinux. Todo fenomenal, pero tengo problema con los require_once y rutas a imágenes ...
  #1 (permalink)  
Antiguo 27/02/2014, 19:26
Avatar de guardarmicorreo  
Fecha de Ingreso: noviembre-2012
Ubicación: Córdoba
Mensajes: 1.153
Antigüedad: 12 años
Puntos: 84
Rutas relativas y absolutas en servidor local

He instalado Apache + PHP en Manjaro (Linux), distro que deriba de Archlinux.

Todo fenomenal, pero tengo problema con los require_once y rutas a imágenes ya que solo admite rutas absolutas en algunos require_once y para todos los SRC de IMG de HTML solo admite rutas absolutas.

Es rarísimo, es la primera vez que me pasa esto.

¿Alguien tiene idea de qué puede estar pasando y me pueda ayudar?
__________________
Ayúdame a hacerlo por mi mismo.
  #2 (permalink)  
Antiguo 28/02/2014, 03:48
Avatar de pzin
Moderata 😈
 
Fecha de Ingreso: julio-2002
Ubicación: Islas Canarias
Mensajes: 10.489
Antigüedad: 22 años, 3 meses
Puntos: 2114
Respuesta: Rutas relativas y absolutas en servidor local

Pues tendrás que poner cómo enlazas las cosas y la ubicación de las mismas. No creo que te fuerce a poner las absolutas. ¿Qué pasa si las pones relativas? Porque obviamente no puede darte un error de que la ruta está mal. Y si lo hace, es que la ruta está mal.
  #3 (permalink)  
Antiguo 28/02/2014, 06:58
Avatar de guardarmicorreo  
Fecha de Ingreso: noviembre-2012
Ubicación: Córdoba
Mensajes: 1.153
Antigüedad: 12 años
Puntos: 84
Respuesta: Rutas relativas y absolutas en servidor local

Explico cómo estoy distribuyendo el código y muestro mi código a continuación.

En la carpeta raíz de root tengo la carpeta del proyecto "miblog" y dentro de ella las siguientes carpetas:

-controllers.
-models.
-views.

Dentro de views tengo:

-css.
-events.
-html.
-img.

creo que es fácil saber para qué sirve y qué contiene cada carpeta.

A la hora de crear una nueva sección en el blog tengo que hacer lo siguiente para que se vea:

-Crear un archivo en css, en html y en events.

-Incluir el html en events, el event en el index y el css en el index.php.

De tal manera que algo así sería mi código por ejemplo para incorporar un apartado donde el usuario vea mis mensajes en las redes sociales.

social_msg.css |en carpeta views/css
Código CSS:
Ver original
  1. /*estilo para los mensajes del admin en las redes sociales*/
  2.  
  3. #social_msg{
  4.    
  5. }

social_msg.php|en carpeta views/html
Código PHP:
Ver original
  1. <?php
  2. /*HTML para los mensajes del admin en las redes sociales*/
  3.  
  4. function html_social_msg()
  5. {
  6. }
  7. ?>

social_msg|en carpeta views/events
Código PHP:
Ver original
  1. <?php
  2. /*eventos para los mensajes del admin en las redes sociales*/
  3. require_once($_SERVER['DOCUMENT_ROOT'].'/xampp/web/miblog/views/html/social_msg.php'); //linea 3
  4. function print_social_msg(){
  5.     return html_social_msg();
  6. }
  7. ?>

Si lo coloco como ruta relativa, es decir así
Código PHP:
Ver original
  1. require_once('../html/social_msg.php');

me devuelve el siguiente error

Cita:
Warning: require_once(../html/social_msg.php): failed to open stream: No existe el fichero o el directorio in /opt/lampp/htdocs/xampp/web/miblog/views/events/social_msg.php on line 3

Fatal error: require_once(): Failed opening required '../html/social_msg.php' (include_path='.:/opt/lampp/lib/php') in /opt/lampp/htdocs/xampp/web/miblog/views/events/social_msg.php on line 3
Así que decidí poner la ruta absoluta para poder ir avanzando.

Pero ayer al querer probar cómo se verían las imágenes en la portada me encontré con lo siguiente:

si en el archivo summary.php, que se encuentra en la carpeta views/html, quiero poner un img src

tengo que poner la ruta absoluta, es decir, así

Código HTML:
Ver original
  1. <img src="http://localhost/xampp/web/miblog/views/img/Android.png" alt="..."/>

si pongo la relativa

Código HTML:
Ver original
  1. <img src=../img/Android.png alt="..."/>

no se reproduce la imagen.

Esto es rarísimo, porque todo el directorio del proyecto tiene todos los permisos (chmod -R 777 miblog/).

Y además al utilizar AptanaStudio3, al iniciar con dos puntos para escribir la ruta de la imagen el IDE me va mostrando lo que hay en cada directorio que voy escribiendo y exactamente hace lo mismo que yo porque la imagen está ahí.

Por el contrario esto no me pasa en el index.php al incluir las hojas de estilo o los events.

Es rarísimo y nunca me ha pasado :S

Edito:

He tenido que quitar las comillas del último código HTML porque sino el highlight de foros del web auto-incorpora la dirección de forosdelweb.com y mi ruta a la imagen en el ejemplo :S
__________________
Ayúdame a hacerlo por mi mismo.
  #4 (permalink)  
Antiguo 04/03/2014, 10:49
AlvaroG
Invitado
 
Mensajes: n/a
Puntos:
Respuesta: Rutas relativas y absolutas en servidor local

En tu código del lado del servidor, usa siempre rutas absolutas con $_SERVER['DOCUMENT_ROOT']. En el código del lado del cliente, usa siempre rutas absolutas a la raíz del sitio.

Ten en cuenta que si estás en index.php en la raíz del sitio, de ninguna manera podrías hacer "../img/imagen.png" porque eso sería ir al nivel superior, que no existe por ser la raíz. Creo que tu problema es que la raíz del sitio tal y como la ve el navegador no es la que querés que sea.


Saludos.
  #5 (permalink)  
Antiguo 06/03/2014, 10:56
Avatar de guardarmicorreo  
Fecha de Ingreso: noviembre-2012
Ubicación: Córdoba
Mensajes: 1.153
Antigüedad: 12 años
Puntos: 84
Respuesta: Rutas relativas y absolutas en servidor local

Pero hay un problema con lo que me comentas AlvaroG. Con PHP al realizar los includes/require lo hago del lado del servidor.

Se supone que si events y html están dentro de views y quiero incluir un HTML dentro de un event, simplemente con ruta relativa tendría que retroceder una carpeta y entrar en otra, es decir

Código PHP:
Ver original
  1. <?php
  2. require_once ('./html/archivo.php');
  3. ?>

Y funciona para un archivo pero para otro no funciona :S y sí existe ese archivo y tienen la misma localización en la misma carpeta :S
__________________
Ayúdame a hacerlo por mi mismo.
  #6 (permalink)  
Antiguo 06/03/2014, 12:32
AlvaroG
Invitado
 
Mensajes: n/a
Puntos:
Respuesta: Rutas relativas y absolutas en servidor local

Por supuesto que los include/require son del lado del servidor, pero las rutas de las imágenes se procesan del lado del cliente.

Por otro lado, "./html" es la carpeta html dentro de la carpeta actual, supongo que lo de arriba es un error y debió ser "../html".

Lo más recomendable es lo que te comentaba antes: hacer todas las rutas absolutas, sea con DOCUMENT_ROOT o con dirname(__FILE__) en el archivo principal de tu aplicación.

Saludos.
  #7 (permalink)  
Antiguo 06/03/2014, 16:06
Avatar de guardarmicorreo  
Fecha de Ingreso: noviembre-2012
Ubicación: Córdoba
Mensajes: 1.153
Antigüedad: 12 años
Puntos: 84
Respuesta: Rutas relativas y absolutas en servidor local

Cita:
Iniciado por AlvaroG Ver Mensaje
Por supuesto que los include/require son del lado del servidor, pero las rutas de las imágenes se procesan del lado del cliente.

Por otro lado, "./html" es la carpeta html dentro de la carpeta actual, supongo que lo de arriba es un error y debió ser "../html".

Lo más recomendable es lo que te comentaba antes: hacer todas las rutas absolutas, sea con DOCUMENT_ROOT o con dirname(__FILE__) en el archivo principal de tu aplicación.

Saludos.
No fue un error, yo tenía entendido que para acceder a una carpeta que está en la misma carpeta que la actual se tenía que poner un punto antes de la url, para retroceder un directorio, dos si hay que retroceder dos directorios

¿No es así? :S si no es así entonces estoy perdido.

Hacer todas las rutas absolutas me da la impresión de que es hacer código poco portable, porque habrá siempre alguna parte de la ruta absoluta que si se quiere implementar en otro servidor entonces habrá que ir cambiando ruta por ruta, si tienes 10, 15 rutas puedes ser factible, pero en el momento que tengas 30, 40 rutas con include e imagenes dinámicas entonces es un trabajo de chinos.

Te hablo desde mi más humilde ignorancia, puesto que si evidentemente he acudido aquí es porque tengo poca idea y necesito que me ayuden.

Gracias por tu ayuda! :D
__________________
Ayúdame a hacerlo por mi mismo.
  #8 (permalink)  
Antiguo 07/03/2014, 08:05
AlvaroG
Invitado
 
Mensajes: n/a
Puntos:
Respuesta: Rutas relativas y absolutas en servidor local

Tu manejo de los puntos es correcto, simplemente "./html" es idéntico a "html", es decr, el punto es innecesario en ese caso. Lo que quería decir es que dices que events y html están ambos dentro de views, y luego quieres acceder a un html desde un event, por lo que me imagino que te referirás a un archivo dentro del directorio 'events' que debe acceder a uno dentro del directorio 'html', por lo que primero debes "subir" a views, y luego entrar a html, por eso el uso de '../html'.

Hacer las rutas absolutas no implica escribirlas en tu código cada vez, debes hacerlo de forma inteligente. Necesitas una raíz confiable desde la cual sepas que estás solicitando los archivos correctamente, pero tu preocupación con respecto al mantenimiento del código es válida. La forma simple de resolver el problema es definir una constante, algo como
Código PHP:
Ver original
  1. define('RAIZ_APLICACION', dirname(__FILE__))
en tu index.php o el que sea que sea el archivo de entrada de la aplicación. Una vez que tengas eso, perfectamente podés usar sentencias como
Código PHP:
Ver original
  1. require_once(RAIZ_APLICACION . '/blabla/archivo.php')
resultando en código que no depende del servidor donde está instalado, y a la vez no tiene problemas con rutas relativas.


Saludos.
  #9 (permalink)  
Antiguo 07/03/2014, 08:57
Avatar de guardarmicorreo  
Fecha de Ingreso: noviembre-2012
Ubicación: Córdoba
Mensajes: 1.153
Antigüedad: 12 años
Puntos: 84
Respuesta: Rutas relativas y absolutas en servidor local

Muchísimas gracias, diste en el clavo con todo! tema solucionado :D
__________________
Ayúdame a hacerlo por mi mismo.

Etiquetas: ayuda-general, local, relativas, rutas, servidor
Atención: Estás leyendo un tema que no tiene actividad desde hace más de 6 MESES, te recomendamos abrir un Nuevo tema en lugar de responder al actual.
Respuesta




La zona horaria es GMT -6. Ahora son las 09:55.