Seite 1 von 2

PureBasic als Ersatz für PHP / Perl

Verfasst: 15.01.2009 17:03
von AND51
Hallo!

Seit gestern beschäftigt mich der Gedanke, meine Webpräsenz nicht mit Skriptsprachen wie Perl oder PHP zu gestalten, sondern mit PureBasic.

Darauf gekommen bin ich durch die Threads http://www.purebasic.fr/english/viewtop ... hlight=cgi und http://www.purebasic.fr/english/viewtop ... hlight=cgi.

Nun frage ich mich, ob man PureBasic bzw. den Kompiler nicht in den Webserver (Apache) integrieren oder zumindest anweisen kann, eine *.pb-Datei beim Aufruf kompilieren und die Ausgabe an den Browser weiterleiten zu lassen.
Meint ihr, das geht? Die Möglichkeit, Umgebungsvariablen, stdin und stdout mit GetEnvirenmentVariable(), PrintN() und ReadConsoleData() auslesen zu können, würden ja genügen, um eine Ausgabe an den Browser zu schreiben.
Das ganz würd ich gern auf meinem Webhostingpaket bei STRATO realisieren.

Was sagt ihr dazu?

Verfasst: 15.01.2009 17:19
von Bisonte
die Idee ist gar nicht so schlecht... aber wenn die .pb Datei kompiliert ist, wird sie sich wohl auch nicht starten lassen, da die meisten Anbieter keine Ausführung von .exe Dateien zulassen.

Und wenn es nur ein reiner "Space" Hoster ist, der MySQL und PHP evt. noch CGI anbietet, dann klappts sowieso nicht, da dort sowieso keine Dateien gestartet werden können.

Oder hab ich grad den Sinn der Anfrage verfehlt ? Mist ich muss ins Bett ;)

Verfasst: 15.01.2009 17:28
von AND51
Naja, man kann entweder einen Programmcode kompilieren und dann das Kompilat ausführen lassen; allerdings wird bei jeder noch so kleinen Änderung des Quellcodes eine erneute Kompilierung fällig.

Genau das möchte ich ja verhinden, indem der Webserver (meist Apache) den Kompiler aufruft (wenn der nicht sowieso schon läuft, wie es die PHP- und Perl-Interpreter tun). Der Kompiler verrichtet seine Arbeit und das Programm schreibt seine Ausgabe z. B. per PrintN(). Aber die Frage wäre beispielsweise: Wie kommt diese Ausgabe zum Webserver, damit er sie an den Brwoser weitergeben kann? Über den Kompiler, Debugger oder wie?

Ich habe gelesen, dass es spezielle Module für Apache gibt, zum Beispiel mod_phyton. Vielleicht kann man ja auch ein Modul namens mod_purebasic erstellen?

Und wie müsste das genau funktionieren, den Kompiler als Interpreter in den Apache-Webserver einzutragen? Das dürfte wohl am ehesten über http.conf oder .htaccess gehen.

Mal schauen, was hier noch schönes gepostet wird.
Bin schon drauf und dran, den STRATO-Kundenservice zu Bemühen, aber bevor ich da auflaufe, wollt ich hier erstmal euer Wissen anzapfen.

Verfasst: 22.04.2009 21:40
von AND51
Da bin ich wieder, mit (m)einem virtuellen Server an meiner Seite! Kein simpler Webspace mehr.

Jetzt will ich aber endlich PureBasic für meine Webpräsenz nutzen, wie kriege ich das hin? Auf meinem virtuellen Server kann ich alles laufen lassen, was ich will.
Ich hab sogar die komplette IDE drauf und kann per Kommandozeile oder eben der IDE kompilieren.


Ich will alle .pb-Dateien mit Apache verknüpfen: Bei Aufruf soll diese kompiliert und die Ausgabe an den Webbrowser weitergereicht werden. Das wird per Konsole gemacht.
Aber wie verknüpfe ich alle .pb-Dateien mit dem Kompiler?

Mit der Shebang-Zeile rumzuspielen

Code: Alles auswählen

#!/purebasic/compilers/pbcompiler

OpenConsole()
   PrintN("Content-Type: text/html")
   PrintN("")
   Print("Hallo Welt")
CloseConsole()
hat nichts gebracht...

Nun will ich es per httpd.conf versuchen; da gibts doch dieses AddHandler und ScriptAlias und wie sie alle heißen...
Könnt ihr mir dabei helfen?

Verfasst: 23.04.2009 10:49
von stbi
AND51 hat geschrieben:... indem der Webserver (meist Apache) den Kompiler aufruft (wenn der nicht sowieso schon läuft, wie es die PHP- und Perl-Interpreter tun).
Aua. Auch PHP- und Perl-Interpreter werden bei Bedarf aufgerufen, arbeiten das Script ab und verenden dann wieder.

Den PB-Compiler bei jedem Scriptaufruf zu bemühen, um ein Executable zu erstellen, halte ich persönlich für Unfug. Erstelle Dein PB-Programm, mach ein Executable draus und lege es ins cgi-bin-Verzeichnis (oder wohin auch immer, kommt drauf an wie Dein Apache konfiguriert ist).

Schau auch mal ins englische Forum und suche nach CGI, da sind ein paar gute Beispielcodes, z.B. hier http://www.purebasic.fr/english/viewtopic.php?t=25057

Verfasst: 23.04.2009 19:40
von AND51
Hallo stbi,

Danke für deine Tipps. Ich glaube, ich verdanke dir meinen heutigen Durchbruch! DANKE!! :allright:

Derzeitige Situation:
Meine Experiemnte mit der Shebang-Zeile liefen schon in die richtige Richtung. Heute habe ich herausgefunden, dass das Beispielskript aus meinem vorigen Post gar keine Zugriffsrechte auf einen Ordner außerhalb des DocumentRoot hat. Abhilfe: Den kompletten PB-Ordner mit in den Webspace-Ordner packen.
Es funktioniert!


Jetzt muss ich nur noch herausfinden, wie ein CGI-Skript auf einen Ordner bzw. auf eine Anwendung zugriefen kann, die außerhalb des DocumentRoot (httpdocs) liegt. Falls jemand da ein Tipp hat, wäre ich dankbar, bis dahin versuch ichs noch mal allein.


> Den PB-Compiler bei jedem Scriptaufruf zu bemühen, um ein Executable zu erstellen, halte ich persönlich für Unfug
Das stimmt. Aber ich mache diesen ganzen Kram nur deswegen, weil ich ja meine komplette Webseite in PB schreiben will. Dafür will ich aber die Quellcodes jederzeit wie eine Textdatei ändern können. Ich muss also den PB-Compiler quasi als Interpreter missbrauchen.

Ohne ständige Neukompilation des Sources geht es also nicht. Oder doch?

Klar. Da gibt es doch die /STANDBY Direktive für den Kompiler. Damit bleibt der Kompiler ständig an und wartet auf Befehle. Die Direktive werde ich mir als nächstes ansehen.
Darüber hinaus habe ich noch eine Idee, wie ich den Performanceaufwand noch weiter redurzieren kann, dazu aber mehr, wenn ich soweit bin.


Über die Effzienz "Interpreter vs. PB-Compiler" lässt sich streiten.
Ein Interpreter muss das Skript jedes Mal neu interpretieren: Includes und Module einbinden, Syntaxcheck, Programmausführung. Ein Compiler dagegen kompiliert nur ein Mal und braucht das Kompilat nur immer wieder auf Anforderung ausführen.
mehr darüber auf dieser Webseite, die genau das beschreibt, was ich mit PureBasic auf meinem virtuellen Server erreichen will.

Verfasst: 23.04.2009 20:05
von TomS
Du musst im Confixx, oder was auch immer du da für ne Software draufhast einstellen, dass CGI-Programme auch außerhalb dieses Ordners ausgeführt werden dürfen. Dann sollten eigentlich auch die Zugriffsrechte auf alle Ordner ausgeweitet werden.

Verfasst: 23.04.2009 20:31
von AND51
Das dürfte schwer bis unmöglich werden.
Ich benutze Plesk statt Confixx und dort kann man Kunden erstellen, denen die Domains zugewiesen werden.
Zugriffsrechte für jeden global auszuweiten dürfte somit ein enormes Sicherheitsrisiko darstellen - noch arbeite ich zwar allein mit 3 getrennten Kunden auf meinem Server, aber vielleicht will ich ja in Zukunft jemandem Zugriff gewähren, dem ich nur ein eingeschränktes Kundenkonto zuweisen will.

In Plsek gibt es außerdem nur allgemeine Einstellungen z. B. "CGI-Unterstützung". Wenn aktiv, können CGI-Skripte ausgeführt werden.

Verfasst: 24.04.2009 09:37
von stbi
AND51 hat geschrieben:Jetzt muss ich nur noch herausfinden, wie ein CGI-Skript auf einen Ordner bzw. auf eine Anwendung zugriefen kann, die außerhalb des DocumentRoot (httpdocs) liegt.
Leg den ganzen Krempel in ein Verzeichnis, z.B. /opt/pb. Dann erstelle einen Link unter Deinem wwwroot, der auf dieses Verzeichnis verweist. Ich hab das hier so für eine in PHP realisierte Webanwendung, dass unter wwwroot nur fast leere PHP-Skripte liegen, die sich den eigentlichen Code als Includes über diesen Link ziehen.

Aber nochmal: den PB-Compiler als Quasi-Interpreter zu missbrauchen ist erstens ein schwerer Verstoß gegen das Compilerschutzgesetz (tm) und wird zweitens durch den extrem erhöhten Resourcenverbrauch und den daraus resultierenden CO2-Ausstoß die Pole vollends zum Abschmelzen bringen. :(

Mach doch nen cron-Job, der alle paar Minuten checkt, ob .pb-Dateien geändert wurden und diese dann bei Bedarf compiliert.

Verfasst: 24.04.2009 13:02
von AND51
Hallo stbi,

Ich habe festgestellt, dass mein Account 'wwwrun' unter Umständen nicht auf '/purebasic' zugreifen kann.
Der Besitzer von '/purebasic' soll 'purebasic' sein und die chomod-Rechte dieses Ordners sollen 700 oder bestenfalls 750 oder 770 sein, finde ich sicherer.

Nun habe ich aber ein Problem: Ich weiß nicht, unter welchem Benutzer ein CGI-Skript ausgeführt wird, da Plsek die Domain 'and51.de' dem Besitzer 'and51' zugewiesen hat.
Mit anderen Worten: Werden CGI-Skripte nun unter 'and51' oder 'wwwrun' ausgeführt? Wie finde ich das raus? Dazu kommt: Ich möchte das Konzept ggf. auch auf dem selben Server unter anderen Domains benutzen, diese könnten allerdings auch wiederum anderen Benutzern zugeordnet sein.


Und unter welchem Benutzernamen wird dann der Compiler ausgeführt, wenn 'wwwrun' ihn aufruft und 'purebasic' der Besitzer ist? Und unter welchem Namen wird dann erst das Kompilat ausgeführt? Wie Habe vergeblich versucht, das herauszufinden, denn der Kompiliervorgang klappt, das Executable wird auch korrekt in '/tmp/' erstellt, aber ausgeführt werden kann (darf?) es nicht.


Frage: Wie kriege ich es hin, dass egal welcher Benutzer auf '/purebasic' zugreifen und etwas kompilieren und ausführen kann?

Geht das mit deinem Link? Und was ist '/opt/pb' für ein Verzeichnis? PureBasic liegt momentan in '/purebasic' und von mir aus kann's auch da bleiben.

> schwerer Verstoß gegen das Compilerschutzgesetz
Das war doch nur 'n Joke, oder?
Laut Lizenz darf ich "PureBasic auf jedem mir zur Verfügung stehenden Computer nutzen".

> Mach doch nen cron-Job, der alle paar Minuten checkt, ob .pb-Dateien geändert wurden und diese dann bei Bedarf compiliert
Ja sowas habe ich auch in Zukunft vor. Falls es kein Cronjob wird, damit muss ich erst noch Erfahrung sammeln, wird ein selbstgeschriebenes Executable zwischengeschaltet, dass wiederholte und unnötige Kompilierungen verhindert.


Ach ja und bei alle dem hier natürlich ein großes DANKESCHÖN für deine Hilfe! :allright: