Codeschnipsel

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);
	}
}

Continue reading

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.

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.
Continue reading

FTP Resume error -> rsync Alternative

Heute morgen war es mir mit der derzeitigen Filezilla-Version von Ubuntu 10.04 leider nicht mehr möglich, ein insgesamt 1,8 GB großes ZIP-Archiv an der Stelle mit dem Upload fortzusetzen, wo gestern der Feierabend dazwischen gefunkt hat. Da gestern bereits ca. 65% der Datei übertragen wurden, musste eine Alternative her. Eine kurze Suche bei der Suchmaschine meiner Wahl brachte das gewünschte Ergebnis.

rsync -av -P -e ssh localfile.zip user@remotehost:/remotedir/

hat genau das getan, was mir Filezilla verweigert hat. Der Schalter -P ist übrigens der ausschlaggebende.

eAccerlerator mit mehr als 32MB SharedMemory betreiben

Wenn der Apache den Start verweigert, man das eAccelerator-Modul für PHP benutzt und mit mehr als 32MB Speicher betreiben möchte, kann es sein, dass der Kernel eben nicht mehr als die 32MB Shared Memory zulässt.

Diesen Umstand kann man im laufenden System folgendermaßen ändern:

echo "67108864" > /proc/sys/kernel/shmmax

Damit die Einstellungen bei ggfs. notwendigen Serverneustart nachwievor vorhanden sind, lohnt es sich, die Einstellungen fest im System speichern. Das geht dann so:

# Konfiguration speichern
echo "kernel.shmmax=67108864" >> /etc/sysctl.conf
# ggfs. die Konfiguration neu einlesen:
sysctl -p

SOAP Request von der Commandozeile

Von einer Linux-Commandozeile kann man mit folgendem Aufruf einen SOAP-Request absetzen:

curl -H "Content-Type: text/xml; charset=utf-8" \
-H "SOAPAction:" \
-d @soaprequest.txt \
-X POST http://soapEndpoint

In der Datei soaprequest.txt sollte sich der gesamte SOAP-Request befinden. Falls es Probleme mit dem ggfs. vorhandenen SSL-Zertifikat auf Server-Seite geben sollte, einfach noch die cURL-Option „-k“ hinzu.

Seite 1 von 212