/images/avatar.webp

Full-Stack Webdeveloper
Coresoft

Middle-Aged Full-Stack Symfony-Webdeveloper mit über 20 Jahren Berufserfahrung. Gerne unterstütze ich Sie bei der Verwirklichung Ihrer Ideen und Projekte. Hier gibt es neben einer kurzen Vorstellung Interessantes aus der beruflichen und teils auch privaten Welt eines selbständigen Webworkers.

Bash rename führende Nullen einfügen

Wenn man in Dateien (hier jpg-Bilder) führende Nullen einfügen möchte (im konkreten Beispiel sind es maximal 6 Stück), hilft folgendes Bash-Skript weiter: #!/bin/sh for a in [0-9]*.jpg; do b=$(printf %06d.jpg ${a%.jpg}) if [ $a != $b ]; then mv $a $b fi done; Das Skript sollte im selben Verzeichnis liegen, wie die Bilder.

Festplatte überprüfen mit smartctl aus den smartmontools

Draußen waren es heute 31 °C. Im Rechenzentrum war es offenbar ähnlich warm, denn gegen 15:30 Uhr hat sich ein Datenbankserver in den Feierabend verabschiedet. Der Reboot hat dann gut 30min gedauert (aufgrund der Filesystem-Checks). Das blöde ist allerdings, dass das RAID-1 nen Knacks wegbekommen hat und sich nun neu synchronisiert. Beim Support hat man mir empfohlen, die Festplatten mit smartctl einmal zu überprüfen. Das Ganze funktioniert folgendermaßen: smartctl -son /dev/sda && smartctl -son /dev/sdb smartctl -t short /dev/sda && smartctl -t short /dev/sdb wait 120 smartctl -a /dev/sda smartctl -a /dev/sdb smartctl befindet sich übrigens im Debian/Ubuntu-Package smartmontools.

Bild von externer URL speichern

Hin und wieder hat man das Bedürfnis oder aber die Aufgabe, Bilder von bekannten URLs auf dem eigenen Rechner / Server zu speichern. Mit PHP gelingt dies relativ einfach und bequem. Folgende Utility-Klasse zeigt, wie es gehen könnte. class Utility { static public function getRemoteImage($url, $fileName) { // Hole das Bild von der URL $imageData = file_get_contents($url); // Erzeuge eine neue Datei auf dem Webserver // Das Zielverzeichnis muss für den Webserver-Benutzer beschreibbar sein $fileHandle = fopen($fileName, "w"); fwrite($fileHandle, $imageData); fclose($fileHandle); } } Um das Bild jetzt zu speichern, genügt nach Einbinden der Klasse folgender Aufruf:

Vollgelaufene Verzeichnisse aufräumen mit find & co

Jeder Admin kennt wohl das Problem, dass irgendwelche Verzeichnisse mit der Zeit immer voller werden, wenn man sie nicht zyklisch leer räumt. Ein kleiner Cronjob kann einem hier lästige Handarbeit abnehmen. So löscht folgender Einzeiler beispielsweise alle Apache-Log-Dateien, die älter sind, als 30 Tage: /usr/bin/find /var/log/apache2/ -name "*.gz" -mtime +30 -exec rm {} \; Das Ganze als täglichen Cronjob eingerichtet und schon hat man eine mögliche Sorge weniger.

Mein erstes Symfony Projekt: Unter der Haube Achtung-Bücher.de

Seit kurzem dümpelt (noch!) unser neues Verkaufsportal für neue und gebrauchte Bücher im Internet herum – erreichbar über die leicht einzuprägende URL achtung-buecher.de. Wie schlecht das Ganze doch geworden ist, kann man z.B. im Geizmonster-Forum nachlesen. Vielen Dank an dieser Stelle auch an Herrn Mulzer für seine durchaus konstruktive Kritik. Dass die Seite noch vor sich hin dümpelt, liegt allerdings weniger an der schlechten Optik (was ja eh sehr subjektiv ist), sondern vielmehr an der Tatsache, dass die Domain sehr jung ist und die einschlägigen Suchmaschinen noch nicht viel Content aufgesaugt haben.

CSV-Dateien mit variablen Header umsortieren

Ich stand diese Woche vor der Aufgabe, eine CSV-Datei einzulesen. Eigentlich ein triviales Problem. Knackpunkt dabei war allerdings, dass die CSV-Datei einen variablen Header besitzt. Ich wollte aus der CSV-Datei nur eine bestimmte Teilmenge extrahieren, die über alle CSV-Dateien gleich ist. Nur die Position der Information (Spalten) konnte variieren. Die Spaltennamen sind in alle CSV-Headern identisch. Anbei ein paar Codeschnipsel in PHP, wie ich das Problem gelöst habe. // Kopfzeile analysieren und Mapping bauen $fieldsFeedFirstLine = explode("\t",$feedData[0]); $i = 0; $arrPosition = array(); foreach ($fieldsFeedFirstLine as $fieldName) { switch ($fieldName) { case "column1" : $arrPosition[1] = $i; break; case "column2" : $arrPosition[2] = $i; break; case "column3" : $arrPosition[3] = $i; break; case "column4" : $arrPosition[5] = $i; break; case "column5" : $arrPosition[7] = $i; break; case "column6" : $arrPosition[8] = $i; break; } $i++; } ksort($arrPosition); Das Mapping-Array enthält jetzt die Quellposition ($i) und die Zielposition (Array-Key) für die gewünschte CSV-Datei.