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 — Belirtilen dizindeki dosyaların bir listesini döndürür
   Başarıccdurumunda belirtilen dizindeki dosya bilgilerini içeren bir diziler
   dizisi döndürür. Hata durumunda false döner.
  
| Sürüm: | Açıklama | 
|---|---|
| 8.1.0 | ftpbağımsız değişkeni artık
  FTP\Connection nesnesi kabul ediyor; evvelce ftp
  özkaynağı kabul ediyordu. | 
Örnek 1 - ftp_mlsd() örneği
<?php
// bağlantı kur
$ftp = ftp_connect($ftp_server);
// kullanıcı ve parola ile oturum aç
$login_result = ftp_login($ftp, $ftp_user_name, $ftp_user_pass);
// geçerli dizinin içeriğini al
$içindekiler = ftp_mlsd($ftp, ".");
// $içindekiler'i çıktıla
var_dump($içindekiler);
?>Yukarıdaki örnek şuna benzer bir çıktı üretir:
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)