Environment data for PHP

Environment functions for compatibility with different server environments and to query information about the client (browser).

  • Deaktivierung von magic_quotes_runtime und Entfernung der eingefügten \-Zeichen bei magic_quotes_gpc
  • Entfernung von NUL-Bytes aus der Benutzereingabe (umgeht Sicherheitsprobleme in manchen PHP-Funktionen)
  • Löschung von globalen Variablen, falls register_globals aktiv ist (verhindert bestimmte Angriffe)
  • Sichere Aktivierung der Ausgabekomprimierung, wenn vom Browser unterstützt
  • Multibyte-Konfiguration für UTF-8
  • Erkennung des Browsers und Betriebssystems
  • Abfrage der vom Browser bevorzugten Sprachen
  • Abfrage des HTTP-Referrers (mit Domain-Vergleich) und der Client-IP-Adresse (mit Proxy-Behandlung)
  • Abfrage des DNT-Status (Do Not Track)
  • Informationen über die Suchmaschine, die den Besucher hergebracht hat
  • Erkennung des Hauptverzeichnisses im Website-Projekt
  • Konfigurierbare Fehlerberichterstattung mit vereinheitlichten Informationen

Jede PHP-Umgebung ist anders. Historisch bedingt gibt es in PHP viele Konfigurationseinstellungen, die das Verhalten der Funktionen unterschiedlich stark beeinflussen. Da gibt es z. B. die Option für magic quotes, mit der in verschiedenen Situationen \-Zeichen in Benutzereingaben oder Funktionsrückgaben eingefügt werden, um völlig unspezifisch irgendwelche Sicherheitsprobleme zu lösen. Letztlich werden dadurch aber häufiger legitime Benutzereingaben verfälscht, was zu hässlichen Ausgaben geführt hat. Dann gibt es noch die verschiedenen Ebenen der Ausgabepufferung, um die HTML-Seite zum Browser zu komprimieren und dadurch die Übertragung zu beschleunigen. Wenn man hier nicht aufpasst, komprimiert man den Ausgabestrom schnell doppelt, was der Browser dann gar nicht mehr versteht.

Um dieser und weiterer Unterschiede Herr zu werden, bietet die UnbEnvironment-Klasse verschiedene Methoden an, um die Ausführungsumgebung automatisch „geradezubiegen“ und eventuell bereits angewendete Optionen wieder rückgängig zu machen. Dadurch läuft die Anwendung auf jedem Webserver in einer bekannten Umgebung und kann die Ein- und Ausgaben in einem verlässlichen Format verarbeiten.

Ein weiterer umfangreicher Aufgabenbereich dieser Klasse ist die Erkennung des Browsers und weiterer Umgebungsdaten. So kann der Browser, dessen Version und das Betriebssystem des Besuchers abgefragt werden, sowie seine Sprache, IP-Adresse und weitere Angaben wie DNT- oder XHTML-Unterstützung. Außerdem lässt sich abfragen, ob der Referrer auf der gleichen Domain liegt, wie die aktuelle Seite, und durch welche Suchmaschine und mit welchen Suchbegriffen (sofern übermittelt) der Besucher diese Seite aufgerufen hat. So lassen sich auch Zugriffe durch Suchmaschinen- oder einige andere Bots erkennen, sofern sie sich korrekt zu erkennen geben.

Compatibility: PHP Version 5.0 or newer

Beispiel

Der folgende Beispielcode zeigt einige Anwendungsmöglichkeiten der UnbEnvironment-Klasse:

require_once 'environment.class.php';

UnbEnvironment::SetupEnvironment();
// The worry-free environment normalisation. :-)

UnbEnvironment::EnableHttpCompression();
// Specifically enables HTTP response compression.

if (!UnbEnvironment::IsRefererMyDomain())
{
    // Visitor comes from an external site, external application or typed in the URL.
}

$platform = UnbEnvironment::GetClientPlatform();
// Examples:
//   gecko/ff/16.0@win/nt/7 – Mozilla Firefox 16 on Windows 7
//   opera/opera/12.0@unix/linux – Opera 12 on Linux
//   opera/mobile/12.0@unix/linux/android/4.1 – Opera Mobile on Android 4.1
//   ie/maxthon/1.0@win/nt/xp – Maxthon (using Internet Explorer) on Windows XP
//   search/google – Googlebot (unknown operating system)

if (UnbEnvironment::IsClientPlatform('webkit'))
{
    // Using a Webkit-based browser
}
if (UnbEnvironment::IsClientPlatform('webkit/chrome/frame'))
{
    // Using Google Chrome Frame for Internet Explorer
}
if (UnbEnvironment::IsClientPlatform('@mac/x') &&
    UnbEnvironment::IsClientPlatform('@*/intel'))
{
    // Mac OS X on Intel CPU
}

$lang = UnbEnvironment::GetClientLanguages();
// Array of languages, in order of decreasing preference. Example items:
//   de-DE
//   ja
//   en-GB
//   pt-BR
//   fi

if (UnbEnvironment::IsBrowser())
{
    // This is probably a real browser, at least we have no indication of the opposite.
}
else
{
    // Recognised bot, don't put too much effort in it...
    // (Attention: Might be a search engine crawler, don't block them all!)
}

if (UnbEnvironment::IsMobile())
{
    // Mobile or smartphone user, maybe offer them our mobile site?
}

if (UnbEnvironment::DoNotTrack())
{
    // The visitor wishes not to be tracked, respect their privacy!
}

UnbEnvironment::GetSearchTerms();   // Needs to be called before other Search* functions
$terms = UnbEnvironment::GetSearchTermsArray();
// We could use these terms to highlight the search results on our page.

if (UnbEnvironment::GetSearchPageNumber() > 10)
{
    // Wow, you seem desperate... ;-)
}

Download

environment.class.php37.8 KiBQuelltext

Licence and terms of use

This software is released under the terms of the GNU GPL licence, version 3. You can find the detailed terms and conditions in the download or on the GNU website.

Statistic data

  • Created on 2007-11-12, updated on 2012-10-21.
  • First used in UNB Components (UNB2).
  • Ca. 850 lines of code, estimated development costs: 850 - 3 400 €