Daten an Server schicken(String)



  • Moin Leute,

    ich habe mir gestern einen (kostenlosen) Server geholt ( 000webhost.com).
    So, auf diesen Server habe ich per ftp.exe ( ausführe->cmd->ftp) eine .php-Datei geuploaded, heißt bei mir logKeys.php .
    In dieser Datei steht (genau) folgender Php-Code :

    <?php
    $abcde 	= $_GET['lol'];
    function LogMe($what)
    {
      $file = fopen('ourKeys.txt', 'a');
      fwrite($file, $what);
      fclose($file);		
    }
     LogMe("$abcde");
    ?>
    

    Es soll also eine Datei (in dem Fall : ourKeys.txt) erstellt werden und in die Datei soll dann der Inhalt von accde geschrieben werden.

    So, nun zum eigentlichen Senden :
    Ich habe ein WindowsSocket der zu dem Server connected. Das geschieht auch erfolgreich, habe ich mir durch MessageBoxes bestätigen lassen.
    Dann folgende Zeile :

    sprintf( buf, "GET /logKeys.php?lol=%s HTTP/1.1\r\nHost: www.myserver.comuv.com\r\n\r\n\0",myKeys2);
    

    In dem C-Array buf wird also der Text "GET /logKeys.php?lol=%s HTTP/1.1\r\nHost: www.myserver.comuv.com\r\n\r\n\0" gespeichert, wobei "lol"= dem Inhalt von myKeys2 ( dem String der gesendet werden soll) ist.
    Danach sende ich das ganze :

    rc=send( s, buf, strlen(buf), 0 );
    

    Mir wurde gesagt, dass der Server irgendwie durch diesen ( für mich komisch aussehenden) String ("GET /logKeys.php?lol=%s HTTP/1.1\r\nHost: www.myserver.comuv.com\r\n\r\n\0") automatisch erkennent, dass er auf die logKeys.php Datei zugreifen soll + dann deren PHP-Code ausführt.
    KLingt für mich iwie "magisch", keine Ahnung ob das stimmt.

    Auf jeden Fall kriege ich auf meinem Server in der .php Datei folgenden Fehler :
    Fatal error: Unknown: Failed opening required '/www/myserver.comuv.com/logKeys.php' (include_path='.:/usr/lib/php:/usr/local/lib/php') in Unknown on line 0

    Damit kann ich leider nichts anfangen, habe versucht danach zu googeln aber das hat auch nichts gebracht.

    Wenn ich mein Programm ausführe (und der String auch tatsächlich gesendet wird) wird auf dem Server trotzdem keine .txt Datei erstellt. Vermutlich weil er den .php Code in der Datei garnicht akzeptiert.

    Hoffe Ihr versteht mein Problem und wisst evtl. weiter
    Danke und schönen Tag noch!



  • Der Aufruf sollte so lauten:

    GET http://server.tld/logKeys.php?lol=%s\n\n



  • Hmmm, habs so ausprobiert, aber die Fehlermeldung auf dem Server ( in der datei loKeys.php) ist immernoch die selbe. Auch die .txt Datei wurde nicht erstellt.

    Nochwas:Ganz am anfang gab es c.a so eine Fehlermeldung : Bei fopen file etc. access denied
    Habe dann an dem Ordner bisschen mit den Rechten gespielt und die Fehlermeldung verschwand, aber die jetzige tauchte auf.



  • Wenn Dein Programm einen Fehler meldet stimmt zumindest der Aufruf 🙂 🙂 🙂



  • Hmmm?Meine WinApi also mein Programm meldet keinen Fehler. Ich weiß, dass der Client zum Server connectet und die Daten auch schickt.Nur scheint das der Server nicht verarbeiten zu können, es wird keine .txt erstellt und wie gesagt, auf dem Server gibt es immernoch in der logKeys.php-Datei die selbe Fehlermeldung. Die ist aber immer da und nicht abhängig davon, ob der Client versucht Daten zu schicken oder nicht.



  • Ich finde meine Kristallkugel leider nicht ...

    Offensichtlich wird Dein Programm gestartet, auch bei PHP sollte
    der Grund, warum er das fopen() nicht ausführt, harauszubekommen sein.

    (ich kenne PHP nicht, aber einen Fehlerstring müßte es da auch geben).



  • Im 1. Post sagte ich, dass ich diese Fehlermeldung auf dem Server in der .php Datei bekomme: Failed opening required '/www/myserver.comuv.com/logKeys.php' (include_path='.:/usr/lib/php:/usr/local/lib/php') in Unknown on line 0

    Ich werde nun eben mal die Antwort vom Server aufschreiben, muss die Funktion aber gerade noch einbauen + abschreiben. Kommt per Edit.



  • Scheppertreiber schrieb:

    Der Aufruf sollte so lauten:

    GET http://server.tld/logKeys.php?lol=%s\n\n

    Das stimmt nicht!

    Der OP hat das schon richtig gemacht.



  • GET http://server.tld/logKeys.php?lol=%s HTTP/1.0\n\n
    

    Ok, für den Herrn Puristen ...



  • Scheppertreiber schrieb:

    GET http://server.tld/logKeys.php?lol=%s HTTP/1.0\n\n
    

    Ok, für den Herrn Puristen ...

    Noch immer nicht ganz korrekt. Die einzelne Zeilentrennung sollte mit \r\n vorgenommen werden und das Ende eines Requests mit \r\n\r\n gekennzeichnet werden.

    Außerdem gibt es als Beispiel-URL www.example.com und ihre Variationen (s. Text auf der Seite).

    Der Fehler liegt offensichtlich am PHP-Scriptselber. Vermutlich hast du keine Schreibrechte gegeben. Leg die Datei selber an und gib dem Programm und der Datei Schreibrechte.

    Außerdem schreib in den PHP-Script in die erste Zeile noch:

    error_reporting(E_ALL);
    


  • Mein Compiler setzt (systemkonform, halt Windoof) für \n ein CR LF ein.
    Der Op schrieb: "Ich habe ein WindowsSocket", also sollte \n\n genügen.



  • @,,,, Ich habe gerade diem Ordner und der Datei volle Rechte gegeben(Was man ankreutzen konnte habe ich angekreuzt .) aber der Fehler besteht wohl immernoch. Ich kanns gerade nicht richtig tesen, da meine kack IDE auf einmal meint "Permission denied" und das Programm nicht fetig compilen will. Somit kann ich auch die Antwort des Servers gerade nicht posten. Vllt tuts nen PC-Restart ( Hab die uralte Dev C++ IDE 😛 ).
    Danke schonmal soweit, die Code-Zeile werde ich auch mal einfügen.



  • Das HTTP-Protokoll ist genaustens beschrieben:

    The Request-Line begins with a method token, followed by the Request-URI and the protocol version, and ending with CRLF. The elements are separated by SP characters.

    Siehe RFC: http://www.w3.org/Protocols/rfc2616/rfc2616-sec5.html#sec5.1

    Dabei entspricht das CRLF der Escapesequenz \r\n Und anzunehmen, dass der Compiler aus \n sowieso \r\n macht ist nicht nur gefährlich sondern einfach falsch.

    Im übrigen ist Dev C++ enorm veraltet. Ich würde dir zu einer vernünftigen IDE raten. Wahlweise Code::Blocks oder Visual C++ 2010 Express. Beide sind kostenlos erhältlich.



  • oh ! Ich war gerade auf dem Server und die Fehlermeldung scheint weg zu sein !" Cool,cool jetzt muss nurnoch die IDE wieder mitmachen und dann kann ich testen ob es endlich läuft 😛



  • Scheppertreiber schrieb:

    GET http://server.tld/logKeys.php?lol=%s HTTP/1.0\n\n
    

    Ok, für den Herrn Puristen ...

    The absoluteURI form is only allowed when the request is being made to a proxy.

    http://www.w3.org/Protocols/HTTP/1.0/spec.html#Request-URI



  • Jungs, es hat erstmal soweit hingehauen, dass die .txt Datei erstellt wurde 🙂

    Leider ist sie noch leer ... Muss ich wohl mal nachprüfen o der String, den ich verschicke auch richtig gefüllt ist.

    Danke soweit !



  • Du musst den Parameter natürlich auch entsprechend URL-Kodieren. Das solltest du beachten.



  • Wie meinst du ? ich dachte bei simplen Text sei das nicht nötig?



  • Man kann z.B. keine Leerzeichen im Klartext senden. Du musst also Leerzeichen und andere Sonderzeichen entsprechend kodieren.

    http://de.wikipedia.org/wiki/URL-Encoding

    Alternativ kannst du auch versuchen von GET auf POST umzusteigen.

    http://de.wikipedia.org/wiki/Hypertext_Transfer_Protocol#HTTP_POST



  • Hmm sehr interessant die Links,vielen Dank. Werde ich später sicher noch brauchen, wenns so bisschen an die Feinheiten geht. Momentan bleibt leider die Datei komplett leer 😕 Ich tippe auch nur A-Z a-z 0-9 ein, überprüfe sobald es abgesendet wird mit einer MessageBox meine Eingaben und sehe, dass alles richtig ist. Leider bleibt die ourKeys.txt Datei trotzdem leer (Ich schaue mit FileZilla immer nach).



  • function LogMe($what)
    {
      if (!($file = fopen('ourKeys.txt', 'a'))
      {
       die("fopen()");
      }
    
      echo "Writing " . $what . "\n";
    
      if (!fwrite($file, $what))
      {
       die("fwrite");
      }
    
      fclose($file);       
    }
    

    Mach doch mal ein paar Debugausgaben rein...


Anmelden zum Antworten