Foros del Web » Programando para Internet » PHP »

header("location: ... no funciona

Estas en el tema de header("location: ... no funciona en el foro de PHP en Foros del Web. Gente: Tengo un problema cuando quiero redirigir con header("location En mi servidor de prueba (localhost) funciona perfecto, pero en la ubicación remota se queda la ...
  #1 (permalink)  
Antiguo 17/08/2004, 11:31
Avatar de Kriminal  
Fecha de Ingreso: julio-2004
Ubicación: Buenos Aires
Mensajes: 19
Antigüedad: 13 años, 5 meses
Puntos: 0
header("location: ... no funciona

Gente:
Tengo un problema cuando quiero redirigir con header("location
En mi servidor de prueba (localhost) funciona perfecto, pero en la ubicación remota se queda la página en blanco y no hace nada. Probé subir un archivo que solamente tuviera header("location:www.google.com") y funciona perfecto, así que el error está en el script; pero no puedo encontrarlo.
Ya leí toda la documentación en estos foros, y no encuentro que nadie haya tenido un problema similar. Les copio parte del código, a ver si pueden ver algo raro
¿Hay alguna configuración en el php.ini que se deba realizar? Más allá de que no pueda modificar la configuración del php remoto, sabiendo que es quizás puede encontrar una forma de salvar el error.

El sistema usa templates, con TemplatePower, pero el resto de las páginas me funciona bien; así que no viene por ahí.
Otra cosa que probé es poner a mano la url de destino en el navegador, y también funciona.

Código PHP:

<?php
global $db;

$tpl = new TemplatePowerTEMPLATES."examenes.tpl" );
$tpl->prepare();

$tpl->assign"TITULO""Exámenes Online" );

$p $_GET['p'];

switch(
$p){

default:
        
session_write_close ();
        
header("location:$PHP_SELF?s=examenes&p=login");
        exit;
        break;

case 
login:
        
session_start();
        
$tpl->assign"SUBTITULO""Ingreso" );
        
$tpl->assign"TEXTO""Por favor, ingrese el nombre de usuario y la contraseña para continuar.");
        
$tpl->newBlock"login" );
        if (
$_POST['logon']==1){
        if (
$_POST['usuario']==""$msg "Debe completar el nombre de usuario";
        elseif (
$_POST['password']==""$msg "Debe completar la contraseña";
        else{
            
$usuario trim(strtolower($_POST['usuario']));
            
$password trim(strtolower($_POST['password']));
            
$nivelingreso($usuario$password);
            switch(
$nivel){
            case 
0$msg ="Usuario no existente"; break;
            case 
1$msg ="La contraseña es incorrecta"; break;
            default: 
$_SESSION['nivel'] = $nivel;
                     
session_write_close ();
                     
header("location:$PHP_SELF?s=examenes&p=i");
                     exit;
                     break;
          }
        }
        
$tpl->assign"NIVEL"$msg );
        }
break;
Desde ya, muchísimas gracias !

Última edición por Kriminal; 17/08/2004 a las 11:34
  #2 (permalink)  
Antiguo 17/08/2004, 13:40
O_O
 
Fecha de Ingreso: enero-2002
Ubicación: Santiago - Chile
Mensajes: 34.417
Antigüedad: 15 años, 11 meses
Puntos: 126
El ejemplo que pusistes parece estar bien ... Pero, sería recomendable que indiques el error textual que obtienes .. por qué ahí dice exactamente lo que sucede.

Lo más probable es que tengas alguna salida al cliente (navegador) antes de tu <? .. o despues de tu ?> o algún echo "algo" (no creo que sea esto por qué ya usas un motor de templates).

A nivel de sintax de la cabecera en cuestión .. seria:
Código PHP:
header("Location: $PHP_SELF?s=examenes&p=i"); 
Observaciones:

** Usa los arrays superglobales $_SERVER .. para acceder a PHP_SELF: $_SERVER['PHP_SELF'] .. y lo mismo con toda variable externa de tus scripts:POST, GET .. sesiones .. como ya lo haces en otras pártes del código.

** si login del:
case login:

No es una constante .. usa comillas:
case "login":

podría ser considerada una constante y darte más problemas.


Un saludo,
  #3 (permalink)  
Antiguo 17/08/2004, 14:51
Avatar de Kriminal  
Fecha de Ingreso: julio-2004
Ubicación: Buenos Aires
Mensajes: 19
Antigüedad: 13 años, 5 meses
Puntos: 0
Cluster:
En principio te agradezco enormemente la ayuda.
El problema es que no puedo guiarme por el error, porque justamente no hay error... solo una página en blanco (supongo que el motor de templates enmascara el error)
En este punto creo que antes estaba equivocado, y que el problema pasa por el motor de templates; porque si elimino las marcas de los templates y hago un simple switch con el redireccionador como resultado de la condición, funciona perfectamente.
Entonces me quedo sin argumentos... acá no lo puedo plantear porque obviamente no es un problema del lenguaje, y por mejor buena voluntad que pongan tendrían que interiorizarse en el motor de templates para encontrar el error. Y en el sitio de TemplatePower no encontré ninguna referencia a un error similar... y ahí no es como acá, tardan años en contestar.

Anyway... te agradezco los consejos de programación, la verdad es que me vienen muy bien porque recién empiezo con todo esto.

(Grrr... lo peor es que en localhost funciona perfecto !!)

Muchas gracias de nuevo, Cluster.

Saludos,
  #4 (permalink)  
Antiguo 17/08/2004, 15:06
Ex Colaborador
 
Fecha de Ingreso: junio-2002
Mensajes: 9.091
Antigüedad: 15 años, 5 meses
Puntos: 16
Hola,

Posiblemente sea que con la configuracion del PHP este desactivado el mostrar mensajes de error. Mira el valor de las directivas display_errors y error_reporting . Si display_errors esta a OFF, prueba a ponerla a on (ya sea en el php.ini o con ini_set() www.php.net/ini_set). Y error_reporting mejor que este a E_ALL durante desarrollo (tambien puedes poner su valor con la funcion error_reporting() www.php.net/error_reporting).

Si haces un include, puede ser que haya caracteres de salida en esos ficheros que incluyes, como espacios en blanco o lineas en blanco despues del ?> final. Segun parece, la mayoria de las instalaciones en local (supongo que la mayoria en windos) "tragan" esos espacios y por eso no fallan.

Saludos.
__________________
Josemi

Aprendiz de mucho, maestro de poco.
  #5 (permalink)  
Antiguo 17/08/2004, 15:09
O_O
 
Fecha de Ingreso: enero-2002
Ubicación: Santiago - Chile
Mensajes: 34.417
Antigüedad: 15 años, 11 meses
Puntos: 126
Tambien revisa el código fuente (en tu navegador .. en esa página en blanco que ves ..) tal vez el error esté dando en alguna parte de código HTML tipo <head> o similar . .si es así no va mostrarte nada el navegador (ejecutar) pero tal vez "por dedebajo" (ver -> código fuente en tu navegador) lo veas.

Un saludo,
  #6 (permalink)  
Antiguo 17/08/2004, 15:13
Avatar de Kriminal  
Fecha de Ingreso: julio-2004
Ubicación: Buenos Aires
Mensajes: 19
Antigüedad: 13 años, 5 meses
Puntos: 0
Gracias Josemi, pero me parece que tampoco viene por ahí; porque justamente para evitar errores de este tipo (damn it) trate de emular la misma configuración de mi proveedor; y el error_reporting está con el valor 2039 en ambos.
Es decir, que debería fallar en ambos, o en ninguno.

De todas formas, muchísimas gracias por la intención.

Saludos,
  #7 (permalink)  
Antiguo 17/08/2004, 15:21
Avatar de Kriminal  
Fecha de Ingreso: julio-2004
Ubicación: Buenos Aires
Mensajes: 19
Antigüedad: 13 años, 5 meses
Puntos: 0
Cluster:
No, esa fue una de las primeras cosas que hice y no muestra absolutamente nada.
Esa frustrante no poder dar en el clavo...

Te agradezco mucho la preocupación.

Saludos,
  #8 (permalink)  
Antiguo 17/08/2004, 15:32
O_O
 
Fecha de Ingreso: enero-2002
Ubicación: Santiago - Chile
Mensajes: 34.417
Antigüedad: 15 años, 11 meses
Puntos: 126
mm Que servidores usas (HTTP) en cada caso? ..

Ahora que recuerdo .. creo que IIS no se comporta igual ante el uso de "Location" como cabecera HTTP como Apache ..

Por otro lado .. que valor toma:
$PHP_SELF

Es decir .. comenta tu header() para que no se ejecute (// header( ...) ) y observa el valor que está tomando ahí $PHP_SELF .. insisto que deberías usar $_SEVER['PHP_SELF'] .. esto va directamente relacionado con la directiva register_globals ..

Un saludo,
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 05:19.