Environment-Daten für PHP

Funktionen für Kompatibilität with verschiedenen Serverumgebungen und um Informationen über den Client (Browser) zu ermitteln.

  • 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.

Kompatibilität: PHP Ab Version 5.0

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

Lizenz und Nutzungsbedingungen

Diese Software wird unter den Bedingungen der GNU-GPL-Lizenz Version 3 veröffentlicht. Die genauen Lizenzbedingungen befinden sich im Download oder auf der GNU-Website.

Statistische Daten

  • Erstellt am 2007-11-12, aktualisiert am 2012-10-21.
  • Erstmals in UNB Components (UNB2) verwendet.
  • Ca. 850 Codezeilen, geschätzte Ent­wick­lungs­kos­ten: 850 - 3 400 €