Foros del Web » Programando para Internet » PHP »

Duda con include_path

Estas en el tema de Duda con include_path en el foro de PHP en Foros del Web. Buenas, usé set_include_path('./dir/dir2/dir3'); Con esto, pretendo que un include: En ./index.php haga un include "./dir/dir2/dir3/algo.php"; Ese algo, hace include "../../a.php"; Y ./dir/a.php contiene "Hola mundo!". ...
  #1 (permalink)  
Antiguo 30/07/2012, 10:20
 
Fecha de Ingreso: noviembre-2010
Mensajes: 1.242
Antigüedad: 13 años, 5 meses
Puntos: 73
Duda con include_path

Buenas, usé set_include_path('./dir/dir2/dir3');

Con esto, pretendo que un include:

En ./index.php haga un include "./dir/dir2/dir3/algo.php";

Ese algo, hace include "../../a.php";

Y ./dir/a.php contiene "Hola mundo!".

El problema es que no funciona bien... y con get_include_path() me devuelve bien la ruta que debería tener.. :S

¿Qué puede pasar?

Saludos!!
__________________
:)
  #2 (permalink)  
Antiguo 30/07/2012, 10:22
webankenovi
Invitado
 
Mensajes: n/a
Puntos:
Respuesta: Duda con include_path

leete esto

http://php.net/manual/es/ini.core.php

mas o menos esta por la mtad de la pagina

include_patch es una directiva del sistema include_patch es INI_ALL

modifica su include path en tiempo de ejecucción usando set_include_path().

http://www.php.net/manual/es/functio...clude-path.php

ini_set — Establece el valor de una directiva de configuración

http://www.php.net/manual/es/function.ini-set.php

prueba haber si asi con un punto mas

set_include_path('../dir/dir2/dir3');

Última edición por webankenovi; 30/07/2012 a las 10:31
  #3 (permalink)  
Antiguo 30/07/2012, 10:32
 
Fecha de Ingreso: noviembre-2010
Mensajes: 1.242
Antigüedad: 13 años, 5 meses
Puntos: 73
Respuesta: Duda con include_path

Cita:
PHP busca en cada entrada del include path cuando está buscando ficheros a incluir. Primero buscará en la primera ruta, y si no lo encuentra ahí, buscará en la siguiente, hasta que encuentre el fichero o devuelva un warning o un error. Quizá quiera modificar su include path en tiempo de ejecucción usando set_include_path().
Error:
Cita:
Warning: include(../../header.php): failed to open stream: No such file or directory in /var/www/clients/client0/web2/web/phpost/inc/php/perfil.php on line 24

Warning: include(): Failed opening '../../header.php' for inclusion (include_path='/var/www/clients/client0/web2/web:/var/www/clients/client0/web2/web/phpost/inc/php:./phpost/inc/php') in /var/www/clients/client0/web2/web/phpost/inc/php/perfil.php on line 24
Tengo en /web/index.php:
Código PHP:
Ver original
  1. set_include_path(realpath('./').':/var/www/clients/client0/web2/web/phpost/inc/php:./phpost/inc/php');

No consigo ver que pasa...

Ya antes de este post venía de http://php.net/manual/es/function.set-include-path.php y no solucionó nada...
__________________
:)
  #4 (permalink)  
Antiguo 30/07/2012, 10:33
webankenovi
Invitado
 
Mensajes: n/a
Puntos:
Respuesta: Duda con include_path

pasa phpinfo(); despues del cambio y mira la ruta que se guardo y si es que se guardo bien y reporta el resultado
  #5 (permalink)  
Antiguo 30/07/2012, 10:39
 
Fecha de Ingreso: noviembre-2010
Mensajes: 1.242
Antigüedad: 13 años, 5 meses
Puntos: 73
Respuesta: Duda con include_path

Ya hice get_include_path() y ini_get('include_path') y daba ese resultado.

En el warning, dice:
Cita:
(include_path='/var/www/clients/client0/web2/web:/var/www/clients/client0/web2/web/phpost/inc/php:./phpost/inc/php') in /var/www/clients/client0/web2/web/phpost/inc/php/perfil.php on line 24
include_path='/var/www/clients/client0/web2/web:/var/www/clients/client0/web2/web/phpost/inc/php:./phpost/inc/php'

Y el script: /var/www/clients/client0/web2/web/phpost/inc/php/perfil.php
__________________
:)
  #6 (permalink)  
Antiguo 30/07/2012, 10:41
webankenovi
Invitado
 
Mensajes: n/a
Puntos:
Respuesta: Duda con include_path

intenta pasarlo asi desde el index

$path = dirname(__FILE__);

set_include_path($path."/dir/dir2/dir3/");

phpinfo();

http://es.php.net/manual/es/function.dirname.php

y dime que muestra includepath en el core

yo lo acabo de pasar asi en mi servidor y funciona perfectamente

O prueba de esta otra manera que alomejor te sirve mejor

$path = getenv(__FILE__);

set_include_path($path."/dir/dir2/dir3/");

phpinfo();

http://php.net/manual/es/function.getenv.php

Última edición por webankenovi; 30/07/2012 a las 10:48
  #7 (permalink)  
Antiguo 30/07/2012, 11:05
Avatar de GatorV
$this->role('moderador');
 
Fecha de Ingreso: mayo-2006
Ubicación: /home/ams/
Mensajes: 38.567
Antigüedad: 17 años, 11 meses
Puntos: 2135
Respuesta: Duda con include_path

Aunque cambies el include_path, los paths relativos se hacen a partir del script donde estas parado (imprime el valor de getcwd()), por lo que es mejor siempre hacer un require con direcciones absolutas.

Saludos.
  #8 (permalink)  
Antiguo 31/07/2012, 01:41
 
Fecha de Ingreso: noviembre-2010
Mensajes: 1.242
Antigüedad: 13 años, 5 meses
Puntos: 73
Respuesta: Duda con include_path

@GatorV, getcwd() dio: /var/www/clients/client0/web2/web

La solución al problema es fácil, en los que quiero usar, pongo delante de los includes $dir. o algo así y lo defino en el otro. Pero quiero tocar lo menos posible los archivos del cms.

Estoy con www.eu5.es, con los sitios creados con phpost para que todos tiren desde la raiz / estando en /phpost.

Contra más modifique el núcleo, más me cierro a actualizaciones. Quiero tocar lo menos posible.

En htaccess tiene (./phpost/.htaccess):
Código Apache:
Ver original
  1. #PERFIL
  2. RewriteRule ^perfil/([A-Za-z0-9_-]+)$ inc/php/perfil.php?user=$1 [QSA,L]
  3. RewriteRule ^perfil/([A-Za-z0-9_-]+)/$ inc/php/perfil.php?user=$1 [QSA,L]
  4. RewriteRule ^perfil/([A-Za-z0-9_-]+)/([0-9]+)$ inc/php/perfil.php?user=$1&pid=$2 [QSA,L]

Si te fijas, www.demo.eu5.es va desde /, pero perfil no: http://demo.eu5.es/phpost/perfil/admin

Intento simular eso, desde el index (de la raiz, no phpost).

Tengo en ./index.php:
Código PHP:
Ver original
  1. else if($uris[1] == 'perfil'){ // Perfiles
  2.        
  3.         ini_set('display_errors', 1);      
  4.         set_include_path(realpath('./').':/var/www/clients/client0/web2/web/phpost/inc/php:./phpost/inc/php');
  5.        
  6.         if(empty($uris[3])){
  7.            
  8.             $_GET['user'] = $uris[2];
  9.            
  10.         } else {
  11.            
  12.             $_GET['user'] = $uris[2];
  13.             $_GET['pid'] = is_numeric($_GET['pid'])? $uris[3] : NULL;
  14.            
  15.         }
  16.        
  17.         include "./phpost/inc/php/perfil.php";
  18.        
  19.     }


¿Cómo podría hacer para que ese perfil.php pueda incluir el header entro de ./phpost/ estando incluido en la raiz el sitio /var/www/clients/client0/web2/web?

Ha de haber algo, php tiene soluciones fáciles para todo... lo difícil es encontrarla...
__________________
:)
  #9 (permalink)  
Antiguo 31/07/2012, 07:54
webankenovi
Invitado
 
Mensajes: n/a
Puntos:
Respuesta: Duda con include_path

gatorv en el post anterior me equivoque queria decir getcwd() no getenv() jjaja me quivoque.


Haber esque solo tienes un patch , deberias sacar el patch de la raiz y despues los demas path de las carpetas como inc como php y pasarles el path absoluto , crea un archivo de rutas

include $path_php.'perfil.php'; y hay le paso la ruta independientemente de donde me encuentre cargara el archivo
  #10 (permalink)  
Antiguo 31/07/2012, 09:19
 
Fecha de Ingreso: noviembre-2010
Mensajes: 1.242
Antigüedad: 13 años, 5 meses
Puntos: 73
Respuesta: Duda con include_path

Cita:
Iniciado por webankenovi Ver Mensaje
gatorv en el post anterior me equivoque queria decir getcwd() no getenv() jjaja me quivoque.


Haber esque solo tienes un patch , deberias sacar el patch de la raiz y despues los demas path de las carpetas como inc como php y pasarles el path absoluto , crea un archivo de rutas

include $path_php.'perfil.php'; y hay le paso la ruta independientemente de donde me encuentre cargara el archivo
@webankenovi, eso es lo que decía antes
Cita:
La solución al problema es fácil, en los que quiero usar, pongo delante de los includes $dir. o algo así y lo defino en el otro. Pero quiero tocar lo menos posible los archivos del cms.
El problema es que
Cita:
Contra más modifique el núcleo, más me cierro a actualizaciones. Quiero tocar lo menos posible.
Es por eso que buscaba una solución mejor, pero viendo que no la hay, tendré que modificarlo

Gracias a los dos por la ayuda
__________________
:)
  #11 (permalink)  
Antiguo 31/07/2012, 09:31
webankenovi
Invitado
 
Mensajes: n/a
Puntos:
Respuesta: Duda con include_path

en el include_patch debes pasar la ruta de la raiz osea desde el index , depues con esa variable creamos las rutas de las carpetas y ya por ultimo el archivo

incluimos el perfil

set_include_path(getcwd()); // desde la raiz osea el archivo index ay debes de sacarlo

$path = get_include_path('include_path');

$dir_php = $path.'/php/';

include $dir_php.'perfil.php';
  #12 (permalink)  
Antiguo 31/07/2012, 10:18
Avatar de GatorV
$this->role('moderador');
 
Fecha de Ingreso: mayo-2006
Ubicación: /home/ams/
Mensajes: 38.567
Antigüedad: 17 años, 11 meses
Puntos: 2135
Respuesta: Duda con include_path

Recuerda que una cosa son las URLs, y otra cosa las direcciones físicas a los archivos, lo que yo haría en tu caso para evitar estar tocando el CMS es definir una constante con el path a la instalación base y luego haz tus includes/requires usando esa constante, ej:

Código PHP:
Ver original
  1. // config.php
  2. define('BASE_PATH', '/home/http/install/blah/');
  3.  
  4. // otroarchivo.php
  5. include('config.php');
  6. include(BASE_PATH . 'carpeta /archivo.php');
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 10:56.