Ergebnis 1 bis 3 von 3
  1. #1
    Sobig Wurm Avatar von BlackHook
    Registriert seit
    13.03.2009
    Beiträge
    219

    Standard Problem mit Str_Replace auf dem Server

    Hallo Leute
    Ich versuche einen Updater für mein Tool zu schreiben.
    Leider fehlt mir das PHP Wissen. PHP möchte ich nicht erlernen, das ist eine einmalige Sache.
    Ich hoffe Ihr könnt mir ein wenig helfen damit es irgendwie läuft.

    Es geht um folgendes.
    Ich erfasse die Locale Version und die deklarierte Version auf dem Server ab.
    Code:
      Local := GetFileVersion(ParamStr(0));
    
      Remote := GET('http://MeineAdresse.de/Serien_Downloader_Update/AU.php?' +
                    'datei=AutoUpdater.inf' +
                    '&zeile=6' ,        {Zeile}
                    'MeineAdresse.de',  {Host}
                    '');                {Refeerer}
    Das funktioniert schon sehr gut. Meine PHP Datei macht das gut.
    Damit habe ich die Versionen erfasst.
    Nun möchte ich die Version auf dem Server die in Zeile Nr.6 gespeichert wurde mit der neuen ersetzen.
    Also rufe ich noch mal meine PHP Datei auf, diesmal aber mit weiteren Parametern.

    Code:
          Response := GET('http:// MeineAdresse.de /Serien_Downloader_Update/AU.php?' +
                            'datei=AutoUpdater.inf' +   
                            '&zeile=6' +                  {Zeile}
                            '&LocaleVersion=' + Local +   {Local}
                            '&ServerVersion=' + Remote +  {Remote}
                            '&update',                    {Befehl}
                            ' MeineAdresse.de ',          {Host}
                            '');                          {Refeerer}
    Und hier ist der Hund begraben. Hier bekommen ich immer eine Fehlermeldung.
    <!DOCTYPE HTML PUBLIC"-//IETF//DTD HTML ":=//EN">

    Meine PHP Datei. (Habt Mitleid mit mir, das habe ich mir aus irgendwelchen Vorlagen zusammengeschustert)

    PHP-Code:
    <?php
    define
    ('FILE_PATH''data/');
     
      
    $req = array('datei''zeile');
     
      foreach(
    $req as $p)
        {if(!isset(
    $_GET[$p]) || empty($_GET[$p])) { error(); }}
     
      if(
    file_exists(FILE_PATH.$_GET['datei']) && is_numeric($_GET['zeile']))
        { 
    $file file(FILE_PATH.$_GET['datei']);
          
    $inhalt = @$file[$_GET['zeile'] - 1];
     
          if(!empty(
    $inhalt))
            { echo 
    $inhalt;
     
              if(isset(
    $_GET['del']))
                { unset(
    $file[$_GET['zeile'] - 1]);
                  
    file_put_contents(FILE_PATH.$_GET['datei'], $file);}
     
              if(isset(
    $_GET['update']))
                { unset(
    $file[$_GET['zeile'] - 1]);
                  
    file_put_contents(FILE_PATH.$_GET['datei'],
                                    
    str_replace($_GET['ServerVersion'], $_GET['LocaleVersion'],
                                    
    file_get_contents(FILE_PATH.$_GET['datei'])));}}
          else
            { echo 
    'Zeile '.$_GET['zeile'].' in Datei '.$_GET['datei'].' nicht gefunden.';}}
      else
        { echo 
    'Datei '.htmlentities($_GET['datei']).' nicht gefunden.';}
           
    function 
    error()
      { echo 
    'Bitte Datei und Zeile angeben.'; exit;}

    Vielleicht habe ich die Sache falsch angepackt, falls es andere Wege gibt bitte auch vorschlagen.
    Es geht eigentlich nur darum:

    1. Version auf dem Server erfragen
    2. Zeile Nr.6 auf dem Server umschreiben


    Das sollte in einem Rutsch passieren.

    Es sollte schon per PHP laufen, weil es in den meisten Fällen nur die Serverversion abgefragt wird. Das eine Mal abfragen und Update ausführen funktioniert nämlich mit meiner PHP, nur mein Upload der neuen Version noch nicht. Ich vermute es hat was mit dem Schließen der Datei zu tun, leider bin ich PHP- Niete.
    Für jede Hilfe bin ich dankbar.

  2. #2
    0x532d4d6f64 Avatar von Barny
    Registriert seit
    12.01.2007
    Beiträge
    630

    Standard AW: Problem mit Str_Replace auf dem Server

    Hi, BlackHook!

    Ich habe mir deinen Code mal angeschaut und hätte bei der Einrückung und der Klammersetzung fast auf den Tisch gekotzt. Hast aber auch gesagt, dass du kein Entwickler bist und von daher spare ich mir die restlichen Kommentierungen. Hier ist von daher einmal der fertige Code:
    PHP-Code:
    <?php
    define
    ('FILE_PATH''data/');
     
    $req = array('datei''zeile');
     
    foreach(
    $req as $p) {
        if(!isset(
    $_GET[$p]) || empty($_GET[$p])) { 
            
    error(); 
        }
    }
     
    if(
    file_exists(FILE_PATH.$_GET['datei']) && is_numeric($_GET['zeile'])) {
        
    $file file(FILE_PATH.$_GET['datei']);
        
    $inhalt = @$file// <-- Changed by Barny
        
    if(!empty($inhalt)) {
            
    // Diesen Part hier habe ich nicht angefasst, sollte aber noch angepasst werden >>>
            
    if(isset($_GET['del'])) {
                unset(
    $file[$_GET['zeile'] - 1]);
                
    file_put_contents(FILE_PATH.$_GET['datei'], $file);
            }
            
    // Diesen Part hier habe ich nicht angefasst, sollte aber noch angepasst werden <<<
            
    if(isset($_GET['update'])) {
                
    // Added by Barny >>>
                
    $data '';
                foreach (
    $inhalt as $e) {
                    if(
    strpos($e,$_GET['ServerVersion']) !== false) {
                        
    $e str_replace($_GET['ServerVersion'], $_GET['LocaleVersion'], $e);
                    }
                    
    $data $data $e;
                }
                
    $file_handle fopen(FILE_PATH.$_GET['datei'], 'w');
                
    fwrite($file_handle$data);
                
    fclose($file_handle);
                echo 
    "Version wurde ersetzt!";
                
    // Added by Barny <<<
            
    }
        } else { 
            echo 
    'Zeile '.$_GET['zeile'].' in Datei '.$_GET['datei'].' nicht gefunden.';
        }
    } else {
        echo 
    'Datei '.htmlentities($_GET['datei']).' nicht gefunden.';
    }
           
    function 
    error() { 
        echo 
    'Bitte Datei und Zeile angeben.'
        exit;

    ?>
    Ich habe alle Änderungen von mir jeweils im Code markiert und habe ihn einmal richtig formatiert damit man ihn lesen kann. Die Bedingung die auf "$_GET['del']" prüft habe ich nicht angefasst, sollte aber nochmals überarbeitet werden. Da du dir den Rest auch zusammenkopiert hast wirst du das denke ich auch mit dem Part darunter hinkriegen.

    Habe deinen Code einmal auseinandergepflückt, lauffähig gemacht und dann wieder soweit zurückkopiert, dass es bei dir wieder passen sollte. Hoffe, dass es so stimmt. Vergiss bitte nicht die Dateiberechtigungen anzupassen. Die Ausgeführte Datei benötigt Schreibrechte und die zu beschreibende Datei muss beschreibbar sein!

    Achja... das
    Code:
    <!DOCTYPE HTML PUBLIC"-//IETF//DTD HTML ":=//EN">
    ist keine Fehlermeldung! Siehe hierzu: https://www.ietf.org/ und https://www.w3.org/html/

    Falls noch Fragen sein sollten, dann kannst du dich gerne melden! Ich persönlich würde den Code nämlich einmal gründlichst überarbeiten. Viele unnütze Else-Zweige und Bedingungen an sich befinden sich in deinem Code. Außerdem würde ich es mir überlegen, ob ich (online?) ein Script zur Verfügung stelle, womit quasi jeder meine Dateien bearbeiten kann. Ich hätte beispielsweise so die Möglichkeit eine Shell auf deinen Webserver zu pushen.

    Viele Grüße,

    Barny
    Geändert von Barny (16.01.2018 um 15:47 Uhr)

    ~~~ Blog ~~~
    ~~~ PGP-Key ~~~

  3. Folgende Benutzer haben sich für diesen Beitrag bedankt:

    BlackHook (16.01.2018)

  4. #3
    Sobig Wurm Avatar von BlackHook
    Registriert seit
    13.03.2009
    Beiträge
    219

    Standard AW: Problem mit Str_Replace auf dem Server

    Erstmal vielen vielen Dank.
    Bin gerade von der Arbeit gekommen, mache mich gleich an die Datei ran.
    Ich berichte später noch mal wie es geklappt hat.
    Danke noch Mal.

    Edit:
    Ich nehme den Edit zurück. Deine Datei funktioniert. Mein fehlendes Verständnis für PHP war Schuld.
    Abfrage unf Ersatz funktionieren gut.


    Edit: 2
    Bedingungen an sich befinden sich in deinem Code. Außerdem würde ich es mir überlegen, ob ich (online?) ein Script zur Verfügung stelle, womit quasi jeder meine Dateien bearbeiten kann. Ich hätte beispielsweise so die Möglichkeit eine Shell auf deinen Webserver zu pushen.
    Das ist natürlich ein Argument. Mal schauen ob ich es doch anders lösen kann.
    Geändert von BlackHook (16.01.2018 um 19:32 Uhr)

Ähnliche Themen

  1. HL2 DM Server Problem
    Von Jillyboy im Forum Games
    Antworten: 0
    Letzter Beitrag: 08.10.2010, 15:57
  2. Spy-Net Server Problem
    Von r4iden im Forum Erkennung & Hilfe
    Antworten: 2
    Letzter Beitrag: 05.07.2010, 18:10
  3. ftp server problem
    Von Ferdi29 im Forum Netzwerke
    Antworten: 4
    Letzter Beitrag: 27.02.2009, 21:07

Berechtigungen

  • Neue Themen erstellen: Nein
  • Themen beantworten: Nein
  • Anhänge hochladen: Nein
  • Beiträge bearbeiten: Nein
  •