Archive for 2011
create_function() genauso übel wie eval()?
Heute mal eine Sonntagsfrage:
Ich überlege gerade wie ich ein Problem löse, bei dem ich wohl nur mit viel Aufwand drumherum komme, eval() zu benutzen. Auf der Suche nach einer Lösung fiel mir auch die Funktion create_function() ein, der man ähnlich wie eval() einen String übergeben kann, der dann beim Aufruf der erstellten Funktion ausgeführt wird.
Und nun meine Frage an euch: Sind die beiden Funktionen in der Gefährlichkeit gleichzusetzen wenn man beide mit einem String füllt, der zusammengesetzt wurde aus Usereingaben? Bei beiden kann böses passieren wenn man die Usereingaben nicht ordentlich filtert, sehe ich doch richtig oder? Seht ihr einen Vor- oder Nachteil von create_function() gegenüber eval()?
Ich frage weil eval() überall auf der Welt als böse angesehen wird, aber über create_function() redet niemand, und ich glaube bei unvorsichtiger Nutzung ist sie genauso gefährlich.
Was ist phar und wie nutze ich es?
Phar ist ein Applikations-Archiv-Format genauso wie Jar es für Java ist. Ein Phar-Archiv enthält Dateien und Ordnerstrukturen, und diese Dateien können dann genutzt werden ohne die Phar-Datei zu entpacken. Man kann so seine ganze Applikation oder auch Frameworks in Phar-Dateien packen und verteilen. Phar ist seit 5.2 als PECL Erweiterung verfügbar, seit 5.3 ist es fest eingebaut.
Die Tatsache dass es dann nur noch eine Datei ist hat mehrere Vorteile. Einerseits ist der Upload auf einen FTP schneller, aber auch beispielsweise der Download ist einfacher, anstatt einer zip/tar.gz Datei die danach noch entpackt werden muss lädt man einfach die Phar-Datei und kann loslegen. Viele kleine Dateien bedeuten auch viele Dateisystem-Zugriffe, und wie wir alle wissen ist die Festplatte langsam, Phar bringt also Performance. Wenn man bereits einen Byte-Code-Cache aktiviert hat ist der Performance-Vorteil nur noch gering, aber vorhanden.
Wenn ich beispielsweise in einer phar-Datei meine komplette Applikation habe, starte ich diese folgendermaßen:
php application.phar
Wenn ein Phar-File auf diese Weise gestartet wird, wird das sogenannte Stub-File aufgerufen, quasi der Einstiegspunkt. Das Stub-File ist eine normale PHP-Datei innerhalb des Phar-Archives.
Alternativ kann ich auch aus einem PHP-Script heraus ein Phar-Archiv inkludieren:
Slides vom phpDay 2011
Der 7. phpDay fand vom 12. bis zum 14. Mai, diesmal wieder in Verona, statt. Vor allem englische , aber auch drei italienische Talks wurden gehalten, hier die Liste:
12.Mai 2011
Caching on the Edge
Fabien Potencier
Testing LAMP Applications
Sebastian Bergmann
Any to any – Convert your documents!
Kore Nordmann
Building search applications with Apache Solr and PHP
Paul Borgermans
A generic PHP Application installer
Kore Nordmann
Security 202 – Are you sure your site is secure?
Arne Blankerts
Modular application architecture
Kore Nordmann
Gewinner des Buches „Coders at Work“
Hier möchte ich kurz den Gewinner der Aktion vom letzten Freitag preisgeben. Gewonnen hat das Buch Coders at Work Christian mit einer 2113 Bytes großen E-Mail, herzlichen Glückwunsch! Ich habe dich gerade angeschrieben zwecks Adresse.
Das wars auch schon für heute.
Kleines Script zum Aufräumen
Ich stand kürzlich vor dem Problem, ein Verzeichnis aufräumen zu müssen, in dem andauernd neue Dateien abgelegt werden, von denen ich aber nur die aktuellsten 5 Dateien behalten möchte.
Gesagt getan.
Erster Schritt ist die Erstellung einer Liste mit allen Dateien um die es geht. Da in dem Verzeichnis noch andere Dateien liegen lasse ich einen regulären Ausdruck entscheiden, ob der Dateiname ins Schema passt oder nicht. Danach wird die Liste der betroffenen Dateien nach dem „Letzten Änderungsdatum“ sortiert und zum Schluss alle überflüssigen Dateien gelöscht. Hier der Quellcode meiner kleinen Klasse: