Problem mit Str_Replace auf dem Server


Impeg

Grünschnabel
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:
<?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.
 

guenter024

Erfahrenes Mitglied
Kannst du mal ein Beispiel posten, wie deine AutoUpdater.inf aussieht?


Edit:
Unabhängig davon sollte folgendes passen:
PHP:
// ... code zuvor
if(!empty($inhalt))
  {
    $file[$_GET['zeile'] - 1] = str_replace($_GET['ServerVersion'], $_GET['LocaleVersion'], $file[$_GET['zeile'] - 1]);

    file_put_contents($_GET['datei'],implode($file));

  }
// ... weiterer code
 
Zuletzt bearbeitet:

ComFreek

Mod | @comfreek
Moderator
Der Code in beiden Beiträgen enthält leider sehr viele sicherheitskritische Zeilen, z. B.
PHP:
$file[$_GET['zeile'] - 1] = ...
file_put_contents($_GET['datei'],implode($file));
oder auch
PHP:
echo 'Zeile '.$_GET['zeile'].
Leider fehlt mir das PHP Wissen. PHP möchte ich nicht erlernen, das ist eine einmalige Sache.
Dann beauftrage bitte eine Person, die das nötige Wissen hat. Aktuell hast du ein Skript voller Sicherheitslücken, und auch wenn man die hier alle korrigieren würden, würdest du vielleicht bei einer vermeintlich klitzekleinen Änderung wieder neue einfügen.
 

Impeg

Grünschnabel
@guenter024
Danke für deine Hilfe. Sehr nett von dir.

@ComFreek
Was denkst du , warum ich in einem PHP Forum nach Hilfe gefragt habe?
Was denkst du , warum ich gleich geschrieben habe dass ich keine Ahnung von PHP habe?
Was denkst du , wie wenig hilfreich deine Antwort war?

Das ganze multipliziert mit der Tatsache dass du eine Moderator bist und noch dafür ein "Gefällt mir" von Bratkartoffel bekommen hast ergibt nur eine logische Erkenntnis.
Unreif, inkompetent, fehl am Platz.

Schönen Tag noch. Ein anderer User (kurz bemerkt, aus einem anderen Forum) hat es für mich korrigiert und erklärt.
Hat also das gemacht was ich mir von dir gewünscht hätte.
 

guenter024

Erfahrenes Mitglied

ComFreek

Mod | @comfreek
Moderator
Die Ausgabe im Dokument sollte dann immer mit htmlspecialchars($var) erfolgen.
Kleine Anmerkung noch: Hier bitte auch auf die Attribute von htmlspecialchars achten. In einem HTML-Dokument gibt es auch mehrere Kontexte: HTML 4, HTML 5, innerhalb eines Attributs, innerhalb eines Tags, in einem Kommentar usw. Für Ausgaben innerhalb eines Attributes muss etwa ENT_QUOTES als zweiter Parameter übergegeben werden (ist im Default-Wert bereits inbegriffen.)
 

sheel

I love Asm
@Impeg
Keine Ahnung, ob du das hier liest, aber:
Wir haben hier einen eigenen Bereich für Leute, die einfach nur was fertiges haben wollen.

Und abgesehen von dem einen Satz find ich Comfreeks Antwort eigentlich auch so hilfreich.

...gut, das es inzwischen passt.