Zunächst müssen Sie sicherstellen, dass Ihre PHP -Umgebung FTP -Funktionen unterstützt. Sie können prüfen, ob es aktiviert ist durch:
<span><span><span class="hljs-title function_ invoke__">phpinfo</span></span><span>();
</span></span>
Suchen Sie den FTP -Abschnitt in der Ausgabe, um sicherzustellen, dass die FTP -Erweiterung aktiviert ist. Wenn nicht aktiviert, kann die Erweiterung aktiviert werden, indem die Datei php.ini geändert wird:
<span><span><span class="hljs-attr">extension</span></span><span>=ftp
</span></span>
Starten Sie dann Ihren Webserver neu.
Wir müssen eine Verbindung zum FTP -Server mit den von PHP bereitgestellten FTP_CONNECT- und FTP_LOGIN -Funktionen herstellen.
<span><span><span class="hljs-meta"><?php</span></span><span>
</span><span><span class="hljs-variable">$ftp_server</span></span><span> = </span><span><span class="hljs-string">"ftp.example.com"</span></span><span>; </span><span><span class="hljs-comment">// FTP Serveradresse</span></span><span>
</span><span><span class="hljs-variable">$ftp_user_name</span></span><span> = </span><span><span class="hljs-string">"username"</span></span><span>; </span><span><span class="hljs-comment">// FTP Benutzername</span></span><span>
</span><span><span class="hljs-variable">$ftp_user_pass</span></span><span> = </span><span><span class="hljs-string">"password"</span></span><span>; </span><span><span class="hljs-comment">// FTP Passwort</span></span><span>
</span><span><span class="hljs-comment">// Verbindung zu FTP Server</span></span><span>
</span><span><span class="hljs-variable">$conn_id</span></span><span> = </span><span><span class="hljs-title function_ invoke__">ftp_connect</span></span><span>(</span><span><span class="hljs-variable">$ftp_server</span></span><span>);
</span><span><span class="hljs-comment">// Einloggen FTP Server</span></span><span>
</span><span><span class="hljs-keyword">if</span></span><span> (@</span><span><span class="hljs-title function_ invoke__">ftp_login</span></span><span>(</span><span><span class="hljs-variable">$conn_id</span></span><span>, </span><span><span class="hljs-variable">$ftp_user_name</span></span><span>, </span><span><span class="hljs-variable">$ftp_user_pass</span></span><span>)) {
</span><span><span class="hljs-keyword">echo</span></span><span> </span><span><span class="hljs-string">"成功Verbindung zu <span class="hljs-subst">$ftp_server</span></span></span><span>\n";
} </span><span><span class="hljs-keyword">else</span></span><span> {
</span><span><span class="hljs-keyword">echo</span></span><span> </span><span><span class="hljs-string">"无法Verbindung zu <span class="hljs-subst">$ftp_server</span></span></span><span>\n";
</span><span><span class="hljs-keyword">exit</span></span><span>;
}
</span><span><span class="hljs-meta">?></span></span><span>
</span></span>
Der obige Code stellt über ftp_connect eine Verbindung zum FTP -Server her und verwendet FTP_Login zur Authentifizierung.
Die Funktion FTP_RAWLIST gibt die ursprüngliche Liste der vom Server angegebenen Verzeichnisse zurück. Diese Liste enthält Details für jede Datei oder jedes Verzeichnis, z. B. Berechtigungen, Größe, Datum usw. Durch die Analyse dieser Informationen können wir feststellen, ob eine Datei bereits vorhanden ist, und entscheiden, ob sie hochgeladen oder überschrieben werden sollen.
<span><span><span class="hljs-meta"><?php</span></span><span>
</span><span><span class="hljs-comment">// Holen Sie sich die Dateiliste des Stammverzeichnisses</span></span><span>
</span><span><span class="hljs-variable">$remote_dir</span></span><span> = </span><span><span class="hljs-string">"/"</span></span><span>;
</span><span><span class="hljs-variable">$file_list</span></span><span> = </span><span><span class="hljs-title function_ invoke__">ftp_rawlist</span></span><span>(</span><span><span class="hljs-variable">$conn_id</span></span><span>, </span><span><span class="hljs-variable">$remote_dir</span></span><span>);
</span><span><span class="hljs-comment">// Ausgeben die erhaltene Dateiliste</span></span><span>
</span><span><span class="hljs-title function_ invoke__">print_r</span></span><span>(</span><span><span class="hljs-variable">$file_list</span></span><span>);
</span><span><span class="hljs-meta">?></span></span><span>
</span></span>
Nach der Ausführung des oben genannten Code wird eine Liste von Dateien ähnlich wie das folgende Format zurückgegeben:
<span><span>Array
(
[0] => drwxr-xr-x 2 1000 1000 4096 May 7 12:30 public_html
[1] => -rw-r--r-- 1 1000 1000 2048 May 7 12:35 index.php
[2] => -rw-r--r-- 1 1000 1000 1024 May 7 12:36 style.css
)
</span></span>
Durch die Analyse dieser Informationen können wir Skripte schreiben, um zu überprüfen, ob eine Datei bereits vorhanden ist, oder die Änderungszeit der Datei abrufen, wodurch festgelegt wird, ob die Datei hochgeladen werden muss.
Angenommen, wir haben einen lokalen Bereitstellungsordner und möchten ihn mit Dateien auf dem Remote -Server vergleichen. Wir können FTP_RAWLIST verwenden, um den Zeitstempel und die Größe der Remotedatei zu erhalten und die Informationen der lokalen Datei zu kombinieren, um zu entscheiden, ob hochgeladen werden soll.
<span><span><span class="hljs-meta"><?php</span></span><span>
</span><span><span class="hljs-comment">// Lokaler Dateipfad</span></span><span>
</span><span><span class="hljs-variable">$local_file</span></span><span> = </span><span><span class="hljs-string">'path/to/local/index.php'</span></span><span>;
</span><span><span class="hljs-variable">$remote_file</span></span><span> = </span><span><span class="hljs-string">'index.php'</span></span><span>;
</span><span><span class="hljs-comment">// Erhalten Sie die Änderungszeit der lokalen Dateien</span></span><span>
</span><span><span class="hljs-variable">$local_file_time</span></span><span> = </span><span><span class="hljs-title function_ invoke__">filemtime</span></span><span>(</span><span><span class="hljs-variable">$local_file</span></span><span>);
</span><span><span class="hljs-comment">// Erhalten Sie detaillierte Informationen zu Remotedateien</span></span><span>
</span><span><span class="hljs-variable">$remote_file_info</span></span><span> = </span><span><span class="hljs-title function_ invoke__">ftp_rawlist</span></span><span>(</span><span><span class="hljs-variable">$conn_id</span></span><span>, </span><span><span class="hljs-variable">$remote_file</span></span><span>);
</span><span><span class="hljs-variable">$remote_file_info</span></span><span> = </span><span><span class="hljs-title function_ invoke__">explode</span></span><span>(</span><span><span class="hljs-string">" "</span></span><span>, </span><span><span class="hljs-variable">$remote_file_info</span></span><span>[</span><span><span class="hljs-number">0</span></span><span>]);
</span><span><span class="hljs-variable">$remote_file_time</span></span><span> = </span><span><span class="hljs-title function_ invoke__">strtotime</span></span><span>(</span><span><span class="hljs-variable">$remote_file_info</span></span><span>[</span><span><span class="hljs-number">5</span></span><span>] . </span><span><span class="hljs-string">' '</span></span><span> . </span><span><span class="hljs-variable">$remote_file_info</span></span><span>[</span><span><span class="hljs-number">6</span></span><span>] . </span><span><span class="hljs-string">' '</span></span><span> . </span><span><span class="hljs-variable">$remote_file_info</span></span><span>[</span><span><span class="hljs-number">7</span></span><span>]);
</span><span><span class="hljs-comment">// Vergleichen Sie die Dateizeit,Entscheiden Sie, ob Sie hochladen möchten</span></span><span>
</span><span><span class="hljs-keyword">if</span></span><span> (</span><span><span class="hljs-variable">$local_file_time</span></span><span> > </span><span><span class="hljs-variable">$remote_file_time</span></span><span>) {
</span><span><span class="hljs-comment">// Datei hochladen</span></span><span>
</span><span><span class="hljs-keyword">if</span></span><span> (</span><span><span class="hljs-title function_ invoke__">ftp_put</span></span><span>(</span><span><span class="hljs-variable">$conn_id</span></span><span>, </span><span><span class="hljs-variable">$remote_file</span></span><span>, </span><span><span class="hljs-variable">$local_file</span></span><span>, FTP_BINARY)) {
</span><span><span class="hljs-keyword">echo</span></span><span> </span><span><span class="hljs-string">"dokumentieren <span class="hljs-subst">$local_file</span></span></span><span> Erfolgreich hochladen!\n";
} </span><span><span class="hljs-keyword">else</span></span><span> {
</span><span><span class="hljs-keyword">echo</span></span><span> </span><span><span class="hljs-string">"dokumentieren <span class="hljs-subst">$local_file</span></span></span><span> Upload fehlgeschlagen!\n";
}
} </span><span><span class="hljs-keyword">else</span></span><span> {
</span><span><span class="hljs-keyword">echo</span></span><span> </span><span><span class="hljs-string">"远程dokumentieren已经是最新的,Kein Upload erforderlich。\n"</span></span><span>;
}
</span><span><span class="hljs-meta">?></span></span><span>
</span></span>
Jetzt kombinieren wir alle Teile und schreiben ein automatisiertes Bereitstellungsskript. Dieses Skript bestimmt automatisch, welche Dateien aktualisiert und auf den Remote -Server hochgeladen werden müssen.
<span><span><span class="hljs-meta"><?php</span></span><span>
</span><span><span class="hljs-variable">$ftp_server</span></span><span> = </span><span><span class="hljs-string">"ftp.example.com"</span></span><span>;
</span><span><span class="hljs-variable">$ftp_user_name</span></span><span> = </span><span><span class="hljs-string">"username"</span></span><span>;
</span><span><span class="hljs-variable">$ftp_user_pass</span></span><span> = </span><span><span class="hljs-string">"password"</span></span><span>;
</span><span><span class="hljs-comment">// Verbindung zu FTP Server</span></span><span>
</span><span><span class="hljs-variable">$conn_id</span></span><span> = </span><span><span class="hljs-title function_ invoke__">ftp_connect</span></span><span>(</span><span><span class="hljs-variable">$ftp_server</span></span><span>);
</span><span><span class="hljs-keyword">if</span></span><span> (!@</span><span><span class="hljs-title function_ invoke__">ftp_login</span></span><span>(</span><span><span class="hljs-variable">$conn_id</span></span><span>, </span><span><span class="hljs-variable">$ftp_user_name</span></span><span>, </span><span><span class="hljs-variable">$ftp_user_pass</span></span><span>)) {
</span><span><span class="hljs-keyword">echo</span></span><span> </span><span><span class="hljs-string">"无法Verbindung zu <span class="hljs-subst">$ftp_server</span></span></span><span>\n";
</span><span><span class="hljs-keyword">exit</span></span><span>;
}
</span><span><span class="hljs-comment">// 本地部署dokumentieren夹</span></span><span>
</span><span><span class="hljs-variable">$local_dir</span></span><span> = </span><span><span class="hljs-string">"path/to/local/files/"</span></span><span>;
</span><span><span class="hljs-variable">$remote_dir</span></span><span> = </span><span><span class="hljs-string">"/"</span></span><span>;
</span><span><span class="hljs-comment">// 获取本地dokumentieren列表</span></span><span>
</span><span><span class="hljs-variable">$local_files</span></span><span> = </span><span><span class="hljs-keyword">new</span></span><span> </span><span><span class="hljs-built_in">RecursiveIteratorIterator</span></span><span>(
</span><span><span class="hljs-keyword">new</span></span><span> </span><span><span class="hljs-built_in">RecursiveDirectoryIterator</span></span><span>(</span><span><span class="hljs-variable">$local_dir</span></span><span>),
</span><span><span class="hljs-title class_">RecursiveIteratorIterator</span></span><span>::</span><span><span class="hljs-variable constant_">LEAVES_ONLY</span></span><span>
);
</span><span><span class="hljs-keyword">foreach</span></span><span> (</span><span><span class="hljs-variable">$local_files</span></span><span> </span><span><span class="hljs-keyword">as</span></span><span> </span><span><span class="hljs-variable">$local_file</span></span><span>) {
</span><span><span class="hljs-keyword">if</span></span><span> (</span><span><span class="hljs-variable">$local_file</span></span><span>-></span><span><span class="hljs-title function_ invoke__">isDir</span></span><span>()) {
</span><span><span class="hljs-keyword">continue</span></span><span>;
}
</span><span><span class="hljs-comment">// Holen Sie sich den relativen Weg</span></span><span>
</span><span><span class="hljs-variable">$relative_path</span></span><span> = </span><span><span class="hljs-title function_ invoke__">substr</span></span><span>(</span><span><span class="hljs-variable">$local_file</span></span><span>-></span><span><span class="hljs-title function_ invoke__">getRealPath</span></span><span>(), </span><span><span class="hljs-title function_ invoke__">strlen</span></span><span>(</span><span><span class="hljs-variable">$local_dir</span></span><span>));
</span><span><span class="hljs-comment">// Erhalten Sie detaillierte Informationen zu Remotedateien</span></span><span>
</span><span><span class="hljs-variable">$remote_file</span></span><span> = </span><span><span class="hljs-variable">$remote_dir</span></span><span> . </span><span><span class="hljs-variable">$relative_path</span></span><span>;
</span><span><span class="hljs-variable">$remote_file_info</span></span><span> = </span><span><span class="hljs-title function_ invoke__">ftp_rawlist</span></span><span>(</span><span><span class="hljs-variable">$conn_id</span></span><span>, </span><span><span class="hljs-variable">$remote_file</span></span><span>);
</span><span><span class="hljs-keyword">if</span></span><span> (</span><span><span class="hljs-variable">$remote_file_info</span></span><span>) {
</span><span><span class="hljs-comment">// dokumentieren已存在,Zeit vergleichen</span></span><span>
</span><span><span class="hljs-variable">$remote_file_info</span></span><span> = </span><span><span class="hljs-title function_ invoke__">explode</span></span><span>(</span><span><span class="hljs-string">" "</span></span><span>, </span><span><span class="hljs-variable">$remote_file_info</span></span><span>[</span><span><span class="hljs-number">0</span></span><span>]);
</span><span><span class="hljs-variable">$remote_file_time</span></span><span> = </span><span><span class="hljs-title function_ invoke__">strtotime</span></span><span>(</span><span><span class="hljs-variable">$remote_file_info</span></span><span>[</span><span><span class="hljs-number">5</span></span><span>] . </span><span><span class="hljs-string">' '</span></span><span> . </span><span><span class="hljs-variable">$remote_file_info</span></span><span>[</span><span><span class="hljs-number">6</span></span><span>] . </span><span><span class="hljs-string">' '</span></span><span> . </span><span><span class="hljs-variable">$remote_file_info</span></span><span>[</span><span><span class="hljs-number">7</span></span><span>]);
</span><span><span class="hljs-variable">$local_file_time</span></span><span> = </span><span><span class="hljs-title function_ invoke__">filemtime</span></span><span>(</span><span><span class="hljs-variable">$local_file</span></span><span>-></span><span><span class="hljs-title function_ invoke__">getRealPath</span></span><span>());
</span><span><span class="hljs-comment">// 如果本地dokumentieren较新,Hochladen</span></span><span>
</span><span><span class="hljs-keyword">if</span></span><span> (</span><span><span class="hljs-variable">$local_file_time</span></span><span> > </span><span><span class="hljs-variable">$remote_file_time</span></span><span>) {
</span><span><span class="hljs-keyword">if</span></span><span> (</span><span><span class="hljs-title function_ invoke__">ftp_put</span></span><span>(</span><span><span class="hljs-variable">$conn_id</span></span><span>, </span><span><span class="hljs-variable">$remote_file</span></span><span>, </span><span><span class="hljs-variable">$local_file</span></span><span>-></span><span><span class="hljs-title function_ invoke__">getRealPath</span></span><span>(), FTP_BINARY)) {
</span><span><span class="hljs-keyword">echo</span></span><span> </span><span><span class="hljs-string">"dokumentieren <span class="hljs-subst">$relative_path</span></span></span><span> Erfolgreich aktualisieren!\n";
} </span><span><span class="hljs-keyword">else</span></span><span> {
</span><span><span class="hljs-keyword">echo</span></span><span> </span><span><span class="hljs-string">"dokumentieren <span class="hljs-subst">$relative_path</span></span></span><span> Update fehlgeschlagen!\n";
}
}
} </span><span><span class="hljs-keyword">else</span></span><span> {
</span><span><span class="hljs-comment">// dokumentieren不存在,Direkt hochladen</span></span><span>
</span><span><span class="hljs-keyword">if</span></span><span> (</span><span><span class="hljs-title function_ invoke__">ftp_put</span></span><span>(</span><span><span class="hljs-variable">$conn_id</span></span><span>, </span><span><span class="hljs-variable">$remote_file</span></span><span>, </span><span><span class="hljs-variable">$local_file</span></span><span>-></span><span><span class="hljs-title function_ invoke__">getRealPath</span></span><span>(), FTP_BINARY)) {
</span><span><span class="hljs-keyword">echo</span></span><span> </span><span><span class="hljs-string">"dokumentieren <span class="hljs-subst">$relative_path</span></span></span><span> Erfolgreich hochladen!\n";
} </span><span><span class="hljs-keyword">else</span></span><span> {
</span><span><span class="hljs-keyword">echo</span></span><span> </span><span><span class="hljs-string">"dokumentieren <span class="hljs-subst">$relative_path</span></span></span><span> Upload fehlgeschlagen!\n";
}
}
}
</span><span><span class="hljs-comment">// Schließung FTP verbinden</span></span><span>
</span><span><span class="hljs-title function_ invoke__">ftp_close</span></span><span>(</span><span><span class="hljs-variable">$conn_id</span></span><span>);
</span><span><span class="hljs-meta">?></span></span><span>
</span></span>
Über die Funktion ftp_rawlist können wir problemlos detaillierte Informationen über Dateien auf dem Remote -Server abrufen. Basierend auf der Zeit und Größe der Dateiänderung können wir feststellen, ob wir eine neue Datei hochladen oder die vorhandene Datei überschreiben müssen. Diese Methode ist sehr geeignet für die automatisierte Bereitstellung, wodurch manuelle Vorgänge effektiv reduzieren und die Bereitstellungseffizienz verbessern können.
Mit diesem einfachen PHP -Skript können Sie FTP -Uploads mit automatisierter Bereitstellung kombinieren, um eine intelligente Dateisynchronisation und -aktualisierungen zu erzielen.