When running from script the function may require ftp_pasv, for swithching server to pasive mode.
If you are behind firewall ftp_mlsd will return FALSE otherwise.(PHP 7 >= 7.2.0, PHP 8)
ftp_mlsd — Liefert eine Liste der Dateien im angegebenen Verzeichnis
ftpEine FTP\Connection-Instanz.
directoryDas Verzeichnis, das aufgelistet werden soll.
   Gibt bei Erfolg ein Array mit Dateiinfos aus dem angegebenen Verzeichnis
   zurück oder false im Fehlerfall.
  
| Version | Beschreibung | 
|---|---|
| 8.1.0 | Der Parameter ftperwartet nun eine
  FTP\Connection-Instanz; vorher wurde eine Ressource
  erwartet. | 
Beispiel #1 ftp_mlsd()-Beispiel
<?php
// Verbindung aufbauen
$ftp = ftp_connect($ftp_server);
// Login mit Benutzername und Passwort
$login_result = ftp_login($ftp, $ftp_user_name, $ftp_user_pass);
// Den Inhalt des aktuellen Verzeichnisses abrufen
$inhalt = ftp_mlsd($ftp, ".");
// $inhalt ausgeben
var_dump($inhalt);
?>Das oben gezeigte Beispiel erzeugt eine ähnliche Ausgabe wie:
array(5) {
  [0]=>
  array(8) {
    ["name"]=>
    string(1) "."
    ["modify"]=>
    string(14) "20171212154511"
    ["perm"]=>
    string(7) "flcdmpe"
    ["type"]=>
    string(4) "cdir"
    ["unique"]=>
    string(11) "811U5740002"
    ["UNIX.group"]=>
    string(2) "33"
    ["UNIX.mode"]=>
    string(4) "0755"
    ["UNIX.owner"]=>
    string(2) "33"
  }
  [1]=>
  array(8) {
    ["name"]=>
    string(2) ".."
    ["modify"]=>
    string(14) "20171212154511"
    ["perm"]=>
    string(7) "flcdmpe"
    ["type"]=>
    string(4) "pdir"
    ["unique"]=>
    string(11) "811U5740002"
    ["UNIX.group"]=>
    string(2) "33"
    ["UNIX.mode"]=>
    string(4) "0755"
    ["UNIX.owner"]=>
    string(2) "33"
  }
  [2]=>
  array(8) {
    ["name"]=>
    string(11) "public_html"
    ["modify"]=>
    string(14) "20171211171525"
    ["perm"]=>
    string(7) "flcdmpe"
    ["type"]=>
    string(3) "dir"
    ["unique"]=>
    string(11) "811U5740525"
    ["UNIX.group"]=>
    string(2) "33"
    ["UNIX.mode"]=>
    string(4) "0755"
    ["UNIX.owner"]=>
    string(2) "33"
  }
  [3]=>
  array(8) {
    ["name"]=>
    string(10) "public_ftp"
    ["modify"]=>
    string(14) "20171211174536"
    ["perm"]=>
    string(7) "flcdmpe"
    ["type"]=>
    string(3) "dir"
    ["unique"]=>
    string(11) "811U57405EE"
    ["UNIX.group"]=>
    string(2) "33"
    ["UNIX.mode"]=>
    string(4) "0755"
    ["UNIX.owner"]=>
    string(2) "33"
  }
  [4]=>
  array(8) {
    ["name"]=>
    string(3) "www"
    ["modify"]=>
    string(14) "www"
    ["perm"]=>
    string(7) "flcdmpe"
    ["type"]=>
    string(3) "dir"
    ["unique"]=>
    string(11) "811U5740780"
    ["UNIX.group"]=>
    string(2) "33"
    ["UNIX.mode"]=>
    string(4) "0755"
    ["UNIX.owner"]=>
    string(2) "33"
  }
}
When running from script the function may require ftp_pasv, for swithching server to pasive mode.
If you are behind firewall ftp_mlsd will return FALSE otherwise.I have yet to find a resolution to this; but I notice the ftp_mlsd command is limited in the number of files it will grab at once. For me it ranged between 7,500 and 8,500 files. Seems to me there is some max duration it will query for and what you get is a function of how fast the files can be enumerated.sometimes it is necessary to set:
ftp_set_option($this->connection_id, FTP_USEPASVADDRESS, false)
before you set:
ftp_pasv($this->connection_id, $state)