PHP als cronjob: Argumente übergeben

Heute habe ich einen cronjob eingerichtet, bei dem ein PHP-Skript ausgeführt werden sollte. Der Clou ist, dass ich Argumente an das Skript übergeben musste. Im Detail ging es um ein Update-Script für tt-rss. Doch egal, wie ich den Befehl versucht habe zu schreiben und zu verändern, der Updater lief nicht.

/usr/bin/php -f /var/www/html/tt-rss/update.php -- --feeds

Ein wenig debuggen im Updater-Skript hat dann weiter geholfen. Die Argumente kamen gar nicht an, das heißt, sie wurden nicht an das Skript übergeben. Dieses Verhalten kann nämlich in der php.ini über das Attribut register_argc_argv an- und ausgeschaltet werden.

Wenn man ein PHP-Skript per cronjob ausführt, kann man diese Einstellung ebenfalls als Argument übergeben. Die Lösung lautet somit

/usr/bin/php -d register_argc_argv=On -f /var/www/html/tt-rss/update.php -- --feeds

Joomla: Encoding-Fehler im JCE beheben

Ich hatte bei einer Joomla-Installation das Problem, dass dort bei Benutzung des deutschen Sprachpakets in den Popups, etwa beim Link-Manager, Hieroglyphen anstelle von Umlauten oder eines scharfen S angezeigt wurden. Typische Anzeichen von Encoding-Fehlern. Ein Update auf die neuesten Versionen von JCE und Sprachpaket brachte auch keine Besserung. Komisch, dachte ich, die Webseite wird doch mit UTF-8 ausgeliefert. Nach einer genaueren Untersuchung mit Firebug kam ich der Sache schon näher. Tatsächlich werden die normalen Joomla-Seiten mit UTF-8-Encoding vom Webserver geschickt. Leider wirkt sich das nicht auf JCE aus, denn der wird per iframe-Tag eingebunden. Und JCE gibt ein Encoding nicht explizit an, es hängt also von weiteren Faktoren ab, welche Kodierung letztendlich gewählt wird.

Fehler in der Zeichenkodierung des JCE Link-Managers
Fehler in der Zeichenkodierung des JCE Link-Managers

Auf dem besagten Server war es ISO-8859-1 und nicht UTF-8. Um die Frage nach dem Warum zu beantworten, muss man wissen, dass die Zeichenkodierung auf unterschiedlichen Wegen festgelegt werden kann. Das kann einerseits der Webserver sein, andererseits kann auch das PHP-Skript per header()-Anweisung die Kodierung beeinflussen. Zu guter Letzt kann im HTML-Code ebenfalls ein Hinweis per meta-Tag gegeben werden.

In meinem Fall half ein Blick auf die die Ausgaben von phpinfo. Dort war der Wert default_charset auf ISO-8859-1 gesetzt. Eine Änderung auf utf-8 hat den Fehler behoben.

Desire HD: Power-Knopf lange drücken geht nicht

Mit meinem HTC Desire HD hatte ich jetzt kürzlich das Problem, dass der Anschaltknopf des Handys zwar funktioniert, um das Display zu sperren und wieder freizugeben, aber der Weg zu den Energieoptionen war nicht mehr zu erreichen. Dieses Menü erscheint, indem man die Ein/Aus-Taste länger gedrückt hält. Nach etwa 2 Sekunden taucht ein Popup-Menü mit den Optionen Ausschalten, Flugmodus und Neu starten auf.

Eigentlich. 😉

Bei mir kam auch nach 30 Sekunden noch kein Menü, aber wie gesagt, ein Hardware-Problem lag nicht vor. Auch ein Neustart (Akku kurz heraus nehmen) konnte das Problem nicht beheben. Im Internet habe ich eine Lösung gefunden, die bei mir funktioniert hat.

Unter Einstellungen > Sicherheit muss man den Punkt „Sichere Anmeldeinformationen verwenden“ aktivieren. Dieser kann danach gleich wieder deaktiviert werden.

Danach hat es bei mir wieder funktioniert. Welchen Zusammenhang der Tasten-Fehler und der angesprochene Menüpunkt haben, ist mir trotzdem rätselhaft 😉

xps-Dateien unter Windows XP öffnen

Gerade eben stand ich vor dem Problem, eine xps-Datei (steht für „XML Paper Specification“) zu öffnen. Und zwar unter nicht mit Windows 7 oder 8, für die bereits Viewer im System vorhanden sind. Nein, unter Windows XP ist kein Viewer-Programm vorinstalliert. Um so erstaunter war ich, dass ich nach kurzer Recherche feststellen konnte, dass der Internet Explorer diese Dokumente darstellen kann. Das funktioniert sogar schon mit dem IE6. Somit muss man keine weitere Software installieren, und das ist ja auch nicht so schlecht 🙂

Pos1- und Ende-Tasten mit Putty nutzen

Wie vermutlich viele andere hatte ich das Problem, dass ich die Tasten Pos1 und Ende nicht nutzen konnte, wenn ich mich mit Putty auf Linux-Rechnern eingeloggt habe. Erst ignoriert man es, aber mit der Zeit wird es eine Qual 😉 Auf der Suche nach Linderung bin ich auf viele Lösungen gestoßen, die wohl bestenfalls Halbwahrheiten sind und nur unter bestimmten Voraussetzungen funktionieren.

Wen die genauen Hintergründe interessieren, warum die hier vorgestellte Lösung besser ist, als manch andere, den verweise ich gerne auf einen Artikel, der mir weitergeholfen hat.

Putty Fenster

Doch nun zur Lösung. In den Einstellungen von Putty geht man die Seite Connection > Data. Dort findet man den Eintrag Terminal-type string. Im Eingabefeld steht wahrscheinlich xterm. Ändert den Eintrag auf putty, und vergesst nicht, danach die Konfiguration auch zu speichern. Danach sollten bei einer neuen Verbindung auch die Tasten Pos1 und Ende endlich funktionieren.

msmtp hängt bei der Nutzung von TLS/SSL

Gerade habe ich msmtp eingerichtet, einen Mail Transfer Agent (MTA). Damit dieser auch eine sichere Verbindung zum SMTP-Server aufbaut, habe ich in meiner Konfiguration TLS auf on gesetzt. Leider es damit noch nicht ganz geklappt. Der Versand der Mail mittels msmtp bliebt hängen mit der Meldung „reading recipients from the command line„. Eine nicht ganz aussagekräftige Fehlermeldung…

Das Problem lässt sich jedoch schnell beheben, da man in diesem Fall wohl StartTLS noch nicht abgeschaltet hat, diese Option ist laut Dokumentation standardmäßig aktiviert. Der Befehl dazu lautet tls_starttls off.

Meine Konfigurationsdatei sieht nun so aus:

# Default Settings
defaults
auth             on
tls              on
tls_trust_file   path/to/certificate/ca.pem
tls_starttls     off

# First address
account          provider
host             smtp.provider.example
port             465
from             username@provider.example
user             username
password         password

Error: 1286 Unknown table engine ‚InnoDB‘

Eine Datenbank wie beispielsweise MySQL sollte unter Linux nicht unter root laufen. Dies kann nämlich eine eine nicht zu unterschätzende Sicherheitslücke darstellen. Also habe ich mich ans Werk gemacht, einen neuen Benutzer mit dem Namen mysql erstellt, so dass MySQL von nun an als normaler Benutzer läuft.

Ein wichtiger Punkt ist dabei ist, das der Benutzer mysql Zugriff auf das MySQL-Verzeichnis hat:

chown -R mysql:mysql /path/to/mysql/datadir

Gesagt, getan. Leider gab es dann bei einem Zugriff auf Tabellen des Typs InnoDB einen Fehler. Der Fehler lautete Error: 1286 Unknown table engine ‚InnoDB‘. Die Engine wurde zwischenzeitlich nicht in der Konfigurations-Datei abgeschaltet, also musste der Fehler wo anders liegen.

Des Rätsels Lösung war, dass der Benutzer mysql nicht auf alle benötigten Verzeichnisse Zugriff hatte. So gab es ein spezielles tmp-Verzeichnis für MySQL, bei dem ich das Ändern der Berechtigungen vergessen hatte. Sobald ich auch hier den Befehl

chown -R mysql:mysql /path/to/mysql/tmpdir

ausgeführt hatte und die Datenbank neu gestartet war, konnte ich auch wieder auf die InnoDB-Tabellen zugreifen.

Wuala: „Failed to find Java VM!“

Ich hatte gestern mit Wuala das Problem, dass Wuala das installierte Java nicht mehr gefunden hat. Die Fehlermeldung lautete „Failed to find Java VM“. Eine Lösung, die ohne großes Neuinstallieren von Wuala und/oder Java auskommt, ist folgende:

Man legt sich dazu die Datei Wuala.ini an, und zwar im Verzeichnis

C:\Users\<Benutzer>\AppData\Roaming\Wuala

In der Datei gibt man dann den Ort der Java-Datei jvm.dll an. Der Pfad muß natürlich an eurer konkretes Java Verzeichnis angepasst werden.

vm.location=C:\Program Files\Java\bin\client\jvm.dll

[Update] In den Kommentaren hat Moritz noch darauf hingewiesen, dass Wuala die 32bit-Variante von Java benötigt. Falls ihr von Java schon die 64bit-Version installiert habt, könnt ihr die 32bit-Version problemlos parallel installieren. [/Update]

Deutsches Wörterbuch für Eclipse

Die neueren Versionen von Eclipse haben eine eingebaute Rechtschreibprüfung. Da jedoch nur ein englisches Wörterbuch mitgeliefert ist, wird bei der Verwendung von Deutscher Sprache in der Dokumentation oder Kommentaren der Text gelb unterkringelt. Im besten Fall ist das unschön, im schlimmsten Fall lenkt es den Programmierer ab.

Um Abhilfe zu schaffen, kann man ein benutzerdefiniertes Wörterbuch angeben. Dieses Wörterbuch ist im Grunde eine Textdatei mit jeweils einem Wort pro Zeile. Da wohl niemand Zeit und Lust hat, ein einiges zu erstellen, habe auch ich mich auf die Suche gemacht. Fündig geworden bin ich auf Sourceforge, dort gibt es das Projekt Free German Dictionary. Das entpackte Wörterbuch kopiert man dann beispielsweise in das Verzeichnis

C:\Programme\Eclipse\dropins\

In Eclipse navigiert man in den Einstellungen (Window > Preferences) dann nach General > Editors > Text Editors > Spelling und wählt dort die Wörterbuchdatei als User defined dictionary aus.

Nach einem Neustart sollte auch deutscher Text korrekt erkannt werden.

VMWare Images zu VirtualBox konvertieren und verkleinern

Virtuelle Maschinen sind was Feines. Man kann neue Software gefahrlos testen, andere Betriebssysteme nutzen oder alte Systeme einfach konservieren. Bis vor kurzem habe ich den VMWare Server genutzt, der dann aber nicht mehr weiter entwickelt wurde. Auf der Suche nach einer Lösung bin ich auf VirtualBox gestoßen, dass mir persönlich sogar besser gefällt.

Die alten vmdk-Images von VMWare können zwar unter VirtualBox weiter verwendet werden, aber gewisse Änderungen können hier nicht durchgeführt werden. Deswegen habe ich meine Image-Dateien in vdi-Format von VirtualBox konvertiert. Der Befehl dafür lautet:

VBoxManage.exe clonehd --format vdi original.vmdk converted.vdi

Sollte dabei ein Fehler auftreten, dass eine Festplatte mit derselben UUID schon existiert, so kann man statt der orginal.vmdk auch die genannte UUID als Quelle angeben. Für das Konvertieren sollte man etwas Zeit und auch genug Speicherplatz einplanen, da das Image am Ende ja in zwei Formaten vorliegt.

Anschließend, und das war ein Grund für mich, das Image zu konvertieren, kann man dynamisch wachsende Images auch wieder schrumpfen, sofern Platz vorhanden ist. Damit das funktioniert, muss der freie Speicherplatz genullt werden, das heißt, dass als gelöscht markierte Dateien mit Nullen überschrieben werden. Für Windows gibt es dazu das Tool sdelete aus der Sysinternals Suite von Microsoft.

Das Programm ruft man in der virtuellen Maschine folgendermaßen auf:

sdelete.exe -z c:\

In neueren Windows-Versionen muss man das Programm (bzw. die Kommandozeile) mit Administratorrechten ausführen. Zu beachten ist auch, dass früher der Parameter -c verwendet wurde. Für virtuelle Maschinen ist seit neuestem jedoch der Parameter -z vorgesehen.

Nach dem Stoppen der virtuellen Maschine kann man mit dem Verkleinern des Images beginnen. Der Aufruf lautet:

VBoxManage.exe modifyhd converted.vdi --compact

Der Vorgang kann einige Zeit in Anspruch nehmen. Danach jedoch sollte sich das Image, je nach Füllstand wieder verkleinert haben