Foros del Web » Programando para Internet » PHP »

Problema sin sentido para expertos

Estas en el tema de Problema sin sentido para expertos en el foro de PHP en Foros del Web. Si asi como dice el titulo , no se cm llamar esto.. en super resumen: si pongo un die dentro de un if la instruccion ...
  #1 (permalink)  
Antiguo 09/02/2011, 15:28
Avatar de jamesjara  
Fecha de Ingreso: mayo-2008
Ubicación: san jose
Mensajes: 449
Antigüedad: 15 años, 11 meses
Puntos: 7
Exclamación Problema sin sentido para expertos

Si asi como dice el titulo , no se cm llamar esto..

en super resumen: si pongo un die dentro de un if la instruccion de abajo deja de funcionar AUN CUANDO ESTE IF nunca es accesado, si quito el die funciona.

Pongo el codigo para que entiendan mejor

Código PHP:

//defino variable
$INGRESADO= isset($_SESSION['ingresado'])    ?  $_SESSION['ingresado']:  NULL;


//SI ESTA CON VARIABLE , CONTINUA sino MUERE
if ($INGRESADO != false){
    
cerrar_usuario();
    
log_info"normal" "WS_ACCESS"," acceso invalido no autorizado - sin sesion ","PELIGRO",1,1);

     
//el querido DIE!
    
die();
};


//SI TIENE SESSION Y LO LLAMAN SE REPRODUCE ESTO , NO VOY  A PONER EL CODIGO, PERO ESTA ES UNA FUNCION EJEMPLO
    
function get_mp3() {
                if(
file_exists($file)){            
                    
$fileSize filesize($file);              
                    
header("Accept-Ranges:    bytes");
                    
header("Content-Length:    $fileSize");
                    
header ("Content-Range: bytes 0-" .$fileSize "/" $fileSize ";");
                    
header("Content-Type:    audio/mpeg");
                    
header("Cache-Control:    max-age=86400");
                    
readfile($file);
                    die();
                }                
        }    
    }; 
oK Ya vieron el codigo.

caso 1:
- existe variable de session
- llaman la funcion get_mp3
- COMENTO Y ELIMINO EL DIE DE LA FUNCION QUE COMPRUEBA, por lo cual el die no existe
resultado: funciona correctamente, mp3 suena y esta correcto.

caso 2:
- existe variable de session
- llaman la funcion get_mp3
- EXISTE EL DIE DE LA FUNCION QUE COMPRUEBA, por lo cual el die esta ahi
resultado: NO funciona correctamente, mp3 no suena

Como vieron el codigo ese die nunca es llamado,porque en los dos casos la session existe, ya hice pruebas de todos tipos, no es ninguna problema comun, la session siempre existe , ya la comprobe de mil formas. A mi lo unico que se me ocurre es un caracter tipo BOM, que por razones obvias no puedo ver.

Necesito saber porque si quito ese die funcion aunque cuando donde esta ese dia nunca sea ejecutado.

Ideas?ayuda :)
__________________
X7CLOUD El webservice latino!
Compatible
con mysql,sql,sqlitte.
Compatible con extjs , sencha , smargwt, Gwt , Jquery , Charts, Streaming.
  #2 (permalink)  
Antiguo 09/02/2011, 15:29
3nr1c
Invitado
 
Mensajes: n/a
Puntos:
Respuesta: Problema sin sentido para expertos

Y si pones exit?
  #3 (permalink)  
Antiguo 09/02/2011, 15:34
Avatar de pateketrueke
Modernizr
 
Fecha de Ingreso: abril-2008
Ubicación: Mexihco-Tenochtitlan
Mensajes: 26.399
Antigüedad: 16 años
Puntos: 2534
Respuesta: Problema sin sentido para expertos

en resumen, todo lo que dices es una falacia... ¿por qué?

porque muy a pesar de tus argumentos una secuencia de instrucciones lógicas responde directamente a la lógica universal... si el die() que está dentro del bloque if() se ejecuta no quiere decir otra cosa mas que: dicha condición del if() si se está cumpliendo, y por ende se ejecutan todas las instrucciones dentro del bloque, incluyendo a die()

lo que si no entiendo es porque no tiene sentido para los expertos?

¿contactaste con algunos en el tema y te dijeron que no tiene sentido?

¿o de donde sacas tan vaga afirmación al respecto?

yo no seré un experto, pero por lo que se alcanza a entender del código tiene todo el sentido del mundo...

PDTA: intentaste usar una comparación mas precisa?
Código PHP:
if ($INGRESADO !== NULL
__________________
Y U NO RTFM? щ(ºдºщ)

No atiendo por MP nada que no sea personal.
  #4 (permalink)  
Antiguo 09/02/2011, 15:34
Colaborador
 
Fecha de Ingreso: mayo-2008
Ubicación: $MX['VZ']['Xalapa']
Mensajes: 3.005
Antigüedad: 15 años, 11 meses
Puntos: 528
Respuesta: Problema sin sentido para expertos

No estoy seguro, pero ¿die() no requiere de un parámetro obligatoriamente?
quizá
Prueba a poner todos los errores error_reporting(E_ALL);
y coloca algo dentro del die (cualquier string) a ver que ocurrre.
  #5 (permalink)  
Antiguo 09/02/2011, 15:37
 
Fecha de Ingreso: diciembre-2010
Mensajes: 788
Antigüedad: 13 años, 4 meses
Puntos: 51
Respuesta: Problema sin sentido para expertos

Te paso a ver si se arregla:

Si vas a comparar con false en el if, usa false y no null

Código PHP:
Ver original
  1. $INGRESADO= isset($_SESSION['ingresado'])    ?  $_SESSION['ingresado']:  FALSE;

Estas comentando una cosa y hacés otra

Código PHP:
Ver original
  1. //SI ESTA CON VARIABLE , CONTINUA sino MUERE
  2. if ($INGRESADO != false){

La condición tiene que ser:

Código PHP:
Ver original
  1. $INGRESADO == false

Entonces sale si es falso y no si es distinto de falso, que no es lo mismo.
  #6 (permalink)  
Antiguo 09/02/2011, 16:20
Avatar de jamesjara  
Fecha de Ingreso: mayo-2008
Ubicación: san jose
Mensajes: 449
Antigüedad: 15 años, 11 meses
Puntos: 7
Exclamación Respuesta: Problema sin sentido, para expertos

Cita:
Iniciado por pateketrueke Ver Mensaje
en resumen, todo lo que dices es una falacia... ¿por qué? jejejeje.....????

porque muy a pesar de tus argumentos una secuencia de instrucciones lógicas responde directamente a la lógica universal... si el die() que está dentro del bloque if() se ejecuta no quiere decir otra cosa mas que: dicha condición del if() si se está cumpliendo, y por ende se ejecutan todas las instrucciones dentro del bloque, incluyendo a die()
R:
Como dije bien claro NO SE ESTA EJECUTANDO LAS INSTRUCCIONES DENTRO DEL BLOQUE , repito:NO. NINGUNA. y el die esta alfinal del bloque.


lo que si no entiendo es porque no tiene sentido para los expertos?
R: Perdon me comi una coma, porque sin sentido , para los expertos?

¿contactaste con algunos en el tema y te dijeron que no tiene sentido?
R: SI

¿o de donde sacas tan vaga afirmación al respecto?
R: De los expertos

yo no seré un experto, pero por lo que se alcanza a entender del código tiene todo el sentido del mundo...
R: Si obvio!! lo que no tiene sentido es lo que pasa :S

PDTA: intentaste usar una comparación mas precisa?
R: si
gracias a todos los demas ya intente tambien,
exit , !== , si ya tambien intente null, false, numeros y strings con sus comparaciones de datos respectivas.

Repito las instrucciones dentro del bloque NO ESTAN SIENDO ejecutadas.
Tambien se que el problema no es en la comparacion.

Estoy seguro que tiene que ver con un BOM escondido, algun tipo de codificacion charset o algo por el estilo, pues ya probe muchas maneras respecto a lo que todos pensamos que podria ser. Es extraño porque tengo mucho codigo en el servidor este y solo aqui pasa eso.

recuerdo el problema es el DIE, si yo elimino o comento el DIE no hay problema. problema es si existe el die AUN CUANDO EL BLOQUE EN DONDE ESTA EL DIE NO SEA EJECUTADO. ven es ILOGICO.

PD: alguien me quito permiso de modificar el post principal? porque quiero cambiar el != false por != NULL para evitar futuras confusiones.
__________________
X7CLOUD El webservice latino!
Compatible
con mysql,sql,sqlitte.
Compatible con extjs , sencha , smargwt, Gwt , Jquery , Charts, Streaming.

Última edición por jamesjara; 09/02/2011 a las 16:38
  #7 (permalink)  
Antiguo 09/02/2011, 16:45
Avatar de GatorV
$this->role('moderador');
 
Fecha de Ingreso: mayo-2006
Ubicación: /home/ams/
Mensajes: 38.567
Antigüedad: 17 años, 10 meses
Puntos: 2135
Respuesta: Problema sin sentido para expertos

Prueba ingresar die("algo") para que veas si ese es el die que se ejecuta.

Saludos.
  #8 (permalink)  
Antiguo 10/02/2011, 14:08
Avatar de jamesjara  
Fecha de Ingreso: mayo-2008
Ubicación: san jose
Mensajes: 449
Antigüedad: 15 años, 11 meses
Puntos: 7
Respuesta: Problema sin sentido para expertos

Cita:
Iniciado por GatorV Ver Mensaje
Prueba ingresar die("algo") para que veas si ese es el die que se ejecuta.
Saludos.
Saludos GatorV efectivamente ese tipo de cosas ya las hice.. de veras que no entiendo, mantengo mi idea, no se trata de algun tipo de caracter escondido, serviria de algo verlo en hex o algo asi por el estilo?..

descubri algo nuevo.
El problema es el die pero el en si, es la variable ingresado. si yo la vuelvo a definir
$var = blabla; el die no causa problemas
__________________
X7CLOUD El webservice latino!
Compatible
con mysql,sql,sqlitte.
Compatible con extjs , sencha , smargwt, Gwt , Jquery , Charts, Streaming.
  #9 (permalink)  
Antiguo 10/02/2011, 15:57
Avatar de jamesjara  
Fecha de Ingreso: mayo-2008
Ubicación: san jose
Mensajes: 449
Antigüedad: 15 años, 11 meses
Puntos: 7
Respuesta: Problema sin sentido para expertos

Vean descubri algo nuevo, que me asegura mas y mas que debe haber un problema de variables.. aunque bueno yo la resetie y limpie y de toodo

mas cerca del problema.

cambio algunos datos:
Código PHP:
// $INGRESADO= isset($_SESSION['ingresado'])? _SESSION['ingresado'...........

if ($_SESSION['ingresado']) {
//si elimino  $INGRESADO= 1234564;  FUNCIONA
$INGRESADO1234564
} else  { 
//si elimino  $INGRESADO= 123456;  FUNCION
$INGRESADO=123456;echo "no ";} 

//echo var_dump($INGRESADO);
if ( $INGRESADO==123456 ){
    
//-------------LOG AQUI.
    
cerrar_usuario();
    
log_info"normal" "WS_ACCESS"," acceso invalido no autorizado - sin sesion ","PELIGRO",1,1);
    echo 
"df".json_msj($OBJ_VAR,"","0");
    die();
}; 
ok ese codigo igual da problema pero miren si elimino $INGRESADO= 1234564; , todo vuelve a la normalidad, no se si me estoy perdiendo algun detalle.. :s
__________________
X7CLOUD El webservice latino!
Compatible
con mysql,sql,sqlitte.
Compatible con extjs , sencha , smargwt, Gwt , Jquery , Charts, Streaming.
  #10 (permalink)  
Antiguo 10/02/2011, 16:23
Avatar de GatorV
$this->role('moderador');
 
Fecha de Ingreso: mayo-2006
Ubicación: /home/ams/
Mensajes: 38.567
Antigüedad: 17 años, 10 meses
Puntos: 2135
Respuesta: Problema sin sentido para expertos

Ahí eso no tiene sentido, lo que haces es algo así:
Código PHP:
Ver original
  1. if ($_SESSION['ingresado']) {
  2.        $ingresado = true;
  3. } else {
  4.        $ingresado = true;
  5. }

Para que haces un condicional si la variable vale lo mismo, tienes que más bien primero ver que contiene $_SESSION['ingresado'] y en base a eso verificar que puede entrar a ejecutar tu código.
  #11 (permalink)  
Antiguo 10/02/2011, 17:58
Avatar de braulito  
Fecha de Ingreso: abril-2004
Ubicación: Cusco - Perú
Mensajes: 597
Antigüedad: 20 años
Puntos: 8
Respuesta: Problema sin sentido para expertos

Creo que aca está tu error
Código PHP:
if ($INGRESADO != false){ 
Debería ser
Código PHP:
if (is_null($INGRESADO)){ 
Ya que estás dando null si es que no está ingresado. Y si no está ingresado le manda el error de logueo
__________________
Braulio Soncco
braulio at buayacorp dot com
Buayacorp - Programación y Diseño
  #12 (permalink)  
Antiguo 10/02/2011, 18:00
Avatar de jamesjara  
Fecha de Ingreso: mayo-2008
Ubicación: san jose
Mensajes: 449
Antigüedad: 15 años, 11 meses
Puntos: 7
Respuesta: Problema sin sentido para expertos

Cita:
Iniciado por GatorV Ver Mensaje
Ahí eso no tiene sentido, lo que haces es algo así:
Código PHP:
Ver original
  1. if ($_SESSION['ingresado']) {
  2.        $ingresado = true;
  3. } else {
  4.        $ingresado = true;
  5. }

Para que haces un condicional si la variable vale lo mismo, tienes que más bien primero ver que contiene $_SESSION['ingresado'] y en base a eso verificar que puede entrar a ejecutar tu código.
compa eso fue al propio para ver que es lo que pasa...
__________________
X7CLOUD El webservice latino!
Compatible
con mysql,sql,sqlitte.
Compatible con extjs , sencha , smargwt, Gwt , Jquery , Charts, Streaming.

Etiquetas: Ninguno
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 09:09.