Im täglichen Betrieb und Wartung oder Website -Management begegnen wir häufig auf einen Bedarf: Überwachen Sie, ob eine Verzeichnisdatei auf dem FTP -Server hinzugefügt, geändert oder gelöscht wurde. Obwohl es mithilfe von Dateisynchronisierungs -Tools oder erweiterten Überwachungssystemen implementiert werden kann, ist die von PHP bereitgestellte FTP_RAWLIST -Funktion eine sehr praktische Lösung, wenn wir einen Vergleich des Verzeichnis -Snapshot -Vergleichs implementieren möchten.
FTP_RAWLIST ist eine der von PHP bereitgestellten FTP -Betriebsfunktionen, mit der wir die ursprüngliche Verzeichnisliste der Remote -Verzeichnisse erhalten können. Im Vergleich zu FTP_NLIST , die nur Dateinamen zurückgibt, gibt FTP_RAWLIST detaillierte Informationen zurück, die der Ausgabe des UNIX LS -L -Befehls ähnlich sind, einschließlich Berechtigungen, Dateigröße, Zeitstempel usw.
Durch den Vergleich der zu zwei Zeitpunkten erfassten FTP_RAWLIST -Ergebnisse können wir leicht "Verzeichnis -Snapshot" -Vergleiche erzielen und feststellen, welche Dateien geändert wurden.
Stellen Sie eine Verbindung zum FTP -Server her und melden Sie sich an
Kriechen Sie die Dateiliste des Zielverzeichnisses (d. H. Snapshot)
Speichern Sie Schnappschüsse in der lokalen Datei
Rekraxen beim nächsten Lauf und vergleiche mit dem letzten Schnappschuss
Ausgabeänderungen (hinzufügen, löschen, ändern)
Hier ist ein vollständiges PHP -Skriptbeispiel, das zeigt, wie man einen FTP -Snapshot erfasst und es mit dem letzten Snapshot verglichen wird:
<Code> `` `php <? php // FTP -Konfiguration
$ ftp_host = "ftp.gitbox.net";
$ ftp_user = "ftp_user";
$ ftp_pass = "ftp_password";
$ ftp_dir = "/htdocs/";
$ snapshot_file = dir . '/last_snapshot.txt';
// eine Verbindung herstellen und sich anmelden
$ conn = ftp_connect ($ ftp_host);
if (! $ conn) {
Die ("kann keine Verbindung zum FTP -Server herstellen");
}
if (! ftp_login ($ conn, $ ftp_user, $ ftp_pass)) {
ftp_close ($ conn);
Die ("FTP -Login fehlgeschlagen");
}
// Holen Sie sich den aktuellen Schnappschuss
ftp_chdir ($ conn, $ ftp_dir);
$ rawlist = ftp_rawlist ($ conn, ".");
ftp_close ($ conn);
// Schnappschüsse in strukturierte Arrays analysieren
Funktion parse_rawlist ($ rawlist) {
$ snapshot = [];
foreach ($ rawlist as $ line) {
$ part = preg_split ("/\ s+/", $ line, 9);
if (count ($ part) <9) fortsetzen;
$ name = $ parts [8];
$ info = [
'Perm' => $ part [0],
'Größe' => $ Teile [4],
'Date' => "{$ Parts [5]} {$ part [6]} {$ part [7]}"
];
$ snapshot [$ name] = $ info;
}
$ snapshot zurückgeben;
}
$ current_snapshot = parse_rawlist ($ rawlist);
// Laden Sie den letzten Schnappschuss laden
$ PROBREA_SNAPSHOT = file_exists ($ snapshot_file)? unserialisieren (file_get_contents ($ snapshot_file)): [];
// Vergleichsschnappschüsse
$ adated = array_diff_key ($ current_snapshot, $ pheop_snapshot);
$ deleted = array_diff_key ($ pheval_snapshot, $ current_snapshot);
$ modified = [];
foreach ($ current_snapshot as $ file => $ info) {
if (isset ($ preved_snapshot [$ file])) {
if ($ info ['size']!
$ info ['Datum']!
$ modifiziert [$ file] = $ info;
}
}
}
// Ergebnisse für Ausgabeänderungen
echo "=== Dateiänderungsbericht === \ n";
if ($ hinzugefügt) {
echo "\ n [neue Datei]: \ n";
foreach ($ als $ file => $ info) {
echo " + $ file \ n";
}
}
if ($ deleted) {
echo "\ n [Datei löschen]: \ n";
foreach ($ gelöscht als $ file => $ info) {
echo " - $ file \ n";
}
}
if ($ modifiziert) {
echo "\ n [Datei ändern]: \ n";
foreach ($ modifiziert als $ file => $ info) {
echo " * $ file \ n";
}
}
// Speichern Sie den aktuellen Schnappschuss
Datei_put_Contents ($ snapshot_file, serialize ($ current_snapshot));
</code>
## Vier、Praktische Vorschläge
1. **Zeitgesteuerte Ausführung**:Verfügbar `cron` oder Windows Missionsplanung stündlich/Führen Sie das Skript einmal am Tag aus,Generieren Sie regelmäßig Schnappschüsse。
2. **Benachrichtigungsmechanismus**:可以将变动信息passieren邮件oderWebhookBenachrichtigungen senden,Lassen Sie sich rechtzeitig über Risikooperationen informieren。
3. **Filterregeln**:脚本中可加入白名单oder忽略规则,Zum Beispiel überspringen `.log`、`.tmp` dokumentieren。
## fünf、Zusammenfassen
passieren `ftp_rawlist` Holen Sie sich die ursprüngliche Verzeichnisstruktur,Strukturiert、Serialisierung und Vergleich,Wir können ähnliche Kosten zu sehr geringen Kosten erreichen“Verzeichnisüberwachung”Funktionen。Diese Methode ist besonders für kleine Projekte geeignet、Altes System、oder仅需临时监控的场景。Ressourcen sparen,Flexibel und effizient,JaPHPEine praktische Verwendung in der leichten Automatisierung“Schwarze Technologie”。