Foros del Web » Programando para Internet » PHP »

[SOLUCIONADO] Problemas con define+include+ruta :S

Estas en el tema de Problemas con define+include+ruta :S en el foro de PHP en Foros del Web. Holaaa Tengo un archivo config.php en el que declaro varias cosas, entre ellas la ruta del sistema, algo asi: config.php @import url("http://static.forosdelweb.com/clientscript/vbulletin_css/geshi.css"); Código PHP: Ver ...
  #1 (permalink)  
Antiguo 06/02/2013, 12:36
Avatar de catpaw  
Fecha de Ingreso: mayo-2010
Ubicación: xalapa
Mensajes: 856
Antigüedad: 14 años, 6 meses
Puntos: 23
Problemas con define+include+ruta :S

Holaaa


Tengo un archivo config.php en el que declaro varias cosas, entre ellas la ruta del sistema, algo asi:

config.php
Código PHP:
Ver original
  1. define("PATH", $_SERVER['DOCUMENT_ROOT']."plantilla/", true);

Se supone que ya solo se deberia cambiar el nombre plantilla por el nombre que le pongan a la carpeta del sistema.

Ahora tengo un archivo llamado menu.php donde tengo todos los enlaces, entonces para poder incluir este menu en cualquier pagina del sistema, tengo que poner las rutas absolutas para no obtener 404:

menu.php
Código HTML:
Ver original
  1. <ul class="m-cont-columna">
  2.         <li><a href='<?php echo PATH ?>control_usuarios/control_users.php'>Usuarios del Sistema</a></li>
  3.          <li><a href='control_usuarios/control_users.php'>Usuarios del Sistema</a></li>
  4. </ul>

Despues en mi index incluyo config.php y menu.php:

Código HTML:
Ver original
  1. <?php require_once('config/config.php'); ?>
  2. ...
  3. <div id="menu">
  4. <?php include('menu.php'); ?>
  5. </div>
  6. </body>
  7. </html>


El problema es que en el menu, en los links que les muetro,

El primer enlace es intentanto usar mi archivo config y el define de la ruta
El segundo enlace es el link normal

En firefox cuando le doy clic al primer enlace me manda este error:

The address wasn't understood
Firefox doesn't know how to open this address, because the protocol (c) isn't associated with any program.


y en la barra de direcciones me muestra:

c:/wamp/www/plantilla/control_usuarios/control_users.php


la ruta esta bien no se porque no me manda al archivo

el segundo enlace me manda al archivo sin problema

No se si estoy usando correctamente el define al llamar el archivo asi:

href="<?PHP echo PATH ?>"carpeta/archivo.php"

les agradeceria una ayuda
  #2 (permalink)  
Antiguo 06/02/2013, 12:49
Avatar de Triby
Mod on free time
 
Fecha de Ingreso: agosto-2008
Ubicación: $MX->Gto['León'];
Mensajes: 10.106
Antigüedad: 16 años, 3 meses
Puntos: 2237
Respuesta: Problemas con define+include+ruta :S

Código PHP:
Ver original
  1. <?php
  2. // __FILE__ Contiene info del script actual, en este caso, config.php
  3. // Si estás en windows hay que reemplazar diagonales
  4. $path = str_replace('\', '/', basename(__FILE__)) . '/plantilla/';
  5. define('PATH', $path);
__________________
- León, Guanajuato
- GV-Foto
  #3 (permalink)  
Antiguo 06/02/2013, 13:00
Avatar de catpaw  
Fecha de Ingreso: mayo-2010
Ubicación: xalapa
Mensajes: 856
Antigüedad: 14 años, 6 meses
Puntos: 23
Respuesta: Problemas con define+include+ruta :S

Hola Triby gracias por tu respuesta la estoy probando pero me marca un error de sintaxis que estoy checando.

Te queria comentar que estoy probando en un sistema windows pero al final el sistema quedara en linux, sin embargo, puede haber la posibilidad que tambien lo alojen en servidores windows.

Por lo que esto deberia funcionar en ambos sistemas, que me recomiendas?

Edito: ya arregle el problema de sintaxis eran espacios, en fin probe y ya me manda a una pagina, pero es 404 la direcion que me sale es:

http://localhost:8080/plantilla/config.php/plantilla/control_usuarios/control_users.php

lo que remarque en negritas es lo que sobra en la direccion para que sea correcta

mi directorio es mas o menos asi:

---plantilla
---index.php
---menu.php
---config
-------------------config.php
  #4 (permalink)  
Antiguo 06/02/2013, 13:05
Avatar de Triby
Mod on free time
 
Fecha de Ingreso: agosto-2008
Ubicación: $MX->Gto['León'];
Mensajes: 10.106
Antigüedad: 16 años, 3 meses
Puntos: 2237
Respuesta: Problemas con define+include+ruta :S

Eso debe funcionar para ambos sistemas, yo lo uso sin problemas.

En cuanto al error de sintáxis, dinos cuál es e incluye la línea donde marca el error.
__________________
- León, Guanajuato
- GV-Foto
  #5 (permalink)  
Antiguo 06/02/2013, 13:10
Avatar de catpaw  
Fecha de Ingreso: mayo-2010
Ubicación: xalapa
Mensajes: 856
Antigüedad: 14 años, 6 meses
Puntos: 23
Respuesta: Problemas con define+include+ruta :S

Si gracias lo del error ya lo arregle, config.php quedo asi:

$path = str_replace(' \ ', ' / ', basename(__FILE__)).'/plantilla/';

define('PATH', $path);

eran espacios entre las barras, el problema ahora es que no me manda a la direccion correcta, como comento, me mando a la direccion:

http : // localhost:8080/ plantilla/ config.php/ plantilla/ control_usuarios/ control_users.php

y debo llegar a:

http : // localhost:8080/ plantilla/ control_usuarios/ control_users.php

mi directorio es mas o menos asi:

---plantilla
--------index.php
--------menu.php
--------config
-------------------config.php
--------control_usuarios
-------------------control_users.php

se supone que index.php y control_users.php (entre otras) incluiran a menu.php
  #6 (permalink)  
Antiguo 06/02/2013, 13:21
Avatar de Triby
Mod on free time
 
Fecha de Ingreso: agosto-2008
Ubicación: $MX->Gto['León'];
Mensajes: 10.106
Antigüedad: 16 años, 3 meses
Puntos: 2237
Respuesta: Problemas con define+include+ruta :S

Se supone que config debería estar en la raíz del sitio, pero, igual se puede eliminar el directorio que sobra:

Por cierto, la función no es basename() sino dirname(), sorry!

Código PHP:
Ver original
  1. $path = str_replace('\', '/', dirname(__FILE__));
  2.  
  3. // Suponiendo que tienes c:/wamp/sitio/plantilla/config
  4. // Eliminamos la parte que no se necesita
  5. $path = str_replace('/config', '', $path);
  6. define('PATH', $path);
__________________
- León, Guanajuato
- GV-Foto
  #7 (permalink)  
Antiguo 06/02/2013, 13:50
Avatar de catpaw  
Fecha de Ingreso: mayo-2010
Ubicación: xalapa
Mensajes: 856
Antigüedad: 14 años, 6 meses
Puntos: 23
Respuesta: Problemas con define+include+ruta :S

O.O ya casi creo que ya casi

mira, ya pase mi archivo config.php a la raiz del sitio:

---plantilla
--------index.php
--------menu.php
--------config.php
--------control_usuarios
-------------------control_users.php

ahora cambie el config.php y quedo asi:

Código PHP:
Ver original
  1. $path = str_replace(' \ ', ' / ', dirname(__FILE__));
  2.  
  3. define('PATH', $path);

y en menu.php el enlace lo tengo asi:

Código HTML:
Ver original
  1. <a href="<?php echo PATH ?>control_usuarios/control_users.php">Usuarios del Sistema</a>

pero la direccion que resulta es:

c:\wamp\www\plantillacontrol_usuarios/control_users.php

lo de menos es cambiar las barras en el enlace, pero quiero saber cual seria lo correcto?

Si hago esto en config.php

Código PHP:
Ver original
  1. $path = str_replace('\\', '/', dirname(__FILE__))."/";
  2.  
  3. define('PATH', $path);

la direccion que obtengo es:

c:/wamp/www/plantilla/control_usuarios/control_users.php

que es la correcta, pero firefox me dice:

The address wasn't understood

Última edición por catpaw; 06/02/2013 a las 14:02
  #8 (permalink)  
Antiguo 06/02/2013, 14:17
Avatar de Triby
Mod on free time
 
Fecha de Ingreso: agosto-2008
Ubicación: $MX->Gto['León'];
Mensajes: 10.106
Antigüedad: 16 años, 3 meses
Puntos: 2237
Respuesta: Problemas con define+include+ruta :S

El problema es que estás usando PATH para incluir archivos, es la raíz del sitio, pero hablando de directorio en el disco, no de URL, ésta deberia ser algo como:

Código:
http://localhost/sitio
Un ejemplo que puede servirte: http://blog.chapagain.com.np/php-how...n-or-base-url/
__________________
- León, Guanajuato
- GV-Foto
  #9 (permalink)  
Antiguo 06/02/2013, 19:06
Avatar de catpaw  
Fecha de Ingreso: mayo-2010
Ubicación: xalapa
Mensajes: 856
Antigüedad: 14 años, 6 meses
Puntos: 23
Respuesta: Problemas con define+include+ruta :S

Hola triby, apenas pude ver la pagina que me sugieres, solo que tengo una duda, o varias :P

Esa función veo que me funcionaria muy bien en el servidor local, pero que hay cuando se pase al servidor?

Dónde se supone que debería poner esa función?

Cómo debería poner los enlaces a mis páginas?

Gracias
  #10 (permalink)  
Antiguo 06/02/2013, 19:19
Avatar de Triby
Mod on free time
 
Fecha de Ingreso: agosto-2008
Ubicación: $MX->Gto['León'];
Mensajes: 10.106
Antigüedad: 16 años, 3 meses
Puntos: 2237
Respuesta: Problemas con define+include+ruta :S

Si config.php está en la raíz y puedes poner ahi mismo la función y agregar:

Código PHP:
Ver original
  1. $url = getBaseUrl();
  2. define('URL', $url);
  3.  
  4. // Enlaces a tus páginas:
  5. echo '<a href="' . URL . 'pagina.php">Página</a>';

Si te queda alguna duda sobre esa función, o no obtienes el resultado esperado, consulta http://php.net/manual/es/reserved.variables.server.php, específicamente respecto a PHP_SELF, pero lo más recomendable sería que todo pase por index.php (web modular) y desde ahí cargues todos los contenidos.

En el manual de PHP recomiendan usar valores escalares (integer, float, string, etc.) y no expresiones u objetos al definir una constante, por eso es que primero asignamos el valor a una variable y después hacemos el define().
__________________
- León, Guanajuato
- GV-Foto
  #11 (permalink)  
Antiguo 06/02/2013, 19:46
Avatar de catpaw  
Fecha de Ingreso: mayo-2010
Ubicación: xalapa
Mensajes: 856
Antigüedad: 14 años, 6 meses
Puntos: 23
Respuesta: Problemas con define+include+ruta :S

hOLA TRIBY

ya hice las adecuaciones como me indicas y ya me manda a la pagina correspondiente, asi quedo config.php:

Código PHP:
Ver original
  1. function getBaseUrl(){
  2.     $currentPath = $_SERVER['PHP_SELF'];
  3.     $pathInfo = pathinfo($currentPath);
  4.     $hostName = $_SERVER['HTTP_HOST'];
  5.     $protocol = strtolower(substr($_SERVER["SERVER_PROTOCOL"],0,5))=='https://'?'https://':'http://';
  6.     return $protocol.$hostName.$pathInfo['dirname']."/";
  7. }
  8. $PATH = getBaseUrl();
  9. define('PATH', $PATH);

en index.php incluyo config.php y despues menu.php, los enlaces en menu.php quedaron de esta forma:

Código HTML:
Ver original
  1. <li><a href="<?php echo PATH ?>control_usuarios/control_users.php">Usuarios del Sistema</a></li>

Solo una ultima duda :3

Cuando pase mi sistema de mi servidor local al servidor (que podria ser windows o linux)

todo seguirá funcionado correcto?
  #12 (permalink)  
Antiguo 06/02/2013, 19:52
Avatar de Triby
Mod on free time
 
Fecha de Ingreso: agosto-2008
Ubicación: $MX->Gto['León'];
Mensajes: 10.106
Antigüedad: 16 años, 3 meses
Puntos: 2237
Respuesta: Problemas con define+include+ruta :S

Estando en index.php te va a funcionar bien, pero creo que si estás en control_users.php ya no, pero es cuestión de probarlo y que nos cuentes.

Creo que vas a necesitar otra constante para incluir archivos, porque si haces include PATH . 'ruta/script.php'; PHP intentará obtener acceso por URL y no por directorio, lo que te va a generar más problemas todavía.

Cuando ya tengas esto bien afinado, funcionará perfecto tanto en windows como en linux.
__________________
- León, Guanajuato
- GV-Foto
  #13 (permalink)  
Antiguo 06/02/2013, 20:01
Avatar de catpaw  
Fecha de Ingreso: mayo-2010
Ubicación: xalapa
Mensajes: 856
Antigüedad: 14 años, 6 meses
Puntos: 23
Respuesta: Problemas con define+include+ruta :S

Hola

Cita:
Estando en index.php te va a funcionar bien, pero creo que si estás en control_users.php ya no, pero es cuestión de probarlo y que nos cuentes.
ya lo probe y en efecto, si estoy dentro de un subdirectorio por ejemplo control_usuarios ya no me funciona

por ejemplo mi menu tengo:

Usuarios
---> ABC usuarios (http : // localhost:8080/ plantilla/ control_usuarios/ control_users.php)
---> Solicitudes nuevas (http : // localhost:8080/ plantilla/ control_usuarios/ control_solicitudes.php)

y me esta direccion:

http : // localhost:8080 / plantilla / control_usuarios / control_usuarios / control_solicitudes.php

repite la carpeta control_usuarios

---plantilla
--------index.php
--------menu.php
--------config.php
--------control_usuarios
-------------------control_users.php
-------------------control_solicitudes.php

Cita:
Creo que vas a necesitar otra constante para incluir archivos, porque si haces include PATH . 'ruta/script.php'; PHP intentará obtener acceso por URL y no por directorio, lo que te va a generar más problemas todavía.
:O no quisiera tener mas problemas u.u

pero bueno vamos uno por uno jejeje

que me recomiendas para solucionar que me funcionen los links desde cualquier parte de la pagina?

y muchas gracias por tu ayuda

Última edición por catpaw; 06/02/2013 a las 20:06
  #14 (permalink)  
Antiguo 06/02/2013, 20:17
Avatar de Triby
Mod on free time
 
Fecha de Ingreso: agosto-2008
Ubicación: $MX->Gto['León'];
Mensajes: 10.106
Antigüedad: 16 años, 3 meses
Puntos: 2237
Respuesta: Problemas con define+include+ruta :S

Hace tiempo hice un aporte sobre webs modulares, está desactualizado, pero tal vez pueda servirte como guía: http://www.forosdelweb.com/f18/aport...ulares-681437/
__________________
- León, Guanajuato
- GV-Foto
  #15 (permalink)  
Antiguo 07/02/2013, 13:21
Avatar de catpaw  
Fecha de Ingreso: mayo-2010
Ubicación: xalapa
Mensajes: 856
Antigüedad: 14 años, 6 meses
Puntos: 23
Respuesta: Problemas con define+include+ruta :S

Que tal triby

estuve revisando tu enlace, pero la verdad creo que no optare por estructurar mi sistema asi, no creo que mi programacion este a ese nivel aun y por otro lado quiero tener una "plantilla" de codigo que me de chance de ampliarla sin muchos problemas en un futuro y veo medio laborioso ese metodo, de todos modos gracias.

Estuve leyendo sobre esto y me tope con un codigo muy parecido al que me sugeriste, lo probe y hasta ahora me ha funcionado bien, solo espero que en el servidor siga igual jeje, mira este es:

config.php
Código PHP:
Ver original
  1. if (basename($_SERVER['PHP_SELF']) == "index.php")
  2.     define('RAIZ', "../");
  3. else
  4.     define('RAIZ', "../../");
  5. define('PATH', RAIZ."plantilla/");

y en menu quedo tal cual la forma del enlace:

<li><a href="<?php echo PATH ?>control_usuarios/control_users.php">Usuarios del Sistema</a></li>

Como ves? Crees que podria darme problemas futuros?
  #16 (permalink)  
Antiguo 07/02/2013, 13:49
Avatar de Triby
Mod on free time
 
Fecha de Ingreso: agosto-2008
Ubicación: $MX->Gto['León'];
Mensajes: 10.106
Antigüedad: 16 años, 3 meses
Puntos: 2237
Respuesta: Problemas con define+include+ruta :S

Si te funciona en windows, te va a funcionar en linux también y el único problema que podría darte sería que intentes crear otra página en una carpeta que no esté dos niveles después de la raíz, pero creo que eso ya lo tienes considerado.

Por cierto, creo que si estás en index.php RAIZ debe ser './', con un solo punto para especificar la carpeta actual, con dos puntos es un nivel anterior.
__________________
- León, Guanajuato
- GV-Foto
  #17 (permalink)  
Antiguo 07/02/2013, 14:04
Avatar de catpaw  
Fecha de Ingreso: mayo-2010
Ubicación: xalapa
Mensajes: 856
Antigüedad: 14 años, 6 meses
Puntos: 23
Respuesta: Problemas con define+include+ruta :S

Ok si eso si lo puedo controlar, como regla solo trabajar con dos niveles :)

Cosa rara si le dejo ./ ya no me funciona

Bueno creo que entonces podría dar por solucionado el tema.

Gracias Triby aprendi mucho con tu ayuda, saludos!!

Etiquetas: html, usuarios
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 21:38.