Author: debugger

Programme aus dem Browser heraus aufrufen

Diese Anleitung bietet einen kleinen Überblick wie einfach ein Custom Protocol eingerichtet und mit einer Anwendung verknüpft werden kann. Am einfachsten funktioniert die Einrichtung über eine Regedit-Datei mit folgendem Inhalt.


REGEDIT4

[HKEY_CLASSES_ROOT\foo]
@="URL:foo Protocol"
"URL Protocol"=""

[HKEY_CLASSES_ROOT\foo\shell]

[HKEY_CLASSES_ROOT\foo\shell\open]

[HKEY_CLASSES_ROOT\foo\shell\open\command]
@="\"C:\\Program Files\\Application\\program.exe\" \"%1\""

Quelle: http://kb.mozillazine.org/Register_protocol
Weitere Informationen: http://msdn.microsoft.com/en-us/library/aa767914.aspx

Wenn diese Datei als foo.reg gespeichert wird, ist sie auch gleich ausführbar und der Inhalt wird in die Registry geschrieben.

Der Link bspw: “foo://name@value” kann bspw. zunächst an eine .bat-Datei übergeben werden, die dann erst das Programm aufruft. Ein Beispiel welches im Internet viel zu finden ist und an welchem sich das gut verdeutlichen läßt ist Putty bzw. SSH Link.

Notice: wpdb::escape ist seit Version 3.6 veraltet!

Bei der Aktualisierung einer WordPress Installation von 3.5 auf 3.6 erschien folgende Meldung mehrfach auf dem Dashboard


Notice: wpdb::escape is deprecated since version 3.6! Use wpdb::prepare() or esc_sql() instead. in /var/www/web4/html/wordpress/wp-includes/functions.php on line 2871 Notice: wpdb::escape ist seit Version 3.6 veraltet! Benutze stattdessen wpdb::prepare() or esc_sql(). in /var/www/project/wordpress/wp-includes/functions.php on line 2871

In Zeile 2781 der Datei “functions.php” steht jedoch die Funktion, welche die Meldung ausgibt. Von dem escape-Aufruf ist weit und breit keine Spur. Mittels grep habe ich dann nach allem was ” escape(” beinhaltet gesucht und manuell ersetzt.


grep -r ' escape(' ./

Die Herausforderung ist, das als Ersatz für wpdb::escape zwei Funktionen genannt werden. Welche davon jetzt die Richtige ist, habe ich abhängig davon gemacht, ob die Eingabe nur ausgegeben werden sollte, dann wpdb::prepare, oder in die Datenbank gespeichert werden soll, dann esc_sql.

Nachdem ich alle Dateien “behandelt” hatte, mit der Dateiendung php, erschien weiterhin die Meldung auf dem Dashboard. Erst das Auskommentieren der gesamten “escape”-Funktion brachte eine neue Erkenntnis:


Warning: array_map() expects parameter 1 to be a valid callback, class 'wpdb' does not have a method 'escape' in /var/www/project/wordpress/wp-content/plugins/broken-link-checker/includes/link-query.php on line 295
Warning: implode(): Invalid arguments passed in /var/www/project/wordpress/wp-content/plugins/broken-link-checker/includes/link-query.php on line 300

Der eigentliche Übeltäter scheint somit die Erweiterung “Broker link Checker” zu sein. Nachdem diese deaktiviert wurde, verschwand die Meldung. Die angepassten Dateien habe ich unverändert gelassen.

Bei meinem grep wurde die Datei “link-query.php” nicht aufgeführt, da “escape” per array_map aufgerufen wurde:


$s_parser_type = array_map(array(&$wpdb, 'escape'), $s_parser_type);

Shell Tricks

Nachdem ich gestern einen Einzeiler geschrieben hatte, welcher mir rotierend ein Backup macht, inklusive E-Mail Benachrichtigung, habe ich in einem Gespräch weitere Optimierungen erfahren, die ich festhalten möchte.

Berechnungen in doppelten Klammern ausführen

benutzer@client$ echo $((1+1))
2

Ausgabe zusammenfassen in Klammern

benutzer@client$ (ls -al; df -m) > test.txt

bzw. wenn danach ein Programmaufruf folgt

benutzer@client$ (ls -al; df -m) | mail -s "Betreff" mail@example.com

Programme nach einander ausführen

ls -al; df -m

nur im Erfolgsfall den zweiten Befehl ausführen

ls -al && df -m

nur im Fehlerfall den zweiten Befehl ausführen

ls -al || df -m

Rsync über SSH mit E-Mail Benachrichtigung und Rotation

Im Internet finden sich eine Vielzahl von Anleitung bei denen nicht immer klar erkenntlich ist, welches System in welche Richtung synchronisiert bzw. gebackup werden soll. Daher zunächst eine Beschreibung des Versuchsaufbaus.


2 Linux Rechner

1. Server: Beherbergt die Dateien im original.
2. Client: Macht eine Kopie von den Dateien

Wie in der Überschrift genannt, soll das Ganze über SSH ablaufen. Außerdem soll es später automatisiert werden. Also benötigen wir einen SSH-Login ohne Passwort und mit Zertifikat. Es empfiehlt sich ggf. einen neuen Benutzer zu erstellen, der nur eingeschränkte Lese-Rechte auf dem Server hat, falls der Key vom Client mal in die falschen Hände gerät und es nicht sofort gemerkt wird.


benutzer@client$ ssh-keygen -b 2048 -t rsa

Im Prinzip können alle Abfragen mit [Enter] bestätigt werden, außer es existieren ggf. schon Keys bzw. falls der Key in einem anderen Verzeichnis gespeichert werden soll.

Nach der Erstellung sollten sich zwei Dateien im Verzeichnis benutzer/.ssh/ befinden, einmal eine Datei (bspw.: id_rsa.pub) mit dem öffentlichen Schlüssel und eine die den privaten und öffentlichen Schlüssel enthält. Den öffentlichen Schlüssel kopieren jetzt auf den Server:


benutzer@client$ ssh-copy-id -i .ssh/id_rsa.pub AndererBenutzer@server

Wenn der Key kopiert ist, sollte ein Login mittels


benutzer@client$ ssh AndererBenutzer@server

bereits funktionieren.

Als nächstes wird ein Skript benötigt, welches die Synchronisation durchführt. Dabei greifen wir auf das Programm Rsync zurück. Der einfachste Aufruf wäre wie folgt:


benutzer@client$ rsync -avz -e ssh AndererBenutzer@server:/home/Quellverzeichnis /Benutzer/Zielverzeichnis/

-v, --verbose
-a, --archive
-z, --compress

Eine Auflistung aller Parameter gibt es mittels man rsync oder hier http://linux.die.net/man/1/rsync .

Dieser Aufruf könnte noch in die Crontab geschrieben werden. Zusätzlich möchte ich aber noch eine E-Mail Benachrichtigung und eine Rotation haben.

Die Synchronisation soll einmal die Woche durchgeführt werden und die letzten vier Wochen sollen verfügbar sein, falls mal ein längerer Urlaub ansteht. Anbieten würde es sich also, wenn wir die Wochennummer nehmen und durch vier teilen. Damit gäbe es eine Rotation von vier Wochen.


benutzer@client$ $(($(date +%V)%4))

bzw. im Rsync-Skript wäre dies dann:


benutzer@client$ rsync -avz -e ssh AndererBenutzer@server:/home/Quellverzeichnis /Benutzer/Zielverzeichnis_$(($(date +%V)%4))/

Somit würde das Verzeichnis alle vier Wochen rotieren.

Die E-Mail Benachrichtigung können wir auch direkt über die Konsole erledigen:


benutzer@client$ rsync -avz -e ssh AndererBenutzer@server:/home/Quellverzeichnis /Benutzer/Zielverzeichnis_$(($(date +%V)%4))/ && df -hT | mail -s "Erfolg" mail@example.com || df -hT | mail -s "Error" mail@example.com

Der Aufruf ist mit einer Bedingung ausgestattet, die im Fehlerfall den Betreff anpasst. Als Inhalt wird immer der verfügbare Plattenplatz mitgeschickt, damit rechtzeitig reagiert werde kann.

Anregungen und Verbesserungen gerne in den Kommentaren.

Google Sitemap XML erstellen

Im Internet gibt es eine Reihe von Skripten und Anleitungen eine Google XML Sitemap zu erstellen. Viele von diesen haben jedoch die Einschränkung das die Urls eine Dateiendung haben. Wenn die Urls jedoch nur bspw. mit “/” enden, versagen viele Skripte. Ein anderer Ansatz ist, wget zu benutzen.

[PHP]
–spider –recursive –no-verbose –output-file=wgetlog.txt http://somewebsite.com
sed -n “s@.\+ URL:\([^ ]\+\) .\+@\1@p” wgetlog.txt | sed “s@&@\&@” > sedlog.txt
[/PHP]

Quelle: http://stackoverflow.com/questions/3948947/can-i-use-wget-to-generate-a-sitemap-of-a-website-given-its-url

Nach dem die Urls extrahiert sind, bedarf es noch eines Skriptes, welches die XML Struktur erzeugt.