Kalle_B: Programme automatisch updaten

Hallöle,

für einen Kunden habe ich einen Hauptserver im Web und einen Ersatzserver, für den Fall, dass der Hauptserver ausfällt.

PHP- Programme werden auf den Hauptserver geladen. Vom Hauptserver können DB-Tabellen auf den Ersatzserver kopiert werden. Die Daten auf dem Ersatzserver sind also okay, aber die Programme nicht.

Ich hätte gerne ein halbautomatisches Programmupdate für den Ersatzserver. Möchte ein Programm aufrufen, das die aktuellen Programme vom Hauptserver kopiert.

Kann ich mit PHP (Ersatzserver) bestimmte Verzeichnisse eines anderen Servers (Hauptserver) auslesen und die Dateinamen und deren Datum erhalten? Dann könnte ich mit dem eigenen Datum vergleichen und dann ...

Ja, wie bekomme ich dann die PHP- Scripts vom Hauptserver kopiert?

MfG Kalle

  1. hallo,

    für einen Kunden habe ich einen Hauptserver im Web und einen Ersatzserver, für den Fall, dass der Hauptserver ausfällt.

    Upsa. Du solltest zuallererst erklären, was du unter "Hauptserver" und "Ersatzserver" verstehst - worin sich die beiden technisch unterscheiden, wie sie erreichbar sind, und wie sie administriert werden.

    PHP- Programme werden auf den Hauptserver geladen.

    Öhm ... "PHP-Programme"? Was ist das?

    Vom Hauptserver können DB-Tabellen auf den Ersatzserver kopiert werden.

    Prima - und wie funktioniert das?

    Die Daten auf dem Ersatzserver sind also okay, aber die Programme nicht.

    Auweia. Nur: wie sollen "wir" jetzt verstehen, warum das so ist? Und was die nicht funktionierenden "Programme" denn eigentlich sind? Gibt es irgendwelche logs?

    Ich hätte gerne ein halbautomatisches Programmupdate

    Was meinst du mit "halbautomatisch"?

    Kann ich mit PHP (Ersatzserver) bestimmte Verzeichnisse eines anderen Servers (Hauptserver) auslesen und die Dateinamen und deren Datum erhalten?

    Vermutlich kannst du das, ja.

    Ja, wie bekomme ich dann die PHP- Scripts vom Hauptserver kopiert?

    Das einfachste ist bei dem derzeitigen Stand deiner Mitteilung: lade deine Scripts ganz einfach per FTP genauso auf den "Ersatz-Server" wie sie auf den "Hauptserver" geladen wurden. Ansonst ist dein Problem und die Differenzierung zwischen "Hauptserver" und "Ersatzserver" so gut wie gar nicht nachvollziehbar.

    Eventuell hilft es, wenn du deine Problembeschreibung geringfügig genauer darstellst.

    Grüße aus Berlin

    Christoph S.

    --
    Visitenkarte
    ss:| zu:) ls:& fo:) va:) sh:| rl:|
    1. hallo, Christoph

      Du solltest zuallererst erklären, was du unter "Hauptserver" und "Ersatzserver" verstehst - worin sich die beiden technisch unterscheiden, wie sie erreichbar sind, und wie sie administriert werden.

      Hauptserver:  http://abc.de bei Provider 1
      Ersatzserver: http://def.de bei Provider 2

      Öhm ... "PHP-Programme"? Was ist das?

      Textdateien mit der Endung .php

      Prima - und wie funktioniert das?

      Ist nicht das Thema. Prinzip: Hauptserver greift auf seine eigene DB und die vom Ersatzserver zu. Nun liest und schreibt er.

      Die Daten auf dem Ersatzserver sind also okay, aber die Programme nicht.
      Auweia. Nur: wie sollen "wir" jetzt verstehen, warum das so ist?

      Weil ich die Programme nicht per FTP hochgeladen habe.

      Ich hätte gerne ein halbautomatisches Programmupdate
      Was meinst du mit "halbautomatisch"?

      Manuell anstossen, dann läufts von selbst ab. Automatisch (selbst tun) wäre ein CRON- Job.

      Kann ich mit PHP (Ersatzserver) bestimmte Verzeichnisse eines anderen Servers (Hauptserver) auslesen und die Dateinamen und deren Datum erhalten?
      Vermutlich kannst du das, ja.

      Okay, richtige Antwort auf falsche Frage. Wie kann ich ... ?

      Das einfachste ist bei dem derzeitigen Stand deiner Mitteilung: lade deine Scripts ganz einfach per FTP genauso auf den "Ersatz-Server" wie sie auf den "Hauptserver" geladen wurden.

      Das ist der Kern des Problems. Es gibt 185 Dateien in 13 Ordnern. Da ist's mit der Übersicht über die Programmstände schnell vorbei. Ich suche nach einer Möglichkeit, die zuverlässig und "halbautomatisch" vom Hauptserver zu holen.

      Dann könnte der Kunde die aktuellen .php- Dateien auch auf seinen PC holen und offline fahren. Da komme ich mit FTP nie hin.

      Eventuell hilft es, wenn du deine Problembeschreibung geringfügig genauer darstellst.

      Ja, sicher.

      Lieben Gruß, Kalle

      1. Mahlzeit,

        Öhm ... "PHP-Programme"? Was ist das?
        Textdateien mit der Endung .php

        Aha. Ich wusste gar nicht, dass das Programme sind. Ich dachte immer, dass das Skripte sind, die vom PHP-Interpreter geparst und ausgeführt werden.

        Die Daten auf dem Ersatzserver sind also okay, aber die Programme nicht.
        Auweia. Nur: wie sollen "wir" jetzt verstehen, warum das so ist?
        Weil ich die Programme nicht per FTP hochgeladen habe.

        Und warum tust Du das nicht? Du schreibst zwar was von ...

        185 Dateien in 13 Ordnern. Da ist's mit der Übersicht über die Programmstände schnell vorbei.

        ... aber schließlich schaffst Du es ja anscheinend auch, den "Hauptserver" mit den richtigen Skripten zu füttern - wieso kopierst Du diese dann nicht auch auf den "Ersatzserver"?

        Ich suche nach einer Möglichkeit, die zuverlässig und "halbautomatisch" vom Hauptserver zu holen.

        Falsche Vorgehensweise. Meine Empfehlung: lege Dir ein Versionierungs- bzw. Quellcodeverwaltungssystem (CVS oder ähnliche - einfach mal Deinen Freund befragen) zu, in dem sämtliche Dateien verwaltet werden. Wenn nun eine bestimmte Version fertig entwickelt ist und auf die Server hochgeladen werden soll, checkst Du sie dort einfach aus und fertig. So kannst Du sicher sein, dass auf beiden Servern immer der gleiche Inhalt vorhanden ist.

        Dann könnte der Kunde die aktuellen .php- Dateien auch auf seinen PC holen und offline fahren. Da komme ich mit FTP nie hin.

        Aus einem CVS könnte sich der Kunde auch immer den aktuellen Stand aller Dateien holen.

        Eventuell hilft es, wenn du deine Problembeschreibung geringfügig genauer darstellst.
        Ja, sicher.

        Dann tu's doch. :-)

        MfG,
        EKKi

        --
        sh:( fo:| ch:? rl:( br:> n4:~ ie:% mo:} va:) de:] zu:) fl:{ ss:) ls:& js:|
  2. Hallo Kalle,

    eine heftige Diskussion über die Verwendung des Systemdatums für den Vergleich von Dateien gab es hier schon mal.

    Es scheint nach reiflicher Überlegung besser zu sein, in die Dateien selbst etwas einzubauen, um sie identifizieren zu können. Da es sich bei PHP-Dateien um Textdateien handelt, ist das im Kopf (oder sonstwo) einer Datei doch ohne weiteres möglich.

    Dazu musst Du dann zwar die Datei erst öffnen und z.B. die ersten 256 Byte auslesen lassen, aber das sollte auf heutigen Systemen auch kein Problem mehr sein, ein Werkzeug dafür bereit zu halten.

    LG
    Chris©

  3. Ja, wie bekomme ich dann die PHP- Scripts vom Hauptserver kopiert?

    Nimm rsync, das kannst du scripten und konfigurieren, wie du willst.

    1. Nimm rsync

      Ist nur zum Update für vorhandene Dateien. Ich möchte auch neue Dateien laden können.

      Kalle

      1. Ist nur zum Update für vorhandene Dateien. Ich möchte auch neue Dateien laden können.

        Hä? rsync macht inkrementelle Backups, löscht Dateien im Backup, wenn sie im Original gelöscht wurden, legt Dateien neu an usw .....

        Wenn du aber nur Scriptdateien bearbeiten willst, ist vielleicht subversion was für dich.

  4. es geht um einen Kunden, dem ich auf einfache Weise das Kopieren aktueller Dateien von der Domain http://abc.de auf eine andere Domain oder seinen Laptop ermöglichen möchte.

    Profisysteme wie CVS, in die ich mich selbst tagelang einarbeiten müsste, scheiden aus.

    Dateien kopieren von einer Domain geht:
      $lines = file( 'http://abc.de/test.htm' );
      $out = fopen( $output_file, "w" ); // w = write (zum Schreiben oeffnen
      if ( $out )
      {
        foreach ( $lines as $line_num => $line )
        {
          echo "Line #<b>{$line_num}</b> : " . htmlspecialchars($line);
          fwrite( $out, $line );
        }
        fclose( $out );
      }

    Was nicht funzt, ist die Abfrage des Dateidatums auf http://abc.de, ich kann nicht sehen, ob die Datei aktueller ist als die Kopie.

    Und auf Verdacht knapp 200 Dateien in 13 Ordenern zu kopieren, ist unsinnig und knackt wahrscheinlich die Laufzeitgrenze für ein PHP- Script.

    Also muss ich wohl auf http://abc.de eine DB-Tabelle einrichten, in die die Dateinamen und -datümer geschrieben werden. Die könnte ich aus der Ferne abfragen und vergleichen.

    Ist Aufwand, scheint aber sauber zu sein. Muss nur schauen, ob auch die Dateizeit brauchbar ist zum Vergleich. Ein Server könnte ja in Tumbuktu stehen.

    LG Kalle

    1. Dateien kopieren von einer Domain geht:
        $lines = file( 'http://abc.de/test.htm' );

      Ich dachte, du willst die PHP-Dateien kopieren. Hier kopierst du aber nur den erzeigten HTML-Code. Entweder ist dein Lösungsansatz falsch oder du hast uns eine falsche Aufgabenstellung beschrieben.

      1. Dateien kopieren von einer Domain geht:
          $lines = file( 'http://abc.de/test.htm' );

        Ich dachte, du willst die PHP-Dateien kopieren. Hier kopierst du aber nur den erzeigten HTML-Code. Entweder ist dein Lösungsansatz falsch oder du hast uns eine falsche Aufgabenstellung beschrieben.

        Du hast recht, deshalb muss ich auf dem Hauptserver (Sender) ein Programm installieren, das den PHP- Code ausliest und übermittelt.

        Das Progrämmchen habe ich heute gemacht und festgestellt, dass man es natürlich mit jedem Browser aufrufen kann. Und auch die PHP- Dateien, die den Zugriff auf die Datenbank ermöglichen mit Passwort. Das Programm unterläuft also den Passwortschutz für den Ordner, in dem "kritische" includes liegen.

        Also muss ich sicherheitskritische Dateien verbieten und die Übertragung verschlüsseln.

        Fortsetzung hier: https://forum.selfhtml.org/?t=169920&m=1110084

        Kalle

        1. --- snipped ---

          Und du glaubst wirklich es geht schneller als sich 2 Stunden in Subversion einzuarbeiten und dann den Abgleich per "svn up" zu machen?

          Es ist natürlich deine Sache, ich halte deine Lösung für suboptimal.