PHPGangsta - Der praktische PHP Blog

PHP Blog von PHPGangsta


Archive for the ‘PHP’ Category

Linkpool Nummer 11

with one comment

Evercookie: Das Cookie, das der User nicht mehr los wird
http://samy.pl/evercookie/

Über PHP-Entwicklung für Android
http://www.developer.com/features/article.php/52691_3904261_1/Build-Your-First-PHP-for-Android-Application.htm

Kleines Javascript Spiel zum Zerschiessen von Webseiten, gegen die Langeweile zwischendurch
http://erkie.github.com/

Sehr ausführliche Auflistung von Beispielfragen für die Zend Zertifizierung
http://jagatk.wordpress.com/2010/09/27/zend-certification-php-5-sample-questions/

Warum der MySQL Timestamp vom PHP Timestamp abweicht trotz gleichem Systemdatum
http://blog.pumka.net/2010/10/24/why-mysql-timestamp-is-24-seconds-different-from-php/

Interessantes (meist rein theoretisches) Problem: Remote Timing Attacks
http://blog.astrumfutura.com/2010/10/nanosecond-scale-remote-timing-attacks-on-php-applications-time-to-take-them-seriously/

Webseiten Performance Analyse Tool
http://www.yottaa.com/

Über Background Prozesse und wie man PHP Scripte etwas ausbremst für eine bessere Systemperformance
http://www.phpclasses.org/blog/post/132-Accelerate-Page-Accesses-Throttling-Background-Tasks-Unusual-Site-Speedup-Techniques-Part-2.html

Speicherung der Session Daten in memcached mittels Zend_Cache_Backend_Libmemcached
http://blog.digitalstruct.com/2010/10/24/zend-framework-cache-backend-libmemcached-session-cache/

Written by Michael Kliewe

November 7th, 2010 at 11:41 am

Posted in Javascript,PHP

Tagged with , ,

Heute ist „Developers Shame Day“!

with 4 comments

Der bereits angekündigte Developers Shame Day ist (bzw. war) heute, und ich habe mal in meinen alten Dateien gewühlt, und etwas „tolles“ gefunden. Getreu unter dem Motto „mit schlechtem Beispiel voran“. Weiter unten findet ihr auch weitere Beiträge von anderen Bloggern.

$result = mysql_query("UPDATE files SET Caption = REPLACE( REPLACE( REPLACE( REPLACE( REPLACE( REPLACE( REPLACE(Caption, 'Ä', 'Ae'), 'Ö', 'Oe'), 'Ü', 'Ue'), 'ä', 'ae'), 'ö', 'oe'), 'ü','ue'), 'ß', 'ss')");
<script><!--
CSInit = new Array;
function CSScriptInit() {
if(typeof(skipPage) != "undefined") { if(skipPage) return; }
idxArray = new Array;
for(var i=0;i<CSInit.length;i++)
	idxArray[i] = i;
CSAction2(CSInit, idxArray);}
CSAg = window.navigator.userAgent; CSBVers = parseInt(CSAg.charAt(CSAg.indexOf("/")+1),10);
CSIsW3CDOM = ((document.getElementById) && !(IsIE()&&CSBVers<6)) ? true : false;
function IsIE() { return CSAg.indexOf("MSIE") > 0;}
function CSIEStyl(s) { return document.all.tags("div")[s].style; }
function CSNSStyl(s) { if (CSIsW3CDOM) return document.getElementById(s).style; else return CSFindElement(s,0);  }
CSIImg=false;
function CSInitImgID() {if (!CSIImg && document.images) { for (var i=0; i<document.images.length; i++) { if (!document.images[i].id) document.images[i].id=document.images[i].name; } CSIImg = true;}}
function CSFindElement(n,ly) { if (CSBVers<4) return document[n];
	if (CSIsW3CDOM) {CSInitImgID();return(document.getElementById(n));}
	var curDoc = ly?ly.document:document; var elem = curDoc[n];
	if (!elem) {for (var i=0;i<curDoc.layers.length;i++) {elem=CSFindElement(n,curDoc.layers[i]); if (elem) return elem; }}
	return elem;
}
function CSGetImage(n) {if(document.images) {return ((!IsIE()&&CSBVers<5)?CSFindElement(n,0):document.images[n]);} else {return null;}}
CSDInit=false;
function CSIDOM() { if (CSDInit)return; CSDInit=true; if(document.getElementsByTagName) {var n = document.getElementsByTagName('DIV'); for (var i=0;i<n.length;i++) {CSICSS2Prop(n[i].id);}}}
function CSICSS2Prop(id) { var n = document.getElementsByTagName('STYLE');for (var i=0;i<n.length;i++) { var cn = n[i].childNodes; for (var j=0;j<cn.length;j++) { CSSetCSS2Props(CSFetchStyle(cn[j].data, id),id); }}}
function CSFetchStyle(sc, id) {
	var s=sc; while(s.indexOf("#")!=-1) { s=s.substring(s.indexOf("#")+1,sc.length); if (s.substring(0,s.indexOf("{")).toUpperCase().indexOf(id.toUpperCase())!=-1) return(s.substring(s.indexOf("{")+1,s.indexOf("}")));}
	return "";
}

Hier die index.php eines alten Projekts:

Weiterlesen »

Written by Michael Kliewe

November 3rd, 2010 at 10:50 pm

Schämt euch am 3. November!

with 4 comments

Cem Derin, der php hacker, ruft am 3.11.2010 zum Developers Shame Day auf. Jeder Programmierer möge doch bitte an diesem Tag seinen ältesten und beschämensten Code publizieren, für den man sich und Grund und Boden schämen muss. Die Programmiersprache ist dabei egal.

Bin gespannt was dabei herum kommt, ich werde auch mal schauen ob ich noch ein paar alte Fragmente aus grauer Vorzeit finde, im Artikel Alter Code und das Grausen hatten wir ja bereits einige alte Zeilen Code gesehen.

Written by Michael Kliewe

Oktober 26th, 2010 at 7:47 pm

Frühzeitig Memory Limit Probleme entdecken

with 19 comments

Vorausschauendes oder defensives Programmieren wird häufig vernachlässigt. Man geht allzu häufig davon aus, dass die Umgebung immer die selbe ist und wenn es einmal funktioniert, dann funktioniert es immer. Zum defensiven Programmieren gehört aber nicht nur, alle möglichen Fälle von Parametern abzufangen die jemand in eine Methode reinstopfen könnte, sondern auch die Prüfung der Webservereigenschaften. Denn wer weiß, ob das Projekt in einigen Monaten oder Jahren nicht auf einen anderen Webserver (z.B. IIS -> Apache) umgezogen wird, oder bei der Installation einer neuen PHP-Version vergessen wurde, die php.ini korrekt anzupassen.

Häufig gibt es aus diesem Grund in einem Initialisierungsscript oder einer Bootstrap-Datei Prüfungen zur verwendeten ZendFramework-Version, PHP-Version, register_globals, magic_quotes_gpc, memory_limit usw. Diese sind recht einfach zu schreiben (häufig Dreizeiler), und ich möchte hier noch eine weitere kleine Prüfung vorstellen die sicherlich die wenigsten haben.

Es geht um das Memory-Limit, also den maximalen Speicherverbrauch eines PHP-Scriptes. Diesen kann man auf 3 verschiedene Arten setzen:
Weiterlesen »

Written by Michael Kliewe

Oktober 18th, 2010 at 4:50 pm

Posted in PHP

Tagged with ,

Der Download, der sich selbst löscht

with 12 comments

Manchmal kann es nützlich sein dass eine Datei nur einmal heruntergeladen werden kann und dann gelöscht wird, weil sie nicht mehr benötigt wird und nur Platz verschwendet. Bietet man die Datei direkt zum Download an (sprich eine direkte URL zur Datei), dann liefert der Webserver die Datei auch auch an den Browser, aber sie wird nicht gelöscht sobald der Download beendet wurde.

Ich möchte hier ein paar Beispiele sammeln, die dies möglich machen, auf möglichst einfache Art und Weise. Auf die Idee gekommen bin ich bei der Recherche zur Frage, ob ein PHP-Script sich selbst löschen kann, denn ich hatte mich schon immer gefragt ob das geht und wenn ja, warum das nicht gemacht wird bei WordPress-Installationen zum Beispiel, denn dort muss man nach der Installation immer manuell die install.php umbenennen oder löschen.

Lösung 1:

Hier ein kleines PHP Script, das eine Datei zum Download anbietet und nach erfolgtem Download die Datei und sich selbst löscht.
Weiterlesen »

Written by Michael Kliewe

Oktober 8th, 2010 at 10:46 am