Webtechnik

Asynchrone PHP Prozesse mit Gearman

Gearman Es kommt immer wieder vor, dass man aus einem PHP-Script heraus ein Anderes aufrufen möchte welches dann eine bestimmt Aufgabe erledigt. Dies ist z.B. sinnvoll wenn die Aufgabe länger dauert und man nicht im Script darauf warten möchte, wie etwa beim Erstellen von Bildern in verschiedenen Größen.
Ich hatte bereits vor einiger Zeit über eine Möglichkeit berichtet PHP-Script im Hintergrund auszuführen.
Diese Möglichkeit ist allerdings nicht wirklich schön und hat auch einige Nachteile. Z.B. kann man nur schwer abfragen wie der aktuelle Status des Scripts ist und auch die Verteilung auf verschiedene Server ist nicht trivial. Darum möchte ich hier eine wesentlich elegantere Möglichkeit vorstellen PHP-Prozesse asynchron laufen zu lassen. Und zwar mit Hilfe von Gearman: Read More…

Fork me on GitHub

SFTP Upload mit PHP

Seit einiger Zeit bietet PHP mit der SSH2-Library einige Methoden um das SFTP-Subsystem von SSH zu nutzen. Leider fehlt eine Methode um Dateien per SFTP hochzuladen. Zwar existiert mit der Methode ssh2_scp_send eine Möglichkeit Dateien über einer SSH-Verbindung hochzuladen, allerdings wird hier das SCP-Protokoll benutzt. Sollte der verwendete Account serverseitig jedoch auf SFTP beschränkt sein funktioniert diese Methode nicht.
Um dennoch Dateien per SFTP hochladen zu können kann man sich mit der Methode fopen und dem ssh2-sftp Wrapper eine funktionierende Lösung basteln. Read More…

Twitter API mit oAuth nutzen

Am 30. Juni wird Twitter die Standard Authentifizierung der Twitter API abschalten. Bis dahin sollte man seine Scripte so umstellen, dass sie oAuth benutzen. Wie lange man dafür noch Zeit hat erfährt man übrigens hier: http://www.countdowntooauth.com/ ;)

Da es mittlerweile schon einige PHP Klassen gibt welche oAuth unterstützen ist die Umstellung relativ einfach zu bewerkstelligen. Hier ein kleines Tutorial:

Zunächst muss man auf http://dev.twitter.com/ eine neue “App” anlegen. (Vorher einloggen) Der Prozess ist selbsterklärend. Nachdem man die App angelegt hat erhält man einen “Consumer key” und ein “Consumer secret”. Diese beiden Strings benötigen wir später für die Authentifizierung. Weiterhin braucht man den “oAuth Token” und das “oAuth Token Secret”. Um diese zu bekommen oben auf Your apps klicken. Dann auf “Edit Details” der entsprechen App. Nach zwei weiteren Klicks auf “Application detail” (rechts) und “My Access Token” (auch rechts) hat man alle benötigten Tokens und Passwörter zusammen die man in einem PHP-Script benötigt. Read More…

Ajax Push Engine APE reanimiert JiTT

Vor einiger Zeit habe ich ein kleines Bastelprojekt mit den Namen JiTT ins Leben gerufen um das Kaazing Gateway zu testen. Leider gibt es am Kaazing Gateway schon seit einiger Zeit keine Aktualisierungen mehr und mich habe mich nach Alternativen umgeschaut. Gefunden habe ich die Ajax Push Engine kurz APE.
Genau wie das Kaazing Gateway bietet APE die Möglichkeit persistente Verbindungen zwischen Client (Browser) und Server aufzubauen. Dabei wird ein Coment-Server und ein kleines Javascript Framework benutzt.
Die Installation ist Dank eines deb-Paketes sehr einfach und gut dokumentiert. Weiterhin gibt es einige Demo-Anwendungen so dass man schnell anfangen kann zu basteln.
Ein Vorteil gegenüber dem Kaazing-Gateway: APE benötigt keine Java-Laufzeitumgebung und kommt somit mit wesentlich weniger Arbeitsspeicher aus. Insgesamt wirkt der Comet-Server um einiges schlaker und performanter. Lasttests konnte ich bisher noch nicht machen, ich werde mich aber bemühen dies nachzuholen.

Abschließend noch der Hinweis, dass das Projekt JiTT ab sofort und folgender URL zu finden ist: http://jitt.geekservice.de

PHP: isset vs. array_key_exists

Heute möchte ich mal ein paar Worte zu den Funktionen isset und array_key_exists loswerden. Genauer angeschaut habe ich mir das Verhalten der beiden Funktionen beim Prüfen ob ein Feld in einem Array existiert. Bevor ich zur Performance komme möchte ich jedoch noch auf ein paar Besonderheiten der Funktionen eingehen:

Um zu prüfen ob ein Feld in einem Array existiert ohne dabei Fehlermeldungen zu erzeugen muss vor beiden Funktionen isset und is_array aufgerufen werden.

Beispiel:

1
2
3
4
if(isset($foo) && is_array($foo) && isset($foo['bar']))
{
	$check = true;
}
1
2
3
4
if(isset($foo) && is_array($foo) && array_key_exists('bar', $foo))
{
	$check = true;
}

Read More…

PHP-Performance: preg_match vs. strpos

Folgendes Problem hat man als Coder sicherlich öfters zu lösen: Man möchte wissen ob String A, String B oder String C (u.s.w) in einem Text vorkommen. Beispielsweise holt man eine Liste mit Keywords aus einer Datenbank und möchte wissen ob eins dieser Keywords in einem Text vorkommt.
Um das Problem zu lösen gibt es sicherlich zig verschiedene Möglichkeiten. Die gängigsten sehen wahrscheinlich in etwas so aus:

1
2
3
4
if(stripos($haystack, $needle) !== false)
{
	$found = true;
}
1
2
3
4
if(preg_match('/'.$needle.'/is', $haystack) == 1)
{
	$found = true;
}

Read More…

Piwik – Eine Alternative zu Google Analytics

piwik_screenWas gegen das Statistik-Tool aus dem Hause Google spricht möchte ich an dieser Stelle nicht diskutieren. Jedenfalls nutze ich für meine eigenen Webprojekte gerne Statisktik-Tools welche ich selber hosten kann.
Bisher habe ich dabei auf chCounter gesetzt. Dieses Tool liefert gute Ergebnisse hat jedoch einen extremen Nachteil: Es kann nur mit einer Domain bzw. einem Projekt umgehen. Bei mehreren Projekten beutet dies: Es muss für jedes Projekt eine neue chCounter Installation aufgesetzt werden. Read More…

 Scroll to top