Foros del Web » Programando para Internet » PHP »

PHP en apache local no me reconoce las variables

Estas en el tema de PHP en apache local no me reconoce las variables en el foro de PHP en Foros del Web. Hola buenas! Tengo instalado PHP 4.3.7 en Apache 2.0.4.6 en mi ordenador con sistema operativo Windows XP. Mi problema es que cuando intento hacer un ...
  #1 (permalink)  
Antiguo 09/09/2004, 14:29
 
Fecha de Ingreso: marzo-2004
Ubicación: Catalunya
Mensajes: 8
Antigüedad: 20 años, 1 mes
Puntos: 0
PHP en apache local no me reconoce las variables

Hola buenas!

Tengo instalado PHP 4.3.7 en Apache 2.0.4.6 en mi ordenador con sistema operativo Windows XP.
Mi problema es que cuando intento hacer un include segun las variables, por ejemplo en el siguiente código:

Código PHP:
<?
        
if (!$seccio) { $seccio="inici"; } 
        switch (
$seccio) {
    case 
"inici"
    include 
"inici.txt"
    break;            
    case 
"preus"
    include 
"preus.txt"
    break;    }
?>
PHP no me reconoce la variable seccio que defino en la barra de direcciones (un poco cutre, lo sé, pero es que soy un poco novato en PHP) y por lo tanto me incluye el archivo inici.txt . El problema está en que por ejemplo si subo el mismo código en un servidor gratuíto, como por ejemplo Mi@, el código funciona a la perfección. Por esto he pensado que quizás sea un problema de algo que he configurado mal en el php.ini.

Alguien me puede ayudar?

Muchas gracias de antemano!
  #2 (permalink)  
Antiguo 09/09/2004, 14:38
Avatar de jpinedo
Colaborador
 
Fecha de Ingreso: septiembre-2003
Ubicación: Lima, Perú
Mensajes: 3.120
Antigüedad: 20 años, 6 meses
Puntos: 41
Cita:
Iniciado por Tarry
Por esto he pensado que quizás sea un problema de algo que he configurado mal en el php.ini.
Tienes razón en parte... el problema es de configuración.
Tú tienes la directiva "register globals" en OFF
miarroba tiene esa directiva en ON.

La parte en la que te equivocas es en decir que tú lo tienes configurado mal... al contrario... lo recomendable es utilizarla en OFF, por temas de seguridad y otras cosas que puedes encontrar utilizando el buscador del foro y poniendo "register globals".

Además también es un tema de compatibilidad, porque si programas con el register globals en OFF, funcionará también si está en ON... en cambio el viceversa no ocurre... o sea que si programas para que funcione en miarroba (ON) tendrás problemas cuando quieras migrar a un servidor que lo tenga en OFF (como te acaba de pasar en tu server local).

Saludos
  #3 (permalink)  
Antiguo 09/09/2004, 14:42
 
Fecha de Ingreso: marzo-2004
Ubicación: Catalunya
Mensajes: 8
Antigüedad: 20 años, 1 mes
Puntos: 0
Entonces... cómo puedo hacer para que este código (o parecido) funcione en cualquier server, tenga los register_globals en ON o en OFF?

Muchas gracias por tu ayuda!
  #4 (permalink)  
Antiguo 09/09/2004, 14:52
Avatar de jpinedo
Colaborador
 
Fecha de Ingreso: septiembre-2003
Ubicación: Lima, Perú
Mensajes: 3.120
Antigüedad: 20 años, 6 meses
Puntos: 41
Ya te dije... busca en el foro por "register globals" o anda directamente a http://www.php.net que ahí se te explicará mejor.

Como una ayuda por ahora, para que sepas por dónde empezar te diré que con esa directiva desactivada (OFF), deberás identificar a las variables externas a tu script.
Por ejemplo, las escritas en el url (tu caso) pagina.php?var1=valor llegan por el método GET.... entonces para leer ese valor debrás utilizar el array superglobal $_GET...
O sea la identificas como $_GET['var1'] que sería algo como la variable llamada "var1" enviada por el método GET.
Código PHP:
<? 
if (isset($_GET['seccio'])){//si existe la variable $_GET['seccio']
   
$seccio $_GET['seccio'];//que $seccio tome ese valor
}else{//si no
   
$seccio "inici";//que $seccio tome el valor por defecto

switch (
$seccio) { 
    case 
"inici"
    include 
"inici.txt"
    break;             
    case 
"preus"
    include 
"preus.txt"
    break;    } 
?>
De igual manera ocurre si utilizas un formulario con el método POST... deberás acceder a las variables como $_POST['var1']
También si las variables vienen de sesiones $_SESSION['var1']
O de Cookies $_COOKIE['var1']

Eso funcionará bajo cualquier estado de register globals (ON ú OFF)
En cambio poner $var1 sólo funciona si está en ON

Saludos
  #5 (permalink)  
Antiguo 09/09/2004, 15:05
 
Fecha de Ingreso: marzo-2004
Ubicación: Catalunya
Mensajes: 8
Antigüedad: 20 años, 1 mes
Puntos: 0
Pues... muchísimas gracias por tu ayuda, el código que me has proporcionado funciona a la perfección.
Me he leído lo que php.net dice sobre el register_globals y más o menos viene a decir lo mismo que tú, pero lo mejor es que esto ya está explicado en el php.ini:

Cita:
- register_globals = Off [Security, Performance]
Global variables are no longer registered for input data (POST, GET, cookies, environment and other server variables). Instead of using $foo, you must use you can use $_REQUEST["foo"] (includes any variable that arrives through the request, namely, POST, GET and cookie variables), or use one of the specific $_GET["foo"], $_POST["foo"], $_COOKIE["foo"] or $_FILES["foo"], depending on where the input originates. Also, you can look at the import_request_variables() function. Note that register_globals is going to be depracated (i.e., turned off by default) in the next version of PHP, because it often leads to security bugs. Read http://php.net/manual/en/security.registerglobals.php for further information.
En pocas palabras, que la solución que necesitaba la he tenido delante mismo de las narices durante todo el tiempo y no me he enterado.

Igualmente, y perdona que me repita, muchas gracias por tu ayuda.
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 16:58.