¡Advertencia!
Este tema no ha tenido respuestas en más de un mes. Recuerda que si deseas añadir una nueva debes cumplir con las normas de la web.
Hola,
Tengo un sitio web donde estoy incluyendo includes para ahorrarme tiempo y, obviamente, la labor de la edición. Resulta que ahora tengo un problema y voy a tratar de ser lo más explícito posible:

Tengo mi carpeta principal que es public_html evidentemente.
En esa carpeta tengo un index.php y tres carpetas: css, includes y panel.
Ahora, en la carpeta includes tengo un archivo php llamado head.php que aparte de todo contiene lo siguiente <link rel="stylesheet" type="text/css" href="css/style.css">
Aquí viene el problema: En el index.php de public_html tengo un include "includes/head.php"; y en la carpeta index.php de la carpeta panel tengo un include "../includes/head.php";.
El problema es que en index.php de la carpeta panel por obvias razones no encuentra el archivo css/style.css

¿Cómo puedo solucionar esto teniendo solo este archivo de includes/head.php?

Muchas gracias y si no se entiende algo no hay problema en tomar pantallazos para que se entienda mejor
Saludos.

Usuario de confianza.
Una solución rápida y facil es que uses rutas absolutas, es decir: "C:ArchivosHostingTuWebcssestio.css".

Si no quieres hacer eso con cada archivo, define una variable en la que guardes la ruta raíz de tu web, por ejemplo:

$rootdir = getcwd();

Eso te gaurdara la ruta absoluta hasta la carpeta raiz de tu web (bueno, hasta la carpeta donde se encuentre el archivo en el que defines la variabble.

Y ahora, cada vez que quieras hacer un include, lo haces como:

include ($rootdir . "/css/style.css");

Habbo Old. Buenos momentos aquellos de cacería...
Si el archivo head.php está dentro del directorio includes, con href="css/style.css" estás indicando que busque el archivo style.css dentro un subdirectorio que no existe en la misma que se encuentra el archivo head.php (es decir, /www/public_html/includes/css/style.css). Si en su lugar añadieras los dos puntos del directorio padre, es decir, "../css/style.css", entonces sí que apuntaría a /www/public_html/css/style.css

Perro viejo de Habbo y de HabboStium. Y lo mismo en la vida real, pero sin el "perro".

Si el archivo head.php está dentro del directorio includes, con href="css/style.css" estás indicando que busque el archivo style.css dentro un subdirectorio que no existe en la misma que se encuentra el archivo head.php (es decir, /www/public_html/includes/css/style.css). Si en su lugar añadieras los dos puntos del directorio padre, es decir, "../css/style.css", entonces sí que apuntaría a /www/public_html/css/style.css


Alex eso ya está bien, el problema radica en que cuando en el archivo index.php de la carpeta panel queda con la ruta ../css/style.css y no encuentra nada. Sí quieres tomó pantallazos para que se entienda mejor


Una solución rápida y facil es que uses rutas absolutas, es decir: "C:ArchivosHostingTuWebcssestio.css".

Si no quieres hacer eso con cada archivo, define una variable en la que guardes la ruta raíz de tu web, por ejemplo:

$rootdir = getcwd();

Eso te gaurdara la ruta absoluta hasta la carpeta raiz de tu web (bueno, hasta la carpeta donde se encuentre el archivo en el que defines la variabble.

Y ahora, cada vez que quieras hacer un include, lo haces como:

include ($rootdir . "/css/style.css");



Ahora lo intento. Quisiera que vieras el codigo de habtium.es y de por ejemplo el código de habtium.es/furni/ítem/5740 y todos dos tienen la línea

<link rel="stylesheet" href="/static/css/stylessheet.min.css?1449400787750"/>

Y las dos llegan a habtium.es/static/css/stylesheet.min.css?1449400787750

Estoy seguro que debe existir algo que haga que las dos lleguen al mismo lugar así sea lo más tonto pero lo hay, y facilita mucho las cosas

Usuario de confianza.
Colocando la ruta completa evitarías eso. Es decir tusitio.com/css/...etc.css

¿O no es destinada para tu sitio sino tipo CMS?

. carbón

Colocando la ruta completa evitarías eso. Es decir tusitio.com/css/...etc.css

¿O no es destinada para tu sitio sino tipo CMS?


Entiendo lo que dices, y sé que es lo más sencillo, pero el hecho no es hacer lo sencillo, es aprender un poquito más.

Edit: Ya solucioné mi problema aunque no como inicialmente lo quería.
Gracias por responder, al final usé $rootdir = getcwd();

Usuario de confianza.
Yo hubiese colocado:

<link rel="stylesheet" type="text/css" href="<? if($_SERVER['REQUEST_URI']=='/panel/') echo '.'; ?>./css/style.css">

Así le añade el punto que falta cuando estás en la carpeta /panel/

EDIT: error xD

Ahi si debería xD

<link rel="stylesheet" type="text/css" href="<? if(strpos($_SERVER['REQUEST_URI'], '/panel/'===TRUE) echo '.'; ?>./css/style.css">

Bueno, para los que vieron y se quedaron con la dudilla de como quedó y la explicación a este "tonto" problema:

1. Cuando se coloca:
<link rel="stylesheet" media="screen" type="text/css" href="css/estilos.css" >
Se está llamando un archivo que está a partir de la carpeta actual

2. Cuando se coloca:
<link rel="stylesheet" media="screen" type="text/css" href="../css/estilos.css" >
Se está llamando un archivo que está a partir de la carpeta anterior a la actual

Y ahora viene lo que causaba tanto revelo

3. Cuando se coloca:
<link rel="stylesheet" media="screen" type="text/css" href="/css/estilos.css" >
Con solo ese / inicial, el browser va a buscar a partir de tu raíz del sitio

Es algo tonto, pero muchas personas no lo sabían
He aquí el link donde lo encontré. Por cierto, si leen la petición del hombre que escribió el tema es algo parecido al mío.
http://www.forosdelweb.com/f18/problema-hacer-include-distintas-carpetas-957671/

Saludos.

Usuario de confianza.
Somos tontos xD

Me pasa mucho cuando me tira error en php, me doy mil vueltas y solo es una comilla o cosas así xddddddddd