In der tatsächlichen Entwicklung müssen Laravel-Projekte häufig mit Remote-FTP-Servern interagieren, z. B. das Abrufen von Remote-Verzeichnis-Dateilisten, das Hochladen oder Herunterladen von Dateien usw. Die integrierte FTP_RAWLIST -Funktion von PHP liefert die Funktion zum Erhalt detaillierter Informationen über die FTP-Server-Verzeichnisdatei. In Kombination mit dem Laravel -Framework kann die Remote -FTP -Dateiverwaltung einfach implementiert werden.
In diesem Artikel wird detailliert eingeführt, wie die Funktion ftp_rawlist verwendet wird, um die Verwaltung von Remote -FTP -Dateien im Laravel -Projekt zu implementieren, einschließlich der Verbindung zum FTP -Server, das Erhalten von Dateilisten und das Parsen und das Anzeigen von Dateiinformationen.
In Laravel wird empfohlen, die Konfigurationsinformationen der FTP -Verbindung in der .Env -Umgebungsdatei zu platzieren, um das Management und die Umschaltung zu erleichtern.
// .env
FTP_HOST=gitbox.net
FTP_USERNAME=your_username
FTP_PASSWORD=your_password
FTP_PORT=21
Verwenden Sie diese Konfigurationen in Ihrem Code, um eine Verbindung zum FTP -Server herzustellen:
<?php
$ftpHost = env('FTP_HOST');
$ftpUsername = env('FTP_USERNAME');
$ftpPassword = env('FTP_PASSWORD');
$ftpPort = env('FTP_PORT', 21);
// GründenFTPverbinden
$connId = ftp_connect($ftpHost, $ftpPort);
if (!$connId) {
die('无法verbinden到FTPServer');
}
// Einloggen
$loginResult = ftp_login($connId, $ftpUsername, $ftpPassword);
if (!$loginResult) {
ftp_close($connId);
die('FTPEinloggen失败');
}
// Wechseln Sie in den passiven Modus(Falls nötig)
ftp_pasv($connId, true);
Die Funktion FTP_RAWLIST kann detaillierte Informationen zu Dateien und Verzeichnissen im angegebenen Verzeichnis erhalten, ähnlich der Ausgabe des LS -L -Befehls im Linux -System. Der Rückgabewert ist eine Reihe von Zeichenfolgen. Jedes Element ist eine Reihe von Verzeichnisinformationen.
Beispiel, um die Liste der Root -Verzeichnisdateien zu erhalten:
<?php
$directory = '/'; // Remote -Verzeichnispfad
$fileList = ftp_rawlist($connId, $directory);
if ($fileList === false) {
echo "Fehlgeschlagen, Dateiliste zu erhalten";
} else {
foreach ($fileList as $fileInfo) {
echo $fileInfo . PHP_EOL;
}
}
Ausgangsbeispiel:
drwxr-xr-x 2 user group 4096 May 22 10:00 folder1
-rw-r--r-- 1 user group 1024 May 21 15:30 file1.txt
Jede von FTP_RAWLIST zurückgegebene Informationszeile enthält Berechtigungen, Eigentümer, Dateigröße, Änderungszeit, Dateiname usw. Normalerweise müssen wir für nachfolgende Operationen in eine Array -Struktur analysieren.
Einfaches Parsing -Beispiel:
<?php
function parseRawList($rawList) {
$result = [];
foreach ($rawList as $line) {
$parts = preg_split('/\s+/', $line, 9);
if (count($parts) < 9) continue;
list($permissions, $links, $owner, $group, $size, $month, $day, $timeOrYear, $name) = $parts;
$result[] = [
'permissions' => $permissions,
'links' => $links,
'owner' => $owner,
'group' => $group,
'size' => $size,
'modified' => "$month $day $timeOrYear",
'name' => $name,
'is_dir' => $permissions[0] === 'd',
];
}
return $result;
}
$parsedFiles = parseRawList($fileList);
foreach ($parsedFiles as $file) {
echo ($file['is_dir'] ? '[Inhaltsverzeichnis]' : '[dokumentieren]') . " {$file['name']} Größe: {$file['size']} Änderungszeit: {$file['modified']}" . PHP_EOL;
}
Schließen Sie nach Abschluss des Betriebs die Verbindung und geben Sie die Ressource frei:
<?php
ftp_close($connId);
Um die Wiederverwendbarkeit zu verbessern, kann eine FTP -Dienstklasse eingekapselt werden und die Funktion der Dateilistenerfassung kann bereitgestellt werden:
<?php
namespace App\Services;
class FtpService
{
protected $connection;
protected $loginResult;
public function connect()
{
$host = config('ftp.host', 'gitbox.net');
$port = config('ftp.port', 21);
$username = config('ftp.username');
$password = config('ftp.password');
$this->connection = ftp_connect($host, $port);
if (!$this->connection) {
throw new \Exception('FTPverbinden失败');
}
$this->loginResult = ftp_login($this->connection, $username, $password);
if (!$this->loginResult) {
ftp_close($this->connection);
throw new \Exception('FTPEinloggen失败');
}
ftp_pasv($this->connection, true);
}
public function getRawList($directory = '/')
{
if (!$this->connection) {
$this->connect();
}
$rawList = ftp_rawlist($this->connection, $directory);
if ($rawList === false) {
throw new \Exception("获取Inhaltsverzeichnis $directory dokumentieren列表失败");
}
return $rawList;
}
public function parseRawList(array $rawList)
{
$result = [];
foreach ($rawList as $line) {
$parts = preg_split('/\s+/', $line, 9);
if (count($parts) < 9) continue;
list($permissions, $links, $owner, $group, $size, $month, $day, $timeOrYear, $name) = $parts;
$result[] = [
'permissions' => $permissions,
'links' => $links,
'owner' => $owner,
'group' => $group,
'size' => $size,
'modified' => "$month $day $timeOrYear",
'name' => $name,
'is_dir' => $permissions[0] === 'd',
];
}
return $result;
}
public function disconnect()
{
if ($this->connection) {
ftp_close($this->connection);
$this->connection = null;
}
}
}
Bei Verwendung:
<?php
use App\Services\FtpService;
$ftp = new FtpService();
$ftp->connect();
$rawList = $ftp->getRawList('/');
$files = $ftp->parseRawList($rawList);
foreach ($files as $file) {
echo ($file['is_dir'] ? '[Inhaltsverzeichnis]' : '[dokumentieren]') . " {$file['name']} Größe: {$file['size']} Änderungszeit: {$file['modified']}" . PHP_EOL;
}
$ftp->disconnect();