Autor |
Beitrag |
matze.de
Beiträge: 576
Win95, Win98 SE, WinXp Prof SP2
D7P, D8P, FPC2.0
|
Verfasst: Fr 10.06.05 17:53
Hi,
Ich werde nun versuchen euch zu erklären, wie man Daten mittels HTTP-Post an einen Webserver senden kann und wie der Server diese dann verarbeiten kann.
Als erstes benötigen wir dazu ein PHP-Skript auf dem Webserver, welches unsere Daten empfängt und dann auch verarbeitet.
Fangen wir mit dem empfangen der Post Daten an:
Quelltext 1: 2: 3: 4:
| <?php //POST Daten ermitteln und in eine Variable(hier in einem Array) speichern $MyData[0] = $_POST["code"]; // Mit $_POST fragt man die Post-Daten ab. ?> |
Im Grunde hat das Script die gesendeten Daten nun schon in einer Variable gespeichert, doch diese verfallen wieder bei Scriptende, daher wollen wir die Daten in einer *.txt Datei speichern. Wir ergänzen unser Script nun um ein paar weitere Zeilen:
1: 2: 3: 4: 5: 6: 7: 8: 9: 10: 11: 12: 13: 14: 15: 16: 17: 18: 19: 20: 21: 22: 23: 24: 25: 26: 27: 28: 29: 30: 31:
| <?php //Datei $File = getcwd()."/code.txt"; // Datei liegt immer im selben verzeichnis wie das PHP-Skript.
//POST Daten ermitteln und in eine Variable speichern $MyData[0] = $_POST["code"]; // Mit $_POST fragt man die Post-Daten ab.
Function write($Datei, $Daten){ $Error = False; // Unsere ErrorVariable :) If (!is_file($Datei)){ // Wenn die Datei nicht exisitiert -> erstellen $FilePointer = @fopen($Datei, "w+"); @fclose($FilePointer); @chmod($Datei, 0777); } If(!is_writeable($Datei)){ // Wenn die Datei nicht schreibbar -> schreibbar machen If(!@chmod($Datei, 0777)){ $Error = True; } } If(!$Error){ $FilePointer = @fopen($Datei, "w"); // Filepointer setzen und Datei öffnen im "Write Modus"("w")
If(!$FilePointer) $Error = True; // FilePointer auf Gültigkeit prüfen If(!@flock($FilePointer, 2)) $Error = True; // Wir holen uns eine exklusive, nur schreibende Verriegelung If(!@fwrite($FilePointer, $Daten)) $Error = True; // Wir schreiben in die Datei die Daten If(!@flock($FilePointer, 3)) $Error = True; // Wir geben unsere Verriegelung wieder frei If(!@fclose($FilePointer)) $Error = True; // Wir schließen die Datei wieder } Return !$Error; } |
So nun haben wir auch schon die Funktion fertig, um in eine Datei zu schreiben.
Da ja nun nicht umbedingt jeder Zugriff auf dieses Scriopt haben soll, bauen wir nun noch einen Passwortschutz ein. Wir basteln uns nun erstmal eine Funktion um die Gültigkeit des Logins zu ermitteln:
Quelltext 1: 2: 3: 4: 5: 6: 7: 8: 9: 10: 11: 12: 13: 14: 15: 16:
| //Benutzer Setzen $Users[0] = "Testperson"; // Nehmen hierzu ein Array, falls jemand mehrere Benutzer anlegen möchte. $Pws[0] = "123"; //Besser wäre hier natürlich ein Hash Wert(Am einfachsten mit md5();)
Function is_login($User, $Password){ Global $Users, $Pws; For($I = 0; $I <= (Count($Users)-1); $I++){ If(($User == $Users[$I]) && ($Password == $Pws[$I])) { $Login = True; Break; } Else { $Login = False; } } Return $Login; } // Diese Variante von Christian S. ist eleganter als die obere, macht aber im Grunde das Selbe, nur das wahrscheinlich etwas schneller ;) Function is_login($User, $Password){ Global $Users, $Pws; Return ((($I = array_search($User, $Users)) !== False) && ($Pws[$I] == $Password)); } |
So nun sieht der code schon so aus:
1: 2: 3: 4: 5: 6: 7: 8: 9: 10: 11: 12: 13: 14: 15: 16: 17: 18: 19: 20: 21: 22: 23: 24: 25: 26: 27: 28: 29: 30: 31: 32: 33: 34: 35: 36: 37: 38: 39: 40: 41: 42: 43: 44: 45: 46:
| <?php //Datei $File = getcwd()."/code.txt"; // Datei liegt immer im selben verzeichnis wie das PHP-Skript.
//Benutzer Setzen
$Users[0] = "Testperson"; // Nehmen hierzu ein Array, falls jemand mehrere Benutzer anlegen möchte. $Pws[0] = "123"; //Besser wäre hier natürlich ein Hash Wert(Am einfachsten mit md5();)
//POST Daten ermitteln und in eine Variable speichern $MyData[0] = $_POST["code"]; // Mit $_POST fragt man die Post-Daten ab. $MyData[1] = $_POST["user"]; // Diese Zeile muss ergänzt werden, wegen unserer Benutzerabfrage. $MyData[2] = $_POST["pw"]; // Diese Zeile muss ergänzt werden, wegen unserer Benutzerabfrage.
Function is_login($User, $Password){ Global $Users, $Pws; Return ((($I = array_search($User, $Users)) !== False) && ($Pws[$I] == $Password)); }
Function write($Datei, $Daten, $User, $Pw){// Diese Zeile muss ergänzt werden, wegen unserer Benutzerabfrage. $Error = False; //Unsere ErrorVariable :) If(is_login($User, $Pw)){ If (!is_file($Datei)){ // Wenn die Datei nicht exisitiert -> erstellen $FilePointer = @fopen($Datei, "w+"); @fclose($FilePointer); @chmod($Datei, 0777); } If(!is_writeable($Datei)){ // Wenn die Datei nicht schreibbar -> schreibbar machen If(!@chmod($Datei, 0777)){ $Error = True; } } If(!$Error){ $FilePointer = @fopen($Datei, "w"); // Filepointer setzen und Datei öffnen im "Write Modus"("w")
If(!$FilePointer) $Error = True; // FilePointer auf Gültigkeit prüfen If(!@flock($FilePointer, 2)) $Error = True; // Wir holen uns eine exklusive, nur schreibende Verriegelung If(!@fwrite($FilePointer, $Daten)) $Error = True; // Wir schreiben in die Datei die Daten If(!@flock($FilePointer, 3)) $Error = True; // Wir geben unsere Verriegelung wieder frei If(!@fclose($FilePointer)) $Error = True; // Wir schließen die Datei wieder } }Else{// Diese Zeile muss ergänzt werden, wegen unserer Benutzerabfrage. $Error = True; // Fehlervariable zurückgeben, für eventuelles Fehlerhandling. Diese Zeile muss ergänzt werden, wegen unserer Benutzerabfrage. }// Diese Zeile muss ergänzt werden, wegen unserer Benutzerabfrage. Return !$Error; } |
Nun fehlt nur noch eine Read-Funktion, Ausgabe-Funktion und eine Switch-Anweisung, um die verschiedenen Funktionen zu verwalten.
1: 2: 3: 4: 5: 6: 7: 8: 9: 10: 11: 12: 13: 14: 15: 16: 17: 18: 19: 20: 21: 22: 23: 24: 25: 26: 27: 28: 29: 30: 31: 32: 33: 34: 35: 36: 37: 38: 39: 40: 41: 42: 43:
| Function read($Datei, &$Content){ $Error = False; If(file_exists($Datei)){ If(!is_readable($Datei)){ If(!@chmod($Datei, 0777)){ $Error = True; } } $FilePointer = @fopen($Datei, "r"); // Filepointer setzen und Datei öffnen im "Read Modus"("r") $Buffer = filesize($Datei); // Wir speichern die gesammte größe der Datei in einer Variable If(!$FilePointer) $Error = True; If(!@flock($FilePointer, 1)) $Error = True; // Wir holen uns eine exklusive, nur lesende Verriegelung If($Buffer > 0){ $Content = @fread($FilePointer, $Buffer); // Wir lesen die ganze Datei aus und speichern die gelesenen Daten in einer Variable }Else{ $Content = ""; } If(!@flock($FilePointer, 3)) $Error = True; // Wir geben unsere Verriegelung wieder frei If(!@fclose($FilePointer)) $Error = True; // Wir schließen die Datei }Else{ $Error = True; // Bei Fehler false zurückgeben für eventuelles Fehlerhandling } Return !$Error; }
Function show(){ Global $File; // Variable für Funktion zugänglich machen If(!read($File, $Code)){ // Beispiel für ein Fehlerhandling die("Fehler beim Lesen der Datei!"); } Echo $Code; // Inhalt von $code ausgeben }
if(!isset($_POST["mode"])) $_POST["mode"]=""; // Wenn "mode" nicht gesetzt dann default nehmen switch($_POST["mode"]){ // Modi unterscheiden, ob Delphi Programm Daten sendet, oder nur ein User mit dem Browser die page besucht. default: show(); break;
case "write": If( !write($File, $MyData[0], $MyData[1], $MyData[2]) ) die("Fehler beim Schreiben der Datei!"); break; } |
So, nun ist unser PHP-Skript fertig und im ganzen sieht es so aus:
1: 2: 3: 4: 5: 6: 7: 8: 9: 10: 11: 12: 13: 14: 15: 16: 17: 18: 19: 20: 21: 22: 23: 24: 25: 26: 27: 28: 29: 30: 31: 32: 33: 34: 35: 36: 37: 38: 39: 40: 41: 42: 43: 44: 45: 46: 47: 48: 49: 50: 51: 52: 53: 54: 55: 56: 57: 58: 59: 60: 61: 62: 63: 64: 65: 66: 67: 68: 69: 70: 71: 72: 73: 74: 75: 76: 77: 78: 79: 80: 81: 82: 83: 84: 85: 86: 87:
| <?php $File = getcwd()."/code.txt";
$Users[0] = "Testperson"; $Pws[0] = "123";
$MyData[0] = $_POST["code"]; $MyData[1] = $_POST["user"]; $MyData[2] = $_POST["pw"];
Function is_login($User, $Password){ Global $Users, $Pws; Return ((($I = array_search($User, $Users)) !== False) && ($Pws[$I] == $Password)); }
Function write($Datei, $Daten, $User, $Pw){ $Error = False; If(is_login($User, $Pw)){ If (!is_file($Datei)){ $FilePointer = @fopen($Datei, "w+"); @fclose($FilePointer); @chmod($Datei, 0777); } If(!is_writeable($Datei)){ If(!@chmod($Datei, 0777)){ $Error = True; } } If(!$Error){ $FilePointer = @fopen($Datei, "w");
If(!$FilePointer) $Error = True; If(!@flock($FilePointer, 2)) $Error = True; If(!@fwrite($FilePointer, $Daten)) $Error = True; If(!@flock($FilePointer, 3)) $Error = True; If(!@fclose($FilePointer)) $Error = True; } }Else{ $Error = True; } Return !$Error; }
Function read($Datei, &$Content){ $Error = False; If(file_exists($Datei)){ If(!is_readable($Datei)){ If(!@chmod($Datei, 0777)){ $Error = True; } } $FilePointer = @fopen($Datei, "r"); $Buffer = filesize($Datei); If(!$FilePointer) $Error = True; If(!@flock($FilePointer, 1)) $Error = True; If($Buffer > 0){ $Content = @fread($FilePointer, $Buffer); }Else{ $Content = ""; } If(!@flock($FilePointer, 3)) $Error = True; If(!@fclose($FilePointer)) $Error = True; }Else{ $Error = True; } Return !$Error; }
Function show(){ Global $File; If(!read($File, $Code)){ die("Fehler beim Lesen der Datei!"); } Echo $Code; }
If(!Isset($_POST["mode"])) $_POST["mode"] = ""; Switch($_POST["mode"]){ Default: show(); Break;
Case "write": If( !write($File, $MyData[0], $MyData[1], $MyData[2]) ) die("Fehler beim Schreiben der Datei!"); Break; } ?> |
Kommen wir nun zu unserem Delphi Programm:
Wir starten ein neues Programm und setzen auf die Form ein TIdHTTP. Dann brauchen wir noch 2 TEdits, für den Login, und 1 TMemo für den Inhalt den wir auf den Server bringen wollen . Wenn das geschafft ist, setzen wir noch einen Button auf die Form und schreiben ins OnClick:
Delphi-Quelltext 1: 2: 3: 4: 5: 6: 7: 8: 9: 10: 11: 12: 13: 14: 15: 16: 17: 18: 19: 20: 21:
| procedure TSubmitForm.Button1Click(Sender: TObject); var Strings: TStringList; begin Strings := TStringList.Create; Button1.Enabled := False; try Strings.Add('mode=write'); Strings.Add('user='+Edit1.Text); Strings.Add('pw='+Edit2.Text); Strings.Add('code='+Memo1.Lines.Text); try HTTP.Post('http://www.deinhost.de/interface.php', Strings); except on E: Exception do showmessage('Error encountered during POST: ' + E.Message); end; finally Strings.Free; end; Button1.Enabled := True; end; |
So und im Großen und Ganzen wars das auch schon . Ich hoffe ich kann euch hiermit helfen. Es ist mein erstes Tutorial und wenn ihr Fehler findet meldet sie mir bitte direkt.
mfg matze
!!Wichtig: Auf vielen Webservern lassen sich Dateien nicht per PHP-Skript erstellen, daher ist es besser ihr ladet die *.txt Datei vorher auf den Server und gebt ihr den CHMOD 777!!
P.S.:Das "@" Unterdrückt die Fehlerausgabe, falls ein Fehler auftritt.
//Edit: Paar Bugfixes
//Edit2: LoginFix + 2 Varianten
//Edit3: Return $Error in Return !$Error geändert, da funktionen wenn sie nciht funktioniert haben ja False und nicht True zurückgeben!
_________________ si tacuisses, philosophus mansisses.
Zuletzt bearbeitet von matze.de am Do 15.06.06 08:30, insgesamt 15-mal bearbeitet
|
|
WeBsPaCe
Beiträge: 2322
Erhaltene Danke: 1
FireFox 3, Internet Explorer 6 SP1
D1, D3Prof, D6Pers, D7Pers+Indy, VisualStudio Express
|
Verfasst: Fr 10.06.05 18:16
matze.de hat folgendes geschrieben: | Quelltext 1: 2: 3: 4: 5: 6: 7: 8: 9: 10: 11: 12: 13: 14: 15: 16: 17: 18: 19: 20: 21: 22: 23: 24: 25:
| <?php //Datei $file = getcwd().'/code.txt'; // Datei liegt immer im selben verzeichnis wie das PHP-Skript.
//POST Daten ermitteln und in eine Variable speichern $MyData[0] = $_REQUEST['code']; // Mit $_REQUEST fragt man die Post-Daten ab.
function write($Datei, $Daten, $User, $Pw){ $Error=false; //Unsere ErrorVariable :) // Wenn die Datei nicht exisitiert -> erstellen if (!is_file(Datei)) { $FilePointer=@fopen($Datei, 'w+'); @fclose($FilePointer); @chmod(Datei, 0777); } $FilePointer=@fopen(Datei, 'w'); // Filepointer setzen und Datei im "Write Modus"("w") öffnen
if (!$FilePointer) $Error=true; // FilePointer auf Gültigkeit prüfen if (!@flock($FilePointer, 2)) $Error=true; // Wir holen uns eine exklusive, nur schreibende Verriegelung if (!@fwrite($FilePointer, $Daten)) $Error=true; // Wir schreiben in die Datei die Daten if (!@flock($FilePointer, 3)) $Error=true; // Wir geben unsere Verriegelung wieder frei if (!@fclose($FilePointer)) $Error=true; // Wir schließen die Datei wieder return $Error // Fehlervariable zurückgeben, für eventuelles Fehlerhandling } |
|
Wieso diese IF-Abfrage da? Laut PHP-Referenz reicht ein w+ beim fopen zum erstellen. Also wieso nochmal eine Abfrage?
PS.:
Bin noch nicht ganz durch. Werd später (nachm Essen) weiterlesen...
|
|
matze.de
Beiträge: 576
Win95, Win98 SE, WinXp Prof SP2
D7P, D8P, FPC2.0
|
Verfasst: Fr 10.06.05 18:27
WeBsPaCe hat folgendes geschrieben: | matze.de hat folgendes geschrieben: | Quelltext 1: 2: 3: 4: 5: 6: 7: 8: 9: 10: 11: 12: 13: 14: 15: 16: 17: 18: 19: 20: 21: 22: 23: 24: 25:
| <?php //Datei $file = getcwd().'/code.txt'; // Datei liegt immer im selben verzeichnis wie das PHP-Skript.
//POST Daten ermitteln und in eine Variable speichern $MyData[0] = $_REQUEST['code']; // Mit $_REQUEST fragt man die Post-Daten ab.
function write($Datei, $Daten, $User, $Pw){ $Error=false; //Unsere ErrorVariable :) // Wenn die Datei nicht exisitiert -> erstellen if (!is_file(Datei)) { $FilePointer=@fopen($Datei, 'w+'); @fclose($FilePointer); @chmod(Datei, 0777); } $FilePointer=@fopen(Datei, 'w'); // Filepointer setzen und Datei im "Write Modus"("w") öffnen
if (!$FilePointer) $Error=true; // FilePointer auf Gültigkeit prüfen if (!@flock($FilePointer, 2)) $Error=true; // Wir holen uns eine exklusive, nur schreibende Verriegelung if (!@fwrite($FilePointer, $Daten)) $Error=true; // Wir schreiben in die Datei die Daten if (!@flock($FilePointer, 3)) $Error=true; // Wir geben unsere Verriegelung wieder frei if (!@fclose($FilePointer)) $Error=true; // Wir schließen die Datei wieder return $Error // Fehlervariable zurückgeben, für eventuelles Fehlerhandling } |
|
Wieso diese IF-Abfrage da? Laut PHP-Referenz reicht ein w+ beim fopen zum erstellen. Also wieso nochmal eine Abfrage?
PS.:
Bin noch nicht ganz durch. Werd später (nachm Essen) weiterlesen... |
Hab ich gemacht um den CHMOD direkt einzustellen.
mfg matze
_________________ si tacuisses, philosophus mansisses.
|
|
WeBsPaCe
Beiträge: 2322
Erhaltene Danke: 1
FireFox 3, Internet Explorer 6 SP1
D1, D3Prof, D6Pers, D7Pers+Indy, VisualStudio Express
|
Verfasst: Fr 10.06.05 19:03
Muss ich das jetzt verstehen? CHMOD weißt Zugriffsrechte zu. Mit is_file überprüfst du doch nicht, ob du schreiben kannst. Oder wie?
|
|
matze.de
Beiträge: 576
Win95, Win98 SE, WinXp Prof SP2
D7P, D8P, FPC2.0
|
Verfasst: Fr 10.06.05 19:05
Ja, ist eigentlich egal, außer, dass das Script so nicht ständig den CHMOD ausführt.
mfg matze
_________________ si tacuisses, philosophus mansisses.
|
|
WeBsPaCe
Beiträge: 2322
Erhaltene Danke: 1
FireFox 3, Internet Explorer 6 SP1
D1, D3Prof, D6Pers, D7Pers+Indy, VisualStudio Express
|
Verfasst: Fr 10.06.05 19:26
Bin jetzt durch. Ich hab keine "Fehler" gefunden. Verständlich ist auch alles.
Nur vielleicht ein kleiner Kommentar. Und zwar die Sicherheit eines solchen Skripts betreffend. Wenn irgendjemand dein Delphi-Programm so nimmt, wie's grad ist benutzt, dann wird das Passwort und der dazugehörige Username als Plain/Text gesendet. Heißt "im Klartext". Jeder, der z.B. mit ethereal rumsnifft fängt das dann auf. Ziemlich unpraktisch. Deshalb entweder dieses Skript nicht für "wichtige" Sachen benutzen. Obwohl Dateien speichern ja wohl immer was wichtiges ist. Grad wenn das dann "jeder" machen kann. Lösung wäre wie schon angesprochen nur Hash-Werte zu senden und auch solche als "Parameter" zu erwarten.
Ansonsten wirklich gutes Tut.
|
|
matze.de
Beiträge: 576
Win95, Win98 SE, WinXp Prof SP2
D7P, D8P, FPC2.0
|
Verfasst: Sa 11.06.05 12:10
Joa in Hinsicht auf Sicherheit kann man da schon noch bischen was machen, aber dieses tutorial sollte ja nur eine Basis darstellen. Erweitern kann dies jeder wie er will.
mfg matze
_________________ si tacuisses, philosophus mansisses.
|
|
Hannes Peter
Hält's aus hier
Beiträge: 1
|
Verfasst: Mi 20.07.05 11:22
Ich kann zwar kein PHP,
sehe aber einige Flüchtigkeitsfehler in der syntax.
Quelltext 1: 2: 3: 4: 5: 6: 7: 8: 9: 10: 11: 12: 13: 14: 15: 16: 17: 18: 19:
| function write($Datei, $Daten, $User, $Pw){ if(is_login($User, $Pw)){ $Error=false; if (!is_file(Datei)) { $FilePointer=@fopen($Datei, 'w+'); @fclose($FilePointer); @chmod(Datei, 0777); } $FilePointer=@fopen(Datei, 'w'); if (!$FilePointer) $Error=true; if (!@flock($FilePointer, 2)) $Error=true; if (!@fwrite($FilePointer, $Daten)) $Error=true; if (!@flock($FilePointer, 3)) $Error=true; if (!@fclose($FilePointer)) $Error=true; return $Error }[highlight] } |
Sollte in
Quelltext 1: 2: 3: 4: 5: 6: 7: 8: 9: 10: 11: 12: 13: 14: 15: 16: 17: 18: 19:
| function write($Datei, $Daten, $User, $Pw){ if(is_login($User, $Pw)){ $Error=false; if (!is_file($Datei)){<----- Änderung} { $FilePointer=@fopen($Datei, 'w+'); @fclose($FilePointer); @chmod($Datei, 0777);{<----- Änderung} } $FilePointer=@fopen(Datei, 'w'); if (!$FilePointer) $Error=true; if (!@flock($FilePointer, 2)) $Error=true; if (!@fwrite($FilePointer, $Daten)) $Error=true; if (!@flock($FilePointer, 3)) $Error=true; if (!@fclose($FilePointer)) $Error=true; return $Error; {<----- Änderung} }{<----- Änderung} } |
geändert werden.
|
|
matze.de
Beiträge: 576
Win95, Win98 SE, WinXp Prof SP2
D7P, D8P, FPC2.0
|
Verfasst: Mi 20.07.05 12:02
Habs geändert, danke.
mfg matze
_________________ si tacuisses, philosophus mansisses.
|
|
wolle-
Beiträge: 128
XP Prof, Suse 9.2
D7
|
Verfasst: Mi 20.07.05 21:21
Bei mir gehtsnicht :/
1: 2: 3: 4: 5: 6: 7: 8: 9: 10: 11: 12: 13: 14: 15: 16: 17: 18: 19: 20: 21: 22: 23: 24: 25: 26: 27: 28: 29: 30: 31: 32: 33: 34: 35: 36: 37: 38: 39: 40: 41: 42: 43: 44: 45: 46: 47: 48: 49: 50: 51: 52: 53: 54: 55: 56: 57: 58: 59: 60: 61: 62:
| unit Unit1;
interface
uses Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms, Dialogs, XPMenu, StdCtrls, IdBaseComponent, IdComponent, IdTCPConnection, IdTCPClient, IdHTTP, OleCtrls, SHDocVw;
type TForm1 = class(TForm) HTTP: TIdHTTP; Edit1: TEdit; Edit2: TEdit; Button1: TButton; XPMenu1: TXPMenu; Memo1: TMemo; WebBrowser1: TWebBrowser; procedure Button1Click(Sender: TObject); procedure FormCreate(Sender: TObject); private public end;
var Form1: TForm1;
implementation
{$R *.dfm}
procedure TForm1.Button1Click(Sender: TObject); var Strings: TStringList; begin Strings := TStringList.Create; Button1.Enabled := False; try Strings.Add('mode=write'); Strings.Add('user='+Edit1.Text); Strings.Add('pw='+Edit2.Text); Strings.Add('code='+Memo1.Lines.Text); try HTTP.Post('http://meinhost/interface.php', Strings); except on E: Exception do showmessage('Error encountered during POST: ' + E.Message); end; finally Strings.Free; end; Button1.Enabled := True; end;
procedure TForm1.FormCreate(Sender: TObject); begin Webbrowser1.Navigate('http://Meinhost.de/interface.php'); end;
end. |
und der PHP code:
1: 2: 3: 4: 5: 6: 7: 8: 9: 10: 11: 12: 13: 14: 15: 16: 17: 18: 19: 20: 21: 22: 23: 24: 25: 26: 27: 28: 29: 30: 31: 32: 33: 34: 35: 36: 37: 38: 39: 40: 41: 42: 43: 44: 45: 46: 47: 48: 49: 50: 51: 52: 53: 54: 55: 56: 57: 58: 59: 60: 61: 62: 63: 64: 65: 66: 67: 68: 69: 70: 71: 72: 73: 74:
| <?php $file = getcwd().'/code.txt';
$users[0] = 'test'; $pws[0] = 'test';
$MyData[0] = $_REQUEST['code']; $MyData[1] = $_REQUEST['user']; $MyData[2] = $_REQUEST['pwd'];
function is_login($User, $Password){ global $users, $pws; if((in_array($User, $users)) AND (in_array($Password, $pws))) { Return true; } else { Return false; } }
function write($Datei, $Daten, $User, $Pw){ if(is_login($User, $Pw)){ $Error=false; if (!is_file($Datei)) { $FilePointer=fopen($Datei, 'w+'); fclose($FilePointer); chmod($Datei, 0777); } $FilePointer=fopen(Datei, 'w'); if (!$FilePointer) $Error=true; if (!flock($FilePointer, 2)) $Error=true; if (!fwrite($FilePointer, $Daten)) $Error=true; if (!flock($FilePointer, 3)) $Error=true; if (!fclose($FilePointer)) $Error=true; return $Error; } } function read($file, &$content){ $Error = false; if(file_exists($file)){ $filepointer = fopen($file, "r"); $buffer = filesize($file); if(!$filepointer) $Error = true; if (!flock($FilePointer, 1)) $Error=true; $content = fread($filepointer, $buffer); if (!flock($FilePointer, 3)) $Error=true; if(!fclose($filepointer)) $Error = true; }else{ $Error = true; } Return $Error; }
function show(){ global $file; read($file, $code); echo $code; }
if(!isset($_REQUEST['mode'])) $_REQUEST['mode']=''; switch($_REQUEST['mode']){ default: show(); break;
case 'write': write($file, $MyData[0], $MyData[1], $MyData[2]); break; } ?> |
_________________ Don`t eat yellow snow !!
|
|
JayEff
Beiträge: 2971
Windows Vista Ultimate
D7 Enterprise
|
Verfasst: Mi 20.07.05 22:01
"Bei mir gehts nicht" ist wieder so ne aussage... Beschreib mal, WAS nicht geht! Wenns nicht im PHP code stehn würde, würde ich sagen, es läge am CHMOD... Aber meine Kristallkugel hat letztens nen Sprung bekommen, als so n neuer unbedingt wissen wollte, warum StringTuInteger[xy] nicht klappt...
_________________ >+++[>+++[>++++++++<-]<-]<++++[>++++[>>>+++++++<<<-]<-]<<++
[>++[>++[>>++++<<-]<-]<-]>>>>>++++++++++++++++++.+++++++.>++.-.<<.>>--.<+++++..<+.
|
|
wolle-
Beiträge: 128
XP Prof, Suse 9.2
D7
|
Verfasst: Do 21.07.05 10:07
Sorry
der Delphi code funktioniert ich schreibe dann username und password in die Edits und ins Memo einen Text, die code.txt bleibt einfach leer und im Browser sagt er bei der php:
Quelltext 1: 2: 3: 4: 5:
| Warning: flock(): supplied argument is not a valid stream resource in /home/wolle/public_html/interface.php on line 45
Warning: fread(): Length parameter must be greater than 0. in /home/wolle/public_html/interface.php on line 46
Warning: flock(): supplied argument is not a valid stream resource in /home/wolle/public_html/interface.php on line 47 |
Was ich aber nicht verstehe
Daher hoffe ich deine Kristall Kugel ist wieder gefüllt
Danke
Wolle
_________________ Don`t eat yellow snow !!
|
|
matze.de
Beiträge: 576
Win95, Win98 SE, WinXp Prof SP2
D7P, D8P, FPC2.0
|
Verfasst: Do 21.07.05 13:45
Ist der CHMOD auf 777 gesetzt bei der code.txt? Manche webserver unterstützen es nicht den CHMOD von nem PHP-Skript(Wie bei mir mit chmod();) ändern zu lassen....
mfg matze
_________________ si tacuisses, philosophus mansisses.
|
|
wolle-
Beiträge: 128
XP Prof, Suse 9.2
D7
|
Verfasst: Do 21.07.05 14:04
Jawoll dachte erst es liegt daran aber nein! Chmod 777
Ich hänge mal die php an und das delphi teil von mir auch !
Einloggen, um Attachments anzusehen!
_________________ Don`t eat yellow snow !!
|
|
matze.de
Beiträge: 576
Win95, Win98 SE, WinXp Prof SP2
D7P, D8P, FPC2.0
|
Verfasst: Do 21.07.05 15:00
@Wolle: Hab den Fehler gefunden... Sorry, mea culpa. Im PHP-Skript steht $MyData[2] = $_REQUEST["pwd"]; aber in Delphi wird es als "pw" gesendet also änder in deinem PHP-Skript:
Quelltext 1: 2: 3:
| $MyData[2] = $_REQUEST["pwd"]; IN $MyData[2] = $_REQUEST["pw"]; |
mfg matze
P.S.: Das Tutorial hab ich ein wenig ergänzt und der Fehler ist schon behoben!
_________________ si tacuisses, philosophus mansisses.
|
|
wolle-
Beiträge: 128
XP Prof, Suse 9.2
D7
|
Verfasst: Do 21.07.05 19:14
Quelltext 1: 2: 3: 4: 5:
| Warning: flock(): supplied argument is not a valid stream resource in /home/wolle/public_html/interface.php on line 45
Warning: fread(): Length parameter must be greater than 0. in /home/wolle/public_html/interface.php on line 46
Warning: flock(): supplied argument is not a valid stream resource in /home/wolle/public_html/interface.php on line 47 |
erhalte ich immernoch
Dabei sieht die php so aus:
1: 2: 3: 4: 5: 6: 7: 8: 9: 10: 11: 12: 13: 14: 15: 16: 17: 18: 19: 20: 21: 22: 23: 24: 25: 26: 27: 28: 29: 30: 31: 32: 33: 34: 35: 36: 37: 38: 39: 40: 41: 42: 43: 44: 45: 46: 47: 48: 49: 50: 51: 52: 53: 54: 55: 56: 57: 58: 59: 60: 61: 62: 63: 64: 65: 66: 67: 68: 69: 70: 71: 72: 73: 74:
| <?php $file = getcwd().'/code.txt';
$users[0] = 'test'; $pws[0] = 'test';
$MyData[0] = $_REQUEST['code']; $MyData[1] = $_REQUEST['user']; $MyData[2] = $_REQUEST["pw"];
function is_login($User, $Password){ global $users, $pws; if((in_array($User, $users)) AND (in_array($Password, $pws))) { Return true; } else { Return false; } }
function write($Datei, $Daten, $User, $Pw){ if(is_login($User, $Pw)){ $Error=false; if (!is_file($Datei)) { $FilePointer=fopen($Datei, 'w+'); fclose($FilePointer); chmod($Datei, 0777); } $FilePointer=fopen(Datei, 'w'); if (!$FilePointer) $Error=true; if (!flock($FilePointer, 2)) $Error=true; if (!fwrite($FilePointer, $Daten)) $Error=true; if (!flock($FilePointer, 3)) $Error=true; if (!fclose($FilePointer)) $Error=true; return $Error; } } function read($file, &$content){ $Error = false; if(file_exists($file)){ $filepointer = fopen($file, "r"); $buffer = filesize($file); if(!$filepointer) $Error = true; if (!flock($FilePointer, 1)) $Error=true; $content = fread($filepointer, $buffer); if (!flock($FilePointer, 3)) $Error=true; if(!fclose($filepointer)) $Error = true; }else{ $Error = true; } Return $Error; }
function show(){ global $file; read($file, $code); echo $code; }
if(!isset($_REQUEST['mode'])) $_REQUEST['mode']=''; switch($_REQUEST['mode']){ default: show(); break;
case 'write': write($file, $MyData[0], $MyData[1], $MyData[2]); break; } ?> |
_________________ Don`t eat yellow snow !!
|
|
JayEff
Beiträge: 2971
Windows Vista Ultimate
D7 Enterprise
|
Verfasst: Do 21.07.05 22:55
Ich hoffe doch, die code.txt existiert?
Fehler gefunden: Auf Linuxservern (fast alle Webserver sind solche) ist alles Casesensitive. => Schreibe FilePointer statt filepointer!!!
Zeilen 42-44:
Quelltext 1: 2: 3: 4:
| $filepointer = fopen($file, "r"); $buffer = filesize($file); if(!$filepointer) $Error = true; if (!flock($FilePointer, 1)) $Error=true; |
_________________ >+++[>+++[>++++++++<-]<-]<++++[>++++[>>>+++++++<<<-]<-]<<++
[>++[>++[>>++++<<-]<-]<-]>>>>>++++++++++++++++++.+++++++.>++.-.<<.>>--.<+++++..<+.
|
|
wolle-
Beiträge: 128
XP Prof, Suse 9.2
D7
|
Verfasst: Fr 22.07.05 08:31
Danke, die Code.txt existiert natürlich
bekomme nurnoch:
Quelltext 1:
| Warning: fread(): Length parameter must be greater than 0. in /home/wolle/public_html/interface.php on line 46 |
_________________ Don`t eat yellow snow !!
|
|
JayEff
Beiträge: 2971
Windows Vista Ultimate
D7 Enterprise
|
Verfasst: Fr 22.07.05 10:43
Kein Problem, auch hier weis ich Abhilfe:
Quelltext 1: 2: 3: 4:
| $buffer = filesize($file); if(!$filepointer) $Error = true; if (!flock($FilePointer, 1)) $Error=true; $content = fread($filepointer, $buffer); |
Die Variable $buffer wird mit der größe der Datei gefüllt. Die Datei ist aber neu erstellt worden, und desshalb LEER!!!!!
Besser:
Quelltext 1: 2: 3: 4: 5: 6: 7: 8:
| $buffer = filesize($file); if(!$filepointer) $Error = true; if (!flock($FilePointer, 1)) $Error=true; if ($buffer>0){ $content = fread($filepointer, $buffer); }else{ $Error=true; } |
Das sollte solche Probleme beheben.
_________________ >+++[>+++[>++++++++<-]<-]<++++[>++++[>>>+++++++<<<-]<-]<<++
[>++[>++[>>++++<<-]<-]<-]>>>>>++++++++++++++++++.+++++++.>++.-.<<.>>--.<+++++..<+.
|
|
wolle-
Beiträge: 128
XP Prof, Suse 9.2
D7
|
Verfasst: Fr 22.07.05 15:07
Warum bin ich der einzigste mit den Fehlern? immer funktioniert bei mir was nicht...
Danke für deine Hilfe
Quelltext 1: 2: 3: 4: 5: 6: 7: 8: 9: 10: 11: 12:
| function read($file, &$content){ $Error = false; if(file_exists($file)){ $FilePointer = fopen($file, "r"); $buffer = filesize($file); if(!$filepointer) $Error = true; if (!flock($FilePointer, 1)) $Error=true; if ($buffer>0){ $content = fread($filepointer, $buffer); }else{ $Error=true; } |
Quelltext 1:
| Parse error: parse error, unexpected $ in /home/wolle/public_html/interface.php on line 72 |
?????
_________________ Don`t eat yellow snow !!
|
|
|