- Ejecutar PHP 5.3.8 en Linux enget_browser() devuelve FALSO
Para empezar, hemos resuelto este problema hasta el punto donde la función devuelve los valores esperados. Sin embargo, todavía hay muchas preguntas sin respuesta que tengo, y la "solución" es más un hack-around que otra cosa.
He pasado la mayor parte del día sobre este tema, así que ten paciencia conmigo cuando explique lo que se hizo. Para empezar, el problema es que el valor de retorno de get_browser()
es FALSE
, que no es un valor de retorno documentado. Esto me lleva a suponer que FALSE
devuelto significa algún tipo de estado de error dentro de la función.
El código de prueba, después de muchas iteraciones, se convirtió en un simple var_dump(get_browser($agent, true))
. Ejecuté pruebas con pasar la cadena de agente de usuario directamente, así como sin pasar argumentos, p. var_dump(get_browser())
, que todos tenían los mismos valores de retorno.
Lo que se trató/verificado, sin cambio en el valor de retorno:
browscap.ini:
- tiene la última versión, también probó un par de versiones anteriores
Permisos:
bowscap.ini - permisos iniciales fueron 644, pero han intentado todo de 644-777
Directorio que contiene browscap.ini - permisos iniciales fueron 755, 777, así trataron
verificado que PHP puede acceder al archivo y directorio con otras funciones como
file()
agente de usuario
Intentó pasar una cadena de agente de usuario manual de
Intentamos pasar $ _SERVER [ 'HTTP_USER_AGENT']
verificó mi cadena de agente de usuario con un amigo en una tierra lejana -
get_browser()
valores devueltos como se esperaba .
php.ini
El ajuste browscap apunta a la ubicación correcta
verificado de nuevo con
echo count(file(ini_get('browscap')));
registros de errores
- Chequeado PHP & Apache err o registros para cualquier mención de 'browscap' o cualquier cosa estrechamente relacionada, nada fuera de lo común.
Estructura de archivos
Aquí es donde sospecho que el error viene. browscap.ini vive en /var/php/
, que tiene los permisos adecuados como se indicó anteriormente. Pensé que tal vez PHP no podía acceder a este directorio, o algo similar. Sin embargo, este directorio también es donde se almacenan las sesiones, por lo que es menos probable.
la "solución"
Lo resolvió el problema se movía browscap.ini al directorio web público. Tengo curiosidad de por qué este es el caso, especialmente dado el valor de retorno no documentado. La "solución" funciona, pero no es la solución que pensé que encontraría ...
¿Tiene get_browser()
requisitos de permisos especiales, o algo por el estilo? file()
podría acceder al directorio y al archivo muy bien, pero get_browser()
no podría (presumiblemente). ¡Prácticamente me he largado de la cabeza por este problema y me gustaría algo de resolución!
¡Gracias por leer!
¿Para qué está utilizando esta característica? El encabezado usuario-agente y reconocerlo no es exactamente confiable. Probablemente tengas más suerte probando las capacidades del navegador con javascript y enviando esta información al servidor. Sin embargo, esto tampoco debería ser necesario, ya que normalmente manejaría las varianzas al 100% del lado del cliente. – dqhendricks
@dqhendricks Esto es para mantenimiento en una base de código existente (bastante grande). Los valores de esta llamada se utilizan en todo el lugar tanto en el contenido de preprocesamiento como en el de publicación. Siempre estoy abierto a nuevas/mejores formas de hacer las cosas, pero probablemente sería demasiado trabajo cambiar todo el sistema en su estado actual. – orourkek
veo. bueno, buena suerte entonces. – dqhendricks