PageRestrictorCoding Page Restrictor:
Was sollten wir zukuenftig beachten, bezuegl. Coding Styles, Erweiterbarkeit, neuen Anforderungen

Coding Style:
- nicht zuviele Comments (Ladezeit/Network Latency/Laufzeit/Parsen Zeit sparen)
- nicht zu viele moegliche Fehlerpruefungen, nur das noetigste (Zeit sparen)
- Einrueckungen 2 Zeichen
- eindeutige Bezeichner, die keinesfalls in anderen PHP Anwendungen vorkommen duerften ("Variable schon definiert"..)

Skelett:
- stabiles Geruest!
- zukuenftige Erweiterbarkeit beachten
- evtl. Funktionen frueh umordnen

Blacklists:
- nicht mit RegExps arbeiten (strpos 6mal schneller)
- User Agents und Referer von Anfang an lowercase (Zeit sparen)
- evtl. bessere/schnellere Idee fuer zeilenweise Auflistung und das folgende explode("\n") finden (zudem fehleranfaellig: kann auch mal \r\n (Windows) oder \r (Mac) sein)
Vorschlag (IronMike): einfach gleich als array() definieren
php
 $forbiddenUAs = array(
'Mozilla/3.0 (compatible)', // faking an old browser... ts..
'semanticdiscovery', // nothing to discover here...
'...');

dann kann man inline komentieren und das explode weglassen.
=> A1: hab ich gemessen, ist ca. 30% schneller, sehr gut!

Mit folgenden Datenstrukturen habe ich inzwischen eine 80%-90% höhere Leistung des PRES erzielt:

forbiddenIPs - Daten
php
$forbiddenIPs = array(
'217.172.188.52' => 'http://www.webseitennetz.de/ nofollow',
'213.255.157.41' => ' bt: ?',
'218.219.145.246' => ' bt: Tokyo/Japan',
'38.118.42.35' => '',
'38.118.42.35' => ' bt: Fitchburg/United States',
'..' => '..'
);
// test mit
$thisIP = $_SERVER['REMOTE_ADDR'];
if (isset($forbiddenIPs[$thisIP])) { ...

=> A1: besser hier auf das assoziative Array verzichten, hat fuer den PRES ja keinen Vorteil, nur fuer den Menschen ;) In der geplanten Black List / SperrDatenbank werden die IPs ausreichend kommentiert sein (hoffentlich..)
=> A1: ist das (viel) schneller als ein nicht assoziatives array und dann mit in_array zu pruefen?
=> TODO: muss ich oder du noch messen

forbiddenUAs
php
$forbiddenUAs = array(
'Mozilla/3.0 (compatible)', // added Mozilla/3.0 (compatible) BOGUS 30.6.2006 13:30:44
'aipbot', // added aipbot -> aipbot/1.0 (aipbot; http://www.aipbot.com; aipbot@aipbot.com) 28.6.2006 12:33:17 (nameprotect?)
'convera', // added convera -> converacrawler/0.9d (+http://www.authoritativeweb.com/crawl) 27.6.2006 13:55:12
'...'
);
// test mit
$thisUA = strtolower($_SERVER['HTTP_USER_AGENT']);
foreach($forbiddenUAs AS $forbiddenUA) {
  if(strpos($thisUA, $forbiddenUA) !== FALSE) { ...


forbiddenReferers
php
$forbiddenReferers = array(
'pickyourshoes.com', // 27.6.2006 18:47:29
'ottosuch.de',
'.dealx.info',
'...'
);
// test mit
if (isset($_SERVER['HTTP_REFERER'])) {
  $thisReferer = strtolower($_SERVER['HTTP_REFERER']);
  foreach($forbiddenReferers AS $forbiddenReferer) {
	if(strpos($thisReferer, $forbiddenReferer) !== FALSE) {...


forbiddenIPRanges
php
$forbiddenIPRanges = array(
array(-841908224, -841891841), //205.209.128.0 - 205.209.191.255
array(1023758336, 1023759359), //61.5.80.0 - 61.5.83.255
array(-897232896, -897228801), //202.133.80.0 - 202.133.95.255
array(1054981096, 1054981103), //62.225.187.232 - 62.225.187.239
array(1072774400, 1072774527), //63.241.61.0 - 63.241.61.127
array(1029612800, 1029613055), //61.94.165.0 - 61.94.165.255
array(-896989696, -896989441), //202.137.6.0 - 202.137.6.255
array(1066689504, 1066689535), //63.148.99.224 - 63.148.99.255
array(-800931072, -800931057), //208.66.195.0 - 208.66.195.15
array(1039597568, 1039613951), //61.247.0.0 - 61.247.63.255
...
);
// test mit
$thisIPlong = ip2long($thisIP);
foreach($forbiddenIPRanges AS $forbiddenIPRange) {
  if ( ($thisIPlong >= $forbiddenIPRange[0]) && ($thisIPlong <= $forbiddenIPRange[1]) ) {...

=> A1: kuhl, das ist enorm viel schneller, siehe Blog und Forum!!
Valid XHTML 1.0 Transitional :: Valid CSS :: Powered by WikkaWiki