Sonntag, 28. Februar 2010

PHP von MAMP in AppleScript nutzen

Viele Entwickler am Mac nutzen AppleScript für kleine wie größere Aufgaben. Manche Vorgänge können allerdings mit AppleScript aufwendiger sein als in anderen Programmiersprachen - wie zum Beispiel PHP. Ein gutes Beispiel dafür ist das Suchen und Ersetzen einer Zeichenkette in einer anderen Zeichenkette. Mit AppleScript etwas kompliziert, mit PHP ein Einzeiler.

Wollen wir uns nun also mal ansehen, wie man die beiden Programmiersprachen AppleScript und PHP zusammenbringen kann. Fangen wir dazu mit einem einfachen Beispiel an: Die PHP-Version über AppleScript ausgeben.

Hinweise:
  • Für alle, die noch nie etwas mit AppleScript zu tun hatten: AppleScripts schreibt man im AppleScript Editor. Dieses Programm wird standardmäßig bei jedem Mac OS X mitgeliefert und befindet sich hier: /Programme/Dienstprogramme/AppleScript Editor.app
  • Je nachdem, ob man PHP4 oder PHP 5 von MAMP nutzen möchte, muss man einen anderen Pfad angeben.
  • Die MAMP-Server müssen zum Ausführen von PHP über AppleScript nicht gestartet werden.
Mit PHP4
set myCmd to "/Applications/MAMP/bin/php4/bin/php -r \"echo PHP_VERSION;\""
set myResult to do shell script myCmd
-- Ergebnis: "4.4.9"

Mit PHP5
set myCmd to "/Applications/MAMP/bin/php5/bin/php -r \"echo PHP_VERSION;\""
set myResult to do shell script myCmd
-- Ergebnis: "5.2.11"

Kommen wir nun zu dem bereits am Anfang genannten Beispiel für das Suchen und Ersetzen. Mit PHP kann man diese Aufgabe über die Funktion str_replace() erledigen. Um es etwas übersichtlicher zu gestalten, speichern wir beim nächsten Beispiel den PHP-Code in eine separate Variable.

Suchen und Ersetzen (mit PHP5):
set myPHP to "echo str_replace('ist', 'war', 'Das ist ein Test.');"
set myCmd to "/Applications/MAMP/bin/php5/bin/php -r \"" & myPHP & "\""
set myResult to do shell script myCmd
-- Ergebnis: "Das war ein Test."

Ein weiteres nützliches Anwendungsbeispiel ist die URL-Kodierung einer Zeichenkette nach RFC 1738:

Variante A:
set myPHP to "echo rawurlencode('Das ist ein Test.');"
set myCmd to "/Applications/MAMP/bin/php5/bin/php -r \"" & myPHP & "\""
set myResult to do shell script myCmd
-- Ergebnis: "Das%20ist%20ein%20Test."

Variante B:
set myQuotedString to quoted form of "Das ist ein Test."
set myCmd to "/Applications/MAMP/bin/php5/bin/php -r \"echo rawurlencode(" & myQuotedString & ");\""
set myResult to do shell script myCmd
-- Ergebnis: "Das%20ist%20ein%20Test."

Share/Save/Bookmark

Keine Kommentare:

Kommentar veröffentlichen