get_browser () gibt FALSE zurück

8

- Ausführen von PHP 5.3.8 unter Linux -

Um zu beginnen, haben wir dieses Problem bis zu dem Punkt gelöst, wo die Funktion die erwarteten Werte zurückgibt. Aber es gibt immer noch eine Menge unbeantworteter Fragen, und die "Lösung" ist eher ein Hack-Around als alles andere.

Ich habe den größten Teil eines Tages mit diesem Thema verbracht, also ertragen Sie mit mir, wenn ich erkläre, was getan wurde. Das Problem besteht darin, dass der Rückgabewert von get_browser() FALSE ist, was kein dokumentierter Rückgabewert ist. Dies führt mich zu der Annahme, dass FALSE zurückgegeben wird, bedeutet eine Art Fehlerstatus innerhalb der Funktion.

Der Testcode wurde nach vielen Iterationen zu einem einfachen var_dump(get_browser($agent, true)) . Ich habe Tests ausgeführt, bei denen sowohl die User-Agent-Zeichenfolge direkt übergeben wurde, als auch keine Argumente übergeben wurden, z. var_dump(get_browser()) , die alle die gleichen Rückgabewerte hatten.

Was wurde versucht / verifiziert, ohne Rückgabewert zu ändern:

browscap.ini:

  • Habe die neueste Version, auch ein paar vorherige Versionen getestet

Berechtigungen:

  • bowscap.ini - Anfängliche Berechtigungen waren 644, aber ich habe alles von 644-777 probiert

  • Verzeichnis mit browscap.ini - Erste Berechtigungen waren 755, auch 777 probiert

  • Verifiziert, dass PHP auf die Datei und das Verzeichnis mit anderen Funktionen wie file()

  • zugreifen kann

Benutzeragent

  • Es wurde die Übergabe einer manuellen User-Agent-Zeichenfolge

  • versucht
  • Die Weitergabe von $ _SERVER ['HTTP_USER_AGENT']

  • wurde versucht
  • Meine User-Agent-Zeichenfolge wurde mit einem Freund in einem weit entfernten Land verifiziert - get_browser() hat Werte wie erwartet zurückgegeben.

php.ini

  • Die Einstellung der browscap zeigt auf den richtigen Ort

  • erneut mit echo count(file(ini_get('browscap')));

  • bestätigt

Fehlerprotokolle

  • Überprüft PHP & amp; Apache Fehlerprotokolle für jede Erwähnung von 'Browscap' oder irgendetwas auch nur in enger Beziehung - nichts Ungewöhnliches.

Dateistruktur

Hier vermute ich, dass der Fehler kommt. browscap.ini lebt in /var/php/ , das wie oben erwähnt über geeignete Berechtigungen verfügt. Mein Gedanke war, dass PHP vielleicht nicht auf dieses Verzeichnis oder etwas in dieser Richtung zugreifen konnte. In diesem Verzeichnis werden jedoch auch Sitzungen gespeichert, sodass dies weniger wahrscheinlich wird.

DIE "LÖSUNG"

Was das Problem gelöst hat, war das Verschieben von browscap.ini in das öffentliche Webverzeichnis. Ich bin neugierig, warum dies der Fall ist, insbesondere angesichts des nicht dokumentierten Rückgabewerts. Die "Lösung" funktioniert, aber ist nicht die Lösung, von der ich dachte, dass ich sie finden würde ...

Hat get_browser() besondere Berechtigungsanforderungen oder ähnliches? file() könnte auf das Verzeichnis und die Datei zugreifen, aber get_browser() konnte nicht (vermutlich). Ich habe mir praktisch über dieses Problem die Haare ausgezogen und würde eine Auflösung lieben!

Danke fürs Lesen!

    
orourkek 08.05.2012, 23:13
quelle

3 Antworten

4

Tatsächlich kann die Funktion get_browser , auch wenn sie nicht auf der Manpage dokumentiert ist, FALSE aus mehreren Gründen zurückgeben.

Zumindest ein Blick in den zugrunde liegenden Quellcode lässt das vermuten .

Ich schlage vor, Sie werfen einen Blick hinein und lassen Sie es mich wissen, wenn Sie weitere Fragen haben. Ich könnte sie dann beantworten.

    
hakre 14.05.2012, 13:32
quelle
4

Sie haben alle erforderlichen Methoden ausprobiert.

Ссылка mit Anmerkung:

Damit dies funktioniert, muss Ihre browscap Konfigurationseinstellung in php.ini auf den korrekten Speicherort der Datei browscap.ini auf Ihrem System zeigen.

browscap.ini ist nicht in PHP enthalten, aber Sie finden hier möglicherweise eine aktuelle »php_browscap.ini-Datei.

Während die Datei browscap.ini Informationen zu vielen Browsern enthält, sind Benutzeraktualisierungen erforderlich, um die Datenbank aktuell zu halten. Das Format der Datei ist ziemlich selbsterklärend.

%Vor%

Es zeigt möglicherweise auf diesen Ort. d. h. öffentliches Webverzeichnis

%Vor%

Leseberechtigungen sind nur erforderlich.

    
Somnath Muluk 11.05.2012 07:05
quelle
3

Ich hatte genau das gleiche Problem wie das Originalplakat. Die Lösung? php.ini benötigt einen absoluten Pfad zur Datei browscap.ini.

Obwohl PHP die Datei gefunden hat und in phpinfo() ausgegeben wurde, war die folgende Zeile das Problem:

%Vor%

Mit dieser Zeile hat getBrowser() false zurückgegeben.

Es hat sich jedoch auf einen absoluten Pfad geändert:

%Vor%

Hoffe das hilft jemandem! Es ist seltsam ...

    
Mark Locker 06.09.2012 08:51
quelle

Tags und Links