- 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:
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()
Benutzeragent
Es wurde die Übergabe einer manuellen User-Agent-Zeichenfolge
Die Weitergabe von $ _SERVER ['HTTP_USER_AGENT']
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')));
Fehlerprotokolle
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!
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.
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.
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:
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 ...