Foro de elhacker.net

Programación => PHP => Mensaje iniciado por: Diabliyo en 1 Febrero 2011, 05:21 am



Título: Es apache, yo o mi proveedor ? (solved)
Publicado por: Diabliyo en 1 Febrero 2011, 05:21 am
Buenas...

Recien actualice mi plan con GoDaddy y pase de ser un hosting shared a un hosting web, mas que nada porque el Hosting Web incluia una version mas nueva de Apache, lo cual el Hosting Shared se habia quedado con una version ya muy pasadita !.

En fin, despues que hicieron la migracion todos mis archivos quedaron en su sitio, el unico problema es que ahora no entiendo porque este error persiste:

Código:
Warning: Invalid argument supplied for foreach() in /home/content/15/4789315/html/lab/templates/
white_light/cuerpo/estadisticas.php on line 69

En donde la linea 68 invoca la funcion get_browser() que proporciona browscap.ini. Ya verifique y efectivamente browscap.ini esta cargandose en el PHP.INI (ya hice phpinfo()), y pues a como dice el error, el mensaje se da porque la funcion get_browser() no esta devolviendo un array.

Ya que en la siguiente liena (linea 69) invoco foreach en busca de los datos...

Pero bueno, si ha alguien le paso lo mismo o le esta pasando, por favor echenme una mano !

Saludos !


Título: Re: Es apache, yo o mi proveedor ?
Publicado por: bomba1990 en 1 Febrero 2011, 06:18 am
Description
mixed get_browser ([ string $user_agent [, bool $return_array = false ]] )

Attempts to determine the capabilities of the user's browser, by looking up the browser's information in the browscap.ini file.

disculpa si mi pregunta es un poco estupida, pero le pasaste los dos parametros a la funcion??

prueba con un var_dump() para saber que es lo que te esta devolviendo.


Título: Re: Es apache, yo o mi proveedor ?
Publicado por: Diabliyo en 1 Febrero 2011, 07:06 am
Intentare pasar var_dump(), pero siempre he usado la funcion get_browser() sn argumentos,  ya que esta devuelve un array multiple con los datos del navegador.

Ademas estaba funcionando bien,  el fallo salio despues de actualizar apache :S

Saludos


Título: Re: Es apache, yo o mi proveedor ?
Publicado por: bomba1990 en 1 Febrero 2011, 17:25 pm

Citar
mixed get_browser ([ string $user_agent [, bool $return_array = false ]] )

yo la verdad desconocia de esta funcion, siempre sacaba la info por $_SERVER. pero te puse la funcion porque en la documentacion oficial de php dice que el segundo argumento es opcional y por defecto esta en false.


Título: Re: Es apache, yo o mi proveedor ?
Publicado por: ~ Yoya ~ en 1 Febrero 2011, 21:09 pm
poner la linea del 60 al 75


Título: Re: Es apache, yo o mi proveedor ?
Publicado por: Diabliyo en 2 Febrero 2011, 15:05 pm
poner la linea del 60 al 75

# cat estadistica.php, es de la 48 a la 81, te marco las lineas importantes:
Código
  1. <?php
  2.            # Mostrando IP
  3.            # detectando proxy
  4.            if( isset($_SERVER['HTTP_X_FORWARDED_FOR']) )
  5.             $proxy_ip= $_SERVER['HTTP_X_FORWARDED_FOR'];
  6.            else if( isset($_SERVER['HTTP_VIA']) )
  7.             $proxy_ip= $_SERVER['HTTP_VIA'];
  8.            else $proxy_ip=0;
  9.  
  10.            echo 'IP: <b>';
  11.  
  12.            if( $proxy_ip ) #si existe ip proxy, entonces usa proxy
  13.             echo $proxy_ip;
  14.            else # no usa proxy
  15.             echo $_SERVER['REMOTE_ADDR'];
  16.            echo '</b>';
  17.  
  18.            if( $proxy_ip ) # ahora mostramos la IP del proxy
  19.             echo '<br>Utiliza Proxy IP: <b>'. $_SERVER['REMOTE_ADDR']. '</b>';
  20.  
  21.            # Mostrando Navegador
  22. 68--> $nav= get_browser();
  23. 69--> foreach ( $nav as $key => $val )
  24. {
  25. if( !strcmp($key, "parent" ) )
  26. {
  27. if( is_a_robot($val) )
  28. echo '<br>Eres un Robot ('. proteger_cadena($val). ')';
  29. else
  30. echo '<br>Navegador: '. proteger_cadena($val);
  31. }
  32. else if( !strcmp($key, "platform" ) )
  33. echo '<br>S.O: '. proteger_cadena($val);
  34. }
  35. echo '<br>Geo: ';
  36.  
  37. ?>



El problema empezo cuando se actualizo Apache en mi hosting :(, de echo si ven la cahce de Google de mi blog (http://webcache.googleusercontent.com/search?q=cache:3gSf8xVTKC8J:lab.sie-group.net/%3Fver%3Dqg4iwfpvgm%26bug%3Dgt8g7yooovyw+lab.sie-group.net&cd=2&hl=es&ct=clnk&client=ubuntu&source=www.google.com) pueden confirmar que detecta el navegador de Google, lo detecta como robot.

Ahora simplemente no puedo detectar :(

Saludos !

=== EDITADO ===

He verficado que la variable user_agent obtenida mediante phpinfo() esta vacia :S... Tal vez por eso el error, no ?

Ademas ya modifique la linea 68 agregando el user agent de $_SERVER, pero persiste el problema:

Código:
$nav= get_browser($_SERVER['HTTP_USER_AGENT'], true);


Título: Re: Es apache, yo o mi proveedor ?
Publicado por: ~ Yoya ~ en 2 Febrero 2011, 21:08 pm
Quizás no estés mandando un User Agent o exista algún otro problema. Puedes probar este source:

Código
  1. <?php
  2. if(empty($_SERVER['HTTP_USER_AGENT']))
  3. {
  4.   echo "No existe user agent";
  5.   exit;
  6. }
  7. $nav = get_browser();
  8. print_r($nav);
  9. ?>
  10.  


No es necesario que le pases como segundo argumento $_SERVER['HTTP_USER_AGENT'] a la función get_browser().
Cita de: php.net
The User Agent to be analyzed. By default, the value of HTTP User-Agent header is used; however, you can alter this (i.e., look up another browser's info) by passing this parameter.

Saludos.


Título: Re: Es apache, yo o mi proveedor ?
Publicado por: Diabliyo en 2 Febrero 2011, 21:23 pm
Quizás no estés mandando un User Agent o exista algún otro problema. Puedes probar este source:

Código
  1. <?php
  2. if(empty($_SERVER['HTTP_USER_AGENT']))
  3. {
  4.   echo "No existe user agent";
  5.   exit;
  6. }
  7. $nav = get_browser();
  8. print_r($nav);
  9. ?>
  10.  




No es necesario que le pases como segundo argumento $_SERVER['HTTP_USER_AGENT'] a la función get_browser().
Saludos.

Si hay user agent: Mozilla/5.0 (X11; U; Linux i686; es-MX; rv:1.9.2.13) Gecko/20101206 Ubuntu/10.04 (lucid) Firefox/3.6.13 (lo que contiene $_SERVER['HTTP_USER_AGENT']), y lo que se imprime el comando print_r($val) es: nada.

bye


Título: Re: Es apache, yo o mi proveedor ?
Publicado por: ~ Yoya ~ en 2 Febrero 2011, 21:36 pm
Quizas el problema sea del browscap.ini...


Código
  1. <?php
  2. $ua = get_browser('Mozilla/5.0 (X11; U; Linux i686; es-MX; rv:1.9.2.13) Gecko/20101206 Ubuntu/10.04 (lucid) Firefox/3.6.13', true);
  3. print_r($ua);
  4. ?>
  5.  
Fijarte si funciona...


Título: Re: Es apache, yo o mi proveedor ?
Publicado por: Diabliyo en 2 Febrero 2011, 21:42 pm
Quizas el problema sea del browscap.ini...


Código
  1. <?php
  2. $ua = get_browser('Mozilla/5.0 (X11; U; Linux i686; es-MX; rv:1.9.2.13) Gecko/20101206 Ubuntu/10.04 (lucid) Firefox/3.6.13', true);
  3. print_r($ua);
  4. ?>
  5.  
Fijarte si funciona...

No imprime nada :(, mira, este es el code ahora:

Código
  1. <?php
  2. # Mostrando Navegador
  3. if( !empty($_SERVER['HTTP_USER_AGENT']) )
  4. {
  5. $nav= get_browser('Mozilla/5.0 (X11; U; Linux i686; es-MX; rv:1.9.2.13) Gecko/20101206 Ubuntu/10.04 (lucid) Firefox/3.6.13', true);
  6. print_r($nav);
  7. foreach ( $nav as $key=>$val )
  8. {
  9. if( !strcmp($key, "parent" ) )
  10. {
  11. if( is_a_robot($val) )
  12. echo '<br>Eres un Robot ('. proteger_cadena($val). ')';
  13. else
  14. echo '<br>Navegador: '. proteger_cadena($val);
  15. }
  16. else if( !strcmp($key, "platform" ) )
  17. echo '<br>S.O: '. proteger_cadena($val);
  18. }
  19. }
  20. else echo '<br>Navegador: no detectado.';
  21. ?>


Título: Re: Es apache, yo o mi proveedor ?
Publicado por: ~ Yoya ~ en 2 Febrero 2011, 21:55 pm
Si el source que te pase no imprime nada el problema es de browscap.ini. fíjate que el browscap que uses es para PHP y que este en la ruta adecuada.

Saludos.


Título: Re: Es apache, yo o mi proveedor ?
Publicado por: Diabliyo en 2 Febrero 2011, 22:37 pm
Si el source que te pase no imprime nada el problema es de browscap.ini. fíjate que el browscap que uses es para PHP y que este en la ruta adecuada.

Saludos.

Pues el browscap.ini no es el problema, ya que para salir de dudas he bajado nuevamente el php_browscap.ini de AQUI (http://browsers.garykeith.com/stream.asp?PHP_BrowsCapINI), que es la version para PHP.

La he subido al directorio del blog y pues en el php.ini tengo declarado asi:

Código:
[browscap]
browscap = php_browscap.ini

Voy tambien al phpinfo() y me sale el valor:

Código:
browscap | php_browscap.ini | php_browscap.ini

Pero el problema persiste :(...

Saludos !


Título: Re: Es apache, yo o mi proveedor ?
Publicado por: ~ Yoya ~ en 2 Febrero 2011, 22:51 pm
Citar
browscap = php_browscap.ini
En que directorio se encuentra php_browscap.ini¿?
Te recomiendo que pongas el path completo ps, porque el browscap no esta funcionando


Título: Re: Es apache, yo o mi proveedor ?
Publicado por: Diabliyo en 2 Febrero 2011, 22:59 pm
En que directorio se encuentra php_browscap.ini¿?
Te recomiendo que pongas el path completo ps, porque el browscap no esta funcionando

Tomando en cuenta que es un hsoting web de GoDaddy, pondria el path completo asi: /home/bla/bla/bla/bla/php_browscap.ini ?

Hare un getcwd();

Cabe mencionar que GoDaddy solo lee el PHP.INI que esta en la raiz del sitio, de modo que si en la raiz tengo carpetas las cuales invocan sub-dominios, los efectos del PHP.INI los toman los sub-dominio (carpetas), asi no repito el INI en los folders.

Saludos !


Título: Re: Es apache, yo o mi proveedor ?
Publicado por: ~ Yoya ~ en 2 Febrero 2011, 23:05 pm
Ps hacerlo ya que el error esta en browscap y te recomiendo que vayas probando con el source que poste antes de ejecutar el source que te esta dando problemas.

Código
  1. <?php
  2. $ua = get_browser('Mozilla/5.0 (X11; U; Linux i686; es-MX; rv:1.9.2.13) Gecko/20101206 Ubuntu/10.04 (lucid) Firefox/3.6.13', true);
  3. print_r($ua);
  4. ?>

Saludos.


Título: Re: Es apache, yo o mi proveedor ?
Publicado por: Diabliyo en 3 Febrero 2011, 00:06 am
Solucionado !... solo puse el path completo.....