PHP Wie funktioniert PHP?

RezaScript

Newbie
Registriert
Okt. 2018
Beiträge
7
Hallo,

ich habe eine Mini-Programmierungsprache entwickelt. Lokal funktioniert sie bestens, sie sollte aber eine Server Side Scripting Language sein. Im Prinzip sollte sie GENAU GLEICH wie PHP funktionieren.

Die Implementierungsprache ist C++. Meine eigene Website, welche ich mit C++ entwickelt habe, bringe ich auf XAMP zum Laufen und somit würde ich auch meine eigene Programmiersprache auf XAMP zum Laufen bringen, WENN das Programm vorher kompiliert wird!

Genau so ist es auch lokal. Das Programm bringe ich erst zum Laufen, wenn es vorher kompiliert wurde.

Momentan sieht es bei mir so aus:

Die "Text"-Datei test.dy wird geparst und somit wird die Datei test.exe generiert.

Mich interessiert sehr wie PHP funktioniert. Ich rufe also die URL meine-website.de/test.php auf. Die "Text"-Datei "test.php" wird also von php.exe geparst. Es wird aber keine neue Datei wie bei mir generiert. Wann kommt denn PHP WIRKLICH zum Einsatz? Denn test.php ist ja nichts weiter als eine Text-Datei?! Ich vermute, dass PHP IMMER und bei JEDEM Aufruf im Browser zum Einsatz kommt und überprüft dann nur, welche Datei aufgerufen wurde und die Datei wird dann geparst. Wenn das wirklicht so ist, wie bekomme ich mein eigenes Programm IMMER zum Laufen?

Ich möchte schlussendlich, dass mein eigenes Programm kompiliert wird aber der Code, welcher von meinem Programm geparst wird, sollte nur interpretiert werden.
 
  • Gefällt mir
Reaktionen: r15ch13
Das ist eigentlich einfach.
Lies https://help.superhosting.bg/en/cgi-common-gateway-interface-fastcgi.html
Das interface heißt CGI. Der Server wird so konfiguriert, dass beim laden von .dy Dateien dein parser.exe über CGI interface aufgerufen wird. Über stdin wird vom Webserver die test.dy da reingepumpt, dein parser parst den code, führt den aus und lässt sämtliche Augaben in stdout ausgeben. Die Ausgaben am stdout schickt der Webserver dann als antwort an den Browser.
Fange mit CGI an. Für Performance kannst dann bei Bedarf auf FastCGI gehen.

Der standard PHP parser php.exe parst einfach alles was über stdin reinkommt on-the-fly. Er guckt nach <?php ... ?> Blöckhen und interpretiert sie. Es gibt aber auch parser die den code vorkompilieren können. Die sog. "Acceleratoren" kompilieren den code vor und halten es im cache bereit. Beim nächsten Aufrufe muss der Code nicht mehr geparst werden, der bytecode wird direkt ausgefüht. Due siehst diese Binärfiles meist nicht weil sie sich in irgendwelchen TEMP Verzeichnissen verstecken.

Das Vorkompilieren kann den Server auch sicherer machen. Du kannst z.B. dein code lokal vorkompilieren und nur die binaries auf den Server hochladen. Die Hacker sehen deine Code nicht mehr, haben keine Ahnung wie deine Software funktioniert und haben keine Chance ihren Schadcode einzuschleusen. Die größte Sicherheitslücke bei PHP ist ja dass die .php files per upload sich selbst updaten können und schwups-di-wups hat der Hacker seinen eigenen code hochgeladen und ausgeführt. Ohne deinen .dy compiler und binary runner (welchen nur du hast) hat der hacker keine chance. Naja ein richtiger hacker wird schon seine Wege finden, aber die meisten Möchte-gern-Hacker im Inet sind nur Script-Kiddies.
 
Zuletzt bearbeitet:
  • Gefällt mir
Reaktionen: r15ch13, Scholle1309 und RezaScript
yurij, vielen Dank für deine Antwort, klingt sehr interessant!

Ich hatte zuerst versucht meine eigene Website, welche auf C++ basiert mit CGI zum Laufen zu bringen. Danach habe ich gemerkt, dass ich auch in der Config-Datei von xamp auch einfach nur .exe eingeben kann, somit wäre CGI nicht unbedingt notwendig gewesen. Genau so wollte ich auch meinen Parser zum Laufen bringen aber gut, jetzt verstehe ich den Sinn von CGI. Danke!
 
Der Aufruf der .exe von der du sprichst und die du im XAMPP eingibst erfolgt bereits über CGI interface.

Es gibt bei PHP zwei binaries:
http://php.net/manual/de/features.commandline.introduction.php

php.exe = CLI (command line interface ) version, also zum direkten aufruf stdin -> php.exe -> stdout auf der Konsole. Dieses interface ist hauptsächlich für Aufrufe auf der Konsole gedacht.

php-cgi.exe = CGI version, ein ähnlicher interface, dass URL Parameter über Umgebungsvariablen weitergibt, aber auch stdin/stdout verwendet. Kleine Beschreibung dazu hier: https://stackoverflow.com/a/2089297
Das ist die Version die man für Webserveranbindung nimmt.

Verwende also den CGI interface und trage im xampp dein parser-cgi.exe

Wie funktioniert CGI: https://en.wikipedia.org/wiki/Common_Gateway_Interface
Die spezifikation dazu ist in der RFC 3875: https://tools.ietf.org/html/rfc3875.html
 
Zuletzt bearbeitet:
Zurück
Oben