PHP - Datei vom Remote-Server lesen

PHP - Datei vom Remote-Server lesen

Ich habe also zwei CentOS-Server.

Auf Server1 habe ich ein Log im Verzeichnis/home/something/logs/latest.log

Auf Server2 habe ich meinen Apache-Server und ich möchte, dass er das Protokoll auf Server1 liest.

Ich muss dies tun, weil ich eine Echtzeitkonsole erstellen möchte, die Daten aus dem Protokoll auf Server1 anzeigt

Ich werde die Daten aus dem Protokoll in einer PHP-Datei abrufen, dann etwas Ajax in einer anderen Datei ausführen und dann habe ich ein Echtzeitprotokoll.

Meine Fragen:

Wie kann ich mit PHP eine Datei von einem Remote-Server lesen?

Kennt jemand eine bessere Lösung?

Antwort1

Ein kurzer Blick in die PHP-Dokumentation zeigt Ihnen, dass das unglaublich einfach ist :-)

Zusammenfassend müssen Sie nur Folgendes tun:

$myfile = file_get_contents("http://server1/blah/blah/file.log");

Hinweis: Damit dies funktioniert, muss die Datei jedoch über einen auf Server1 ausgeführten Webserver zugänglich sein. Da es sich um eine statische Datei handelt, reicht es aus, beispielsweise NginX zu installieren und das Dokument einfach im Standardstammverzeichnis zu platzieren (oder das Standardstammverzeichnis auf den Home-Ordner zu richten), damit Sie den PHP-Aufruf „Dateiinhalt abrufen“ verwenden können.

Wenn das Platzieren eines Webservers auf Server1 KEINE Option ist, müssen Sie im Wesentlichen diese Schritte befolgen.

  • Stellen Sie beispielsweise über SSH/Telnet oder eines der Remote-Kopierdienstprogramme eine Verbindung zu Server1 her, oder richten Sie einen FTP-Server ein und verweisen Sie ihn auf Ihren Home-Ordner.

  • Verwenden Sie eine der vielen Verbindungsmethoden von PHP (welche, hängt von dem oben ausgewählten Dienst ab)

  • Erstellen Sie dann ein Skript, das mithilfe der in Schritt 2 ausgewählten Verbindungsmethode eine Verbindung herstellt, alle erforderlichen Parameter automatisiert und die Verbindung herstellt.

  • Geben Sie nach der Verbindung alle erforderlichen Befehle ein (abhängig von der verwendeten Verbindungsmethode), um die Datei und ihren Inhalt abzurufen.

  • Trennen Sie die Verbindung zum Server und verarbeiten Sie die Datei.

Mit SSH müssen Sie die in PHP integrierten SSH2-Funktionen verwenden (die Dokumentation befindet sich wiederum auf php.net), dort ist eine Klasse dokumentiert, die Sie verwenden können.

Bei Telnet besteht ein ähnlicher Unterschied, aber A) würde ich es nicht empfehlen und B) Sie müssten viel Code schreiben, um das Telnet-Protokoll über Raw Sockets zu unterstützen.

Was FTP betrifft, so verfügt PHP bereits über eine integrierte FTP-Unterstützung (und das schon seit Langem), aber wie bei einem Webserver müssen Sie FTP installieren und einrichten, es sichern und all das Zeug. Wenn Sie das tun, ist es mit einem Webserver einfacher, es zum Laufen zu bringen.

Darüber hinaus könnten Sie die *nix-Philosophie vieler kleiner Tools übernehmen und exec und Systemaufrufe verwenden, um Programme aus Ihrer Linux-Distribution auszuführen, wie etwa „rcopy“, „sftp“ und viele andere. Aber auch das ist eine ziemliche Aufgabe, da man wissen muss, was, wo und wie automatisiert werden muss.

Sie haben auch die Möglichkeit, Ihren eigenen Ad-hoc-Server zu schreiben, der auf einem Socket lauscht und das Protokoll sendet, wenn eine Verbindung hergestellt wird.

Schließlich könnten Sie einen Ordner auch mithilfe von NFS oder Samba freigeben und dann einfach die normalen Aufrufe zum Öffnen/Lesen/Schließen von Dateien verwenden, als wäre die Datei lokal. Dann müssten Sie jedoch Benutzer, Freigaben, Authentifizierung und eine Menge anderer Dinge einrichten.

Welchen Weg Sie wählen, hängt davon ab, wie viel Arbeit Sie bereit sind zu investieren und welche Einschränkungen Sie daran hindern, die hier beschriebenen Methoden zu verwenden.

Mein Rat: Entscheiden Sie sich für die Webserver-Methode, verwenden Sie NginX, die Konfiguration ist minimal, isolieren Sie den Protokolldateiserver hinter verschlossenen Türen und lassen Sie PHP tun, was es gut kann, und greifen Sie über http auf die Datei zu.

verwandte Informationen