Aktueller Standort: Startseite> Neueste Artikel> Verwenden Sie FTP_RAWLIST, um das Management der Remotedatei in Laravel -Projekten zu implementieren

Verwenden Sie FTP_RAWLIST, um das Management der Remotedatei in Laravel -Projekten zu implementieren

gitbox 2025-05-28

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.


1. Verbindung zum Remote -FTP -Server herstellen

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);

2. Verwenden Sie FTP_RAWLIST, um die Dateiliste zu erhalten

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

3.. Analysiert die von ftp_rawist zurückgegebenen Daten

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;
}

4. Schließen Sie die FTP -Verbindung

Schließen Sie nach Abschluss des Betriebs die Verbindung und geben Sie die Ressource frei:

 <?php
ftp_close($connId);

5. Beispiel für die Einkapselung der FTP -Dateiverwaltungsdienstklasse in Laravel

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();