PureBasic als Ersatz für PHP / Perl

Für allgemeine Fragen zur Programmierung mit PureBasic.
Benutzeravatar
AND51
Beiträge: 5220
Registriert: 01.10.2005 13:15

PureBasic als Ersatz für PHP / Perl

Beitrag 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?
PB 4.30

Code: Alles auswählen

Macro Happy
 ;-)
EndMacro

Happy End
Benutzeravatar
Bisonte
Beiträge: 2465
Registriert: 01.04.2007 20:18

Beitrag 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 ;)
PureBasic 6.21 (Windows x86/x64) | Windows11 Pro x64 | AsRock B850 Steel Legend Wifi | R7 9800x3D | 64GB RAM | GeForce RTX 5080 | ThermaltakeView 270 TG ARGB | build by vannicom​​
Benutzeravatar
AND51
Beiträge: 5220
Registriert: 01.10.2005 13:15

Beitrag 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.
PB 4.30

Code: Alles auswählen

Macro Happy
 ;-)
EndMacro

Happy End
Benutzeravatar
AND51
Beiträge: 5220
Registriert: 01.10.2005 13:15

Beitrag 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?
PB 4.30

Code: Alles auswählen

Macro Happy
 ;-)
EndMacro

Happy End
Benutzeravatar
stbi
Beiträge: 685
Registriert: 31.08.2004 15:39
Wohnort: Cleverly Hills

Beitrag 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
PB 4.02 XP Pro SP2 "Der Code ist willig, aber der Prozessor ist schwach."

Es gibt keine Vista-Witze. Es ist alles wahr!
Benutzeravatar
AND51
Beiträge: 5220
Registriert: 01.10.2005 13:15

Beitrag 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.
PB 4.30

Code: Alles auswählen

Macro Happy
 ;-)
EndMacro

Happy End
Benutzeravatar
TomS
Beiträge: 1508
Registriert: 23.12.2005 12:41
Wohnort: München

Beitrag 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.
Benutzeravatar
AND51
Beiträge: 5220
Registriert: 01.10.2005 13:15

Beitrag 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.
PB 4.30

Code: Alles auswählen

Macro Happy
 ;-)
EndMacro

Happy End
Benutzeravatar
stbi
Beiträge: 685
Registriert: 31.08.2004 15:39
Wohnort: Cleverly Hills

Beitrag 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.
PB 4.02 XP Pro SP2 "Der Code ist willig, aber der Prozessor ist schwach."

Es gibt keine Vista-Witze. Es ist alles wahr!
Benutzeravatar
AND51
Beiträge: 5220
Registriert: 01.10.2005 13:15

Beitrag 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:
PB 4.30

Code: Alles auswählen

Macro Happy
 ;-)
EndMacro

Happy End
Antworten