Das größte Problem besteht aber darin, Daten in und aus dem Gadget zu bekommen. Man müsste einen leichtgewichtigen Webserver schreiben und integrieren, mit dem das Webgadget interaggieren kann. Und das ist leider nicht ganz so trivial, wie man sich nun denken könnte. Der Atomic Webserver kann zwar statische Daten ausliefern. Bei dynamischen Daten allerdings muss ein Header-Parser geschrieben werden, welcher durchaus heftiger Natur sein kann.
Aus diesem Grund sucht man natürlich nach ausweichenden Möglichkeiten. Eine wäre, die CGI-Fähigkeiten von Purebasic zu nutzen und einen externen Browser zu verwenden. PHP-Desktop war eigentlich dazu gedacht, mit PHP, einem embeddable Mongoose-Server und dem Chromium-Framework Anwendungen mit Webtechnologien zu schreiben. Das klappt auch hervorragend. Wer aber kein PHP beherrscht und lieber auf etwas bewährtem setzen möchte, kann in dem Projekt auch andere CGI-fähige Sprachen und Technologien verwenden. Python, Perl, Ruby und alle anderen, die CGI beherrschen können verwendet werden. So auch Purebasic.
Zur Zeit ist PHP-Desktop nur für Windows verfügbar. Aber es existieren viele Hiweise darauf, das MacOSX und Linux folgen sollen.
Download und Installation:
PHP Desktop kann hier heruntergeladen werden: https://github.com/cztomczak/phpdesktop ... e-v57.0-rc
Nach dem Download ist keine weitere Installation nötig. Einfach entpacken und starten. Jetzt kann man bereits die PHP-Beispiele testen und schauen, wie das System arbeitet.
PHP-Desktop auf die Arbeit mit PB-CGI vorbereiten
Da wir aber kein PHP verwenden möchten, sondern Purebasic nutzen wollen, müssen wir ein paar kleine Anpassungen vornehmen. Wenn wir in den PHP-Desktop Ordner wechseln, sehen wir den Ordner PHP. Diesen löschen wir. Außerdem finden wir dort den Ordner www. Dabei handelt es sich um das Root-Directory vom Mongoose-Server. Diesen können wir umbenennen und müssen den Inhalt löschen. Ich habe ihn frontend genannt. Für unsere CGI-Anwendung erstellen wir einen neuen Ordner. Ich nenne ihn backend.
Nun müssen wir noch PHP-Desktop konfigurieren. Dazu öffnen wir im Hauptverzeichnis die Datei settings.json. In diesem JSON-Baum sind in Kategorien die wichtigsten Einstellungen von PHP-Desktop vorhanden. Das wichtigste für den Anfang ist der Teil web_server. Wichtig ist vorab zu verstehen, wie das ganze arbeitet. Die CGI-Implementierung ist dazu gedacht, einen CGI-Interpreter mit der Datei des Scripts zu versorgen. Folglich kann PHP-Desktop nur eine CGI-Anwendung verwenden. Um nun auf unterschiedliche Routinen innerhalb unserer CGI zu zugreifen, benötigen wir einen Entry-Point, der als Datei vorliegen muss. Ich habe mich für INI-Datein entschieden. So sieht eine Konfiguration aus:
Code: Alles auswählen
"web_server": {
"listen_on": ["127.0.0.1", 0],
"www_directory": "frontend",
"index_files": ["index.html,cgi.ini"],
"cgi_interpreter": "backend/run.exe",
"cgi_extensions": ["ini"],
"cgi_temp_dir": "",
"404_handler": "",
"hide_files": []
},
Der erste Test
Für den ersten Test legen wir im Ordner Frontend die Datei cgi.ini an und lassen diese erstmal leer. Dann nehmen wir uns das CGI-Example von Purebasic %PureBasic%\Examples\Sources\CGI.pb, kompilieren diese als run.exe in den Backend-Ordner von PHP-Desktop. Wenn ihr nun PHPDesktop über phpdesktop-chrome.exe startet, dann öffnet sich zuerst die Debug-Konsole und nach einem kurzen Moment ploppt ein Fenster auf, indem dann folgender Inhalt zu sehen ist:
Code: Alles auswählen
AUTH_TYPE:
CONTENT_LENGTH:
Content-type:
DOCUMENT_ROOT: D:\TempTools\phpdesktop-chrome-57.0-rc-php-7.1.3\frontend
GATEWAY_INTERFACE: CGI/1.1
PATH_INFO:
PATH_TRANSLATED: D:\TempTools\phpdesktop-chrome-57.0-rc-php-7.1.3\frontend\cgi.ini
QUERY_STRING:
REMOTE_ADDR: 127.0.0.1
REMOTE_HOST:
REMOTE_IDENT:
REMOTE_PORT: 52367
REMOTE_USER:
REQUEST_URI: /
REQUEST_METHOD: GET
SCRIPT_NAME: /cgi.ini
SCRIPT_FILENAME: D:\TempTools\phpdesktop-chrome-57.0-rc-php-7.1.3\frontend\cgi.ini
SERVER_ADMIN:
SERVER_NAME: 127.0.0.1
SERVER_PORT: 52366
SERVER_PROTOCOL: HTTP/1.1
SERVER_SIGNATURE:
SERVER_SOFTWARE: Mongoose/3.9c
HTTP_ACCEPT: text/html,application/xhtml+xml,application/xml;q=0.9,image/webp,*/*;q=0.8
HTTP_ACCEPT_ENCODING: gzip, deflate
HTTP_ACCEPT_LANGUAGE: en-US,en;q=0.8
HTTP_COOKIE:
HTTP_FORWARDED:
HTTP_HOST: 127.0.0.1:52366
HTTP_PRAGMA:
HTTP_REFERER:
HTTP_USER_AGENT: Mozilla/5.0 (Windows NT 6.2; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/57.0.2987.98 Safari/537.36
HINWEIS: Der erste Start dauert immer etwas länger, weil PHP-Desktop die Caches noch anlegt. Jeder weitere Start geht deutlich schneller !!!
Nachwort
Ich versuche weitere Tutorials zu schreiben. Vielleicht komme ich auch heute noch dazu, eines zu schreiben. Aber der Anfang ist schonmal gemacht. Ihr könnt ja schon einmal ein bisschen rumprobieren.
Folgetutorials:
Routing: http://www.purebasic.fr/german/viewtopi ... =9&t=30555