Seite 3 von 7

Verfasst: 08.05.2009 17:04
von X360 Andy
Wenn ich Sonntag mal ein bissel Zeit habe teste ich das ganze mal ausführlich und gebe meine Meinung ab :allright:

Damit lassen sich aber bestimmt paar sachen umsetzen die mir so vorschweben .... mal schauen.

Danke aber schon mal für deine Mühen.

Verfasst: 08.05.2009 17:22
von AND51
> aufwändigeren Dokumenten wird es mühselig
> Müsste man auch escapen können
Ja, das ist leider wahr. Das ist eben so wenn man mit PureBasic arbeiten will. Wenn du das escapen willst, müsstest du entweder eine extra Routine in den Interpreter einbauen, die Zeile für Zeile parst; oder du müsstest zwischen Interpreter und Kompiler eine zusätzliche Anwendung schalten, die parst.
Letzteres ist natürlich Blödsinn, denn es kostet viel mehr Performance, als wenn der Interpreter das Parsen übernimmt.
Denn im gibt es eine Stelle, an der ja der Source-Code verändert wird: Da, wo die erste Zeile rausgefiltert wird. Diese Stelle könnte man erweitern, da die Datei ja sowieso schon geöffnet ist.

> Wenn ich Sonntag mal ein bissel Zeit habe teste ich das ganze mal ausführlich und gebe meine Meinung ab
Cool, danke vielmals! :allright: Was schweben dir eigentlich so für Sachen vor? Das würde mich interessieren, vielleicht habe ich solche Ideen ja noch nicht. Dann könnt ich mich ja auch von dir inspirieren lassen und außerdem bei der weiteren Entwicklung des Interpreters deine Vorstellungen mit einfließen lassen.


@ Volker Schmid:
Wie sieht's denn mit deinem "inline-html" aus? Ist der gezeigte Weg für dich auch okay? Wenn du es unbedingt PHP-like haben musst, kann ich dir mal ein Blick auf SSI (Server Side Includes) empfehlen. Das sind stinknormale HTML-Dokumente, die aber serverseitig von Apache geparst werden. Es gibt 'spezielle' HTML-Tags, zum Beispiel

Code: Alles auswählen

<html>
<head>
<title>Eine SHTML Seite (SSI)</title>
</head>
<body>
Sie sind Besucher Nummer <!--#exec cgi="pfad/counter.pb" --> auf dieser Seite
</body>
</html>
Das exec-Tag ist natürlich kein echtes HTML-Tag, sondern wird beim Parsen von Apache ersetzt. Es wird nämlich das angegebene CGI-Skript ausgeführt (im Beispiel eine PureBasic-Datei, die dank es PB Interpreters läuft; kann aber auch eine PHP-Datei sein). Die Ausgabe des Skriptes wird dann an dieser Stelle eingefügt.

HTML-Dateien, die SSI enthalten, haben in der Regel die Endung ".shtml". Ich habe SSI noch nie benutzt, aber seit ich meinen PB Interpreter habe, werde ich mir das mal näher anschauen.

Vorteil: Man kann HTML-Dokumente wie in PHP mit Anweisungen spicken, ist also Syntaxfreundlicher (wegen den ganzen Chr(34), wie angesprochen).
Nachteil: Bei jedem exec-Tag müsste Apache glaube ich eine separate Instanz des Perl-, PHP- oder PB-Interpreters starten, um das Skript an der Stelle parsen zu können.

Verfasst: 08.05.2009 23:59
von Vermilion
Da können dann aber ungeheure Zeilen entstehen, wenn man für Parameterreiche Tags einen Haufen an Attributen definieren möchte. :| Dass das dann kein PureBasic mehr ist, weiß ich.

Verfasst: 09.05.2009 05:09
von AND51
Was meinste mit "ungeheure Zeilen"? Die SSI-Methode?
Die Ideen von wegen SSI etc. sind alles nur Zusätze. Da habe ich beim Schreiben des PB Interpreters noch gar nicht dran gedacht. Ursprünglich wollte ich lediglich ganze HTML-Seiten in PB coden. Aber es ist doch umso besser, je mehr Wege es gibt, wie man das erreichen kann. Da hat Volker Schmid ja jetzt die Qual der Wahl. :lol:

Verfasst: 09.05.2009 10:08
von Vermilion

Code: Alles auswählen

<area shape="rect" coords="540, 0, 630, 40" href="contact.php" alt="Kontakt" title="Kontakt" />
Im PureBasic Interpreter:

Code: Alles auswählen

PrintN("<area shape=" + Chr(34) + "rect" + Chr(34) + " coords=" + Chr(34) + "540, 0, 630, 40" + Chr(34) + " href=" + Chr(34) + "contact.php" + Chr(34) + " alt=" + Chr(34) + "Kontakt" + Chr(34) + " title=" + Chr(34) + "Kontakt" + Chr(34) + " />")
Das meine ich mit ungeheuren Zeilen, einen ziemlich "breiten" Quelltext.

Verfasst: 09.05.2009 16:16
von AND51
Achso. Ja ist klar, das passiert, wenn man viele Anführungszeichen braucht. PureBasic ist von der Syntax her eben nicht für solche Aufgaben gedacht.

Da hast du folgende Möglichkeiten, um das Chr(34) zu vermeiden:
-Eigenen Preparser bauen
-SSI verwenden
-wenn möglich auf Anf.zeichen verzichten (nicht HTML konform)
-Dokument in EXE einbinden, zur Laufzeit einlesen und dynamischen Inhalt mit ReplaceString() einsetzen

Verfasst: 09.05.2009 16:17
von cxAlex
Oder #DQuote verwenden...

Verfasst: 10.05.2009 20:51
von X360 Andy
Sry für die späte Antwort

Bin heute leider nicht dazu gekommen :cry:

Aber ich hätte eine frage , und zwar kann ich dann eigentlich Computer Daten überprüfen ?

Z.b den WINDOWS Benutzer Name ?
Weil die exe is ja nur im Cache und ist ja für Linux ....

Ich hätte verschiedene Ideen für Generatoren gehabt, z.b Signaturen oder Umrechnungen...

Verfasst: 10.05.2009 22:55
von AND51
Hey, nicht schlimm. Lass dir ruhig Zeit mit dem Testen.
Entschuldige, aber ich verstehe überhaupt nicht, was du meinst.

> kann ich dann eigentlich Computer Daten überprüfen
Welche Computer Daten? In deinen CGI-Skripten, die ja dann in PureBasic geschrieben sind, kannst du nach Herzenslust alle Befehle benutzen, die du willst. Also auch API und so weiter. Damit sollte das möglich sein. Außerden kannst du ja noch die Umgebungsvariablen abfragen:

Code: Alles auswählen

Debug GetEnvironmentVariable("USER")
Musst mal gucken, ob's USERNAME oder nur USER heißt. Dies funktioniert unter Windows und Linux.

> die exe is ja nur im Cache
In welchem Cache? Den Sourcecode für den PB Interpreter gibt's ja hier im Thread. Den nimmst du und kompilierst ihn auf Windows, wenn du den Interpreter auf einem Windows-Server laufen lassen möchtest. Kompiliere ihn auf Linux, wenn du ihn auf einem Linux/Unix-Server laufen lassen möchtest. Solltest du das nicht hinbekommen, den SOurcecode per Kommandozeile z. B. auf Linux zu kompilieren, kann ich das auch gern für dich tun.

> und ist ja für Linux
Jein. In erster Linie ist er für Linux geschrieben. Aber du kannst ihn auch auf Windows einsetzen, denn der Sourcecode istr portabel. Es wird keine API benutzt, das macht das Umschreiben besonders einfach: Das einzige, was du ändern musst, sind Sachen wie Frontslahses / durch Backslashes \ in Pfadangaben zu ersetzen, wenn du den Interpreter auf Windows benutzen möchtest. Ich habe den Quellcode so gut kommentiert, dass es mir vorkommt, als halte ich eine Nachtlektüre in den Händen: So viel interessantes Zeugs zum Lesen... Wusel dich einfach von oben nach unten durch und änder hier und da was für Windows, das dürfte dank der guten Kommentierung sehr einfach sein. Solltest du an einigen Stellen sogar Ideen haben, wie man den Vorgang schneller machen kann, dann immer her damit. :)

> verschiedene Ideen für Generatoren gehabt, z.b Signaturen oder Umrechnungen
Kein Problem! Falls du dazu Eingabedaten verarbeiten musst, kannst du diese wie folgt abfragen:

Wenn die Daten mit der POST-Methode gesendet wurden:

Code: Alles auswählen

Define length=Val(GetEnvironmentVariable("CONTENT_LENGTH"))

If length
   Define *buffer=AllocateMemory(length)
   If *buffer
      ReadConsoleData(*buffer, length)
   Else
      ; Buffer kann nicht allokiert werden
   EndIf
Else
   ; Es gibt nichts einzulesen
EndIf
Wenn die Daten mit GET gesendet wurden (das sind die Daten, die hinter einem Fragezeichen an die URL gehängt wurden), dann ist die Umgebungsvariable QUERY_STRING verfügbar:

Code: Alles auswählen

Define qs.s=GetEnvironmentVariable("QUERY_STRING")
Ich hoffe, ich konnte deine Fragen beantworten.

Verfasst: 10.05.2009 23:21
von X360 Andy
Also noch mal ausführlich, hab das grad da oben nur so hingerotzt..

Ich kann also WIN API anwenden auf dem Linux Server ?
Ich könnte also auf einem Linux Server die Umgebungsvariablen vom Windows User rauskrigen ?

Die Exe wird auf Linux Kompiliert und wird auf einem Linux Server aufgerufen.

Der User hat Windows
Ich kann also

Code: Alles auswählen

String$ = Space(255)
GetEnvironmentVariable_("USERNAME",@String$,Len(String$))
In die Website einbauen und es würde mir meinen Namen anzeigen ?

Das wäre ja Genial :shock: (Wieso hab ich das gefühl das ich was falsch verstanden habe ? )

Das mit Cache hab ich dann wohl falsch verstanden.

Ich würde mich ja über ein richtiges Beispiel freuen für GET und Post freuen.
Wie z.b sowas in PHP , da mir das noch nicht ganz einleutet wie ich das hier jetzt machen soll.

Code: Alles auswählen

<?php
$seite = $_GET["seite"];

if($seite=="index")
   {
   echo "Indexseite";
   }

if($seite=="start")
   {
   echo "Startseite";
   }
?>