PHP-Schnipsel: Hintergrundjobs durch Seitenaufrufe auslösen lassen
Wenn man bei seinem Provider keinen Cronjob einrichten kann, aber genügend Besucher hat, kann man ggf. Hintergrundjobs während der Seitenaufrufe auslösen. Man muss dafür sorgen, dass nicht jeder einzelne Seitenaufruf die Verarbeitung triggert, sondern es soll max alle n Sekunden geschehen.
In PHP definiere ich ein Array mit der Konfiguration und ein Arbeitsverzeichnis. Im Arbeitsverzeichnis wird bei Ausführung eines Jobs eine Datei zum Merken des letzten Ausführungsdatums getoucht (jaja, ein schönes deutsches Wort). Soll derselbe Job erneut ausgeführt werden, wird das Alter der Datei im Arbeitsverzeichnis geprüft. Wenn das Alter Älter als mein definiertes Limit ist, dann wird der Job erneut ausgeführt - ansonsten nicht.
Klingt einfach … - ist es auch ;-)
Voraussetzungen, damit das nachfolgende Beispiel funktioniert:
- wget muss am Webserver vorhanden sein (alternativ liessen sich auch curl oder lynx verwenden)
- PHP-Funktion exec muss zugelassen sein
- getestet wurde es nur mit einem Unix-System als Webserver (für Windows s. Anmerkungen unten)
PHP mit Sqlite - mein erster Gehversuch
Ich habe mal einen Download-Zähler gebaut: mittels .htaccess werden alle Dateizugriffe auf ein PHP-Skript umgebogen, welches einmal die angeforderte Datei ausliefert und den Zugriff protokolliert.
In PHP5 ist Sqlite direkt mitgeliefert. Die Sqlite Datenbank ist eine Textdatei, auf die ohne einen laufenden Server zugegriffen wird. Für kleine Webauftritte, wo das Webroot nicht auf einem NFS- oder SMB-Share liegt, ist dies problemlos.
Der wesentliche Vorteil einer SQl-Datenbank zu einer (CSV-) Textdatei ist die Auswertung der Daten: mit SQL Queries kommt man schnell zu den gewünschten Informationen.
Ich definiere mal in PHP eine Variable mit dem Dateinamen zur Datenbank:
$sqliteDB = $_SERVER['DOCUMENT_ROOT']."/sqlite/downloads.sqlite";
In dieser Datenbank ist - weil es zum Einstieg einfacher ist: mit einem grafischen Tool - eine Tabelle angelegt worden:
CREATE TABLE "downloadcount" ( "id" INTEGER PRIMARY KEY AUTOINCREMENT NOT NULL UNIQUE , "time" DATETIME, "file" TEXT, "ext" TEXT, "ip" TEXT, "referrer" TEXT, "usaeragent" TEXT )
Dann muss man nur noch wissen, welcher Sqlite Treiber beim Provider vorhanden ist. Das kann wahlweise Sqlite2, Sqlite3 oder PDO Sqlite sein. Die Versionen unterscheiden sich bei den Kommandos zum Öffnen der Datenbank oder beim Aufruf zum Ausführen eines Queries.
Bei Sqlite 3
$db = new SQLite3($sqliteDB);
Bei PDO Sqlite 3:
$db = new PDO("sqlite:".$sqliteDB);
Ich beziehe mich mal auf die PDO Variante…
So öffnet man eine DB und fügt mit Ausführung eines SQL Statements einen Eintrag hinzu. Eingefügt werden hier die aktuelle Uhrzeit (des Requests), Dateiname und dessen Erweiterung, IP-Adresse des Aufrufers, Referrer und User-Agent.
// $filename enthält den Dateinamen der heruntergeladenen Datei $db = new PDO("sqlite:".$sqliteDB); if ($db) { $path_info = pathinfo($filename); $ext=$path_info['extension']; $sql="INSERT INTO `downloadcount` (`time`, `file`, `ext`, `ip`, `referrer`, `useragent`) VALUES ('".date("Y-m-d H:i:s")."', '" . $filename . "', '".$ext."', '" . getenv("REMOTE_ADDR") . "', '" . getenv('HTTP_REFERER') ."','".getenv('HTTP_USER_AGENT')."'); "; // echo "SQL:<br>$sql<br>"; $db->exec($sql); }
Weiterführende Links:
- DBeaver - Datenbankverwaltung für div. Datenbanken(kostenlos, Opensource; für Windows, Mac, Linux; unterstützte Datenbanken: Sqlite, Mysql, Postgres, Oracle u.v.a.)
- Sqlite Administrator (Freeware; Windows)
- www.php.net - PDO Sqlite
- www.php.net - Sqlite 3
5.1-WAV-Dateien zu AC3 umwandeln leicht gemacht
Manche Probleme schafft sich der Mensch ja selbst. So kann ich mit Magix Musikmaker 5.1-Musik erstellen, aber ein Export nach Mp3 erzeugt konsequent lediglich Stereo-Dateien. Wahrscheinlich, weil kein Mp3-Pro-Encoder dem Programm beiliegt - aber eine Fehlermeldung kommt auch nicht.
Es bleibt der Export nach WAV oder Windows Media, um 6 Kanäle zu behalten.
4:43 min Musik erzeugen eine 143 MB grosse WAV-Datei. Und Windows Media … das passt mir grad nicht ;-)
Nun hab ich also meine 5.1 Wave-Datei. Klingt zwar gut, ist aber noch ein klitzekleinwenig zu gross.
Meine Konvertierungsversuche mit VLC oder ffmpeg scheiterten kläglich. Ffmpeg weigerte sich, ein Audio mit mehr als 2 Audiokanälen zu lesen. Beim Export mit VLC erhielt ich grausame akustische Resultate - warum auch immer - soviel liess sich ja auch gar nicht einstellen.
[Weiterlesen…]
HTML5 - neues Apple Buzzword und Showcase des “Safari-Web-Standards”
Grossmundig werden Standards, wie HTML5, CSS3, and JavaScript genannt. Alles basiert auf offenen Standards, um das von Apple ungeliebte Flash zu verbannen. Und tolle Demos gibts im Showcase dazu. Aber nicht alle Browser unterstützen diese, aber eben der “Superbrowser” von Apple. Bewundern darf man das im HTML5 Showcase.
Oder auch eben nicht.
http://www.apple.com/html5/ (Anm.: Seite wurde entfernt - der Link wurde daher dekativiert)
[Weiterlesen…]
HTML-Fehler auf Suchmaschinen-Startseiten
Google hat kürzlich seine Seite einem leichten optischen Refresh unterzogen. Einigermassen verdutzt war ich, dass der Suchmaschinen-Branchenprimus viele HTML-Fehler enthält. Ganze 46 Fehler bei einer Seite, die lediglich ein Suchformular und ein paar Links drumherum zeigt. Ausserdem sollten bei Google fähige Webprogrammierer am Werk sein.
Ein Vergleich mit anderen Anbietern zeigt aber, dass sauberer HTML Code scheinbar nicht gerade “üblich” zu sein scheint.
Getestet wurde mit http://validator.w3.org/.
HeidiSQL 5 - Mysql-GUI für Windows
HeidiSQL 5 ist eine kostenlose grafische Oberfläche für Mysql-Server. Es ist ein reiner Windows-Client.
Die neue Version 5 von HeidiSQL habe ich mir heute heruntergeladen und habe es als portable Version am Laufen.
Version 4 wollte unter Windows 7 immer das Admin-Passwort haben, warum auch immer (vielleicht hab auch ich das verbockt)…
Umzug der PC-Daten
Hurra, ein neuer PC ist da. Wie Kopiere ich alle Daten von einem Windows PC zum anderen?
Variante 1: Festplatte des alten PC in den neuen einbauen
Das ist aus Geschwindigkeitsgründen die zu bevorzugende Variante.
Es mag technische Barrieren geben, wie z.B. dass der neue PC nur SATA Anschlüsse besitzt, man im alten Rechner jedoch IDE Platten hat.
Es gibt IDE-SATA Adapter oder IDE-USB Adapter. Das hat aber nicht jeder im Haus und die Anschaffung lohnt für einmalige Aktionen kaum.
Variante 2: Daten über Netzwerkfreigabe kopieren
Meine Mac OS Erfahrung - Dateien ausführen ganz einfach?
Ich kenne Unix/ Linux/ Windows seit etlichen Jahren.
Da sollte ein unixbasierter Mac mich doch auch schnell was starten lassen können…
Doch die Verschleierung des Systems ist für einen Nicht-Mac-User eine wahre Herausforderung. Dabei ist das, was ich wollte, scheinbar trivial: Ich habe hier eine Skript-Datei, die in der ersten Zeile (Shebang) die stinknormale Bourne-Shell als Interpreter für deren Ausführung enthält: “#!/bin/sh” steht dort. Und die Skriptdatei will ich ausführen….
Firefox + Thunderbird unter Windows und Linux auf einem PC gemeinsam nutzen
Wer auf seinem PC sowohl Windows als auch Linux nutzt, möchte sicherlich seine Bookmarks und E-Mails nicht doppelt verwalten. Sondern: egal ob Windows oder Linux gebootet wird, möchte man ein und dieselben Daten vorliegen haben. Schreibt man eine E-Mail unter Linux, soll diese im Postausgangsordner auch beim Start von Windows sichtbar sein und ein unter Windows hinzugefügter Bookmark, soll man unter Linux ebenso vorfinden.