首页 > 解决方案 > 如何通过 FTP 获取 chmod 信息

问题描述

我目前正在开发一个在线 FTP 客户端,它的工作方式类似于在桌面上找到的普通 FTP 客户端。我目前无法通过 FTP 获取 chmod 权限。

我已经fileperms()在 PHP 中尝试过该功能,但它不允许 FTP 协议,仅用于您正在访问的服务器上的本地文件。

标签: phpftp

解决方案


如果您使用 PHP 7.2 和更新版本并且您的 FTP 服务器支持MLSD命令,这很容易,因为您可以使用ftp_mlsdfunction

$conn_id = ftp_connect("ftp.example.com") or die("Cannot connect");
ftp_login($conn_id, "username", "password") or die("Cannot login");
ftp_pasv($conn_id, true) or die("Cannot change to passive mode");
$entries = ftp_mlsd($conn_id, "/remote/path") or die("Cannot list directory");

foreach ($entries as $entry)
{
    if (($entry["type"] != "cdir") && ($entry["type"] != "pdir"))
    {
        echo $entry["name"] . " - " . $entry["UNIX.mode"] . "\n";
    }
}

如果没有,您必须使用函数LIST使用命令并解析服务器返回的专有格式。ftp_rawlist

以下代码采用常见的 *nix 格式。

$entries = ftp_rawlist($conn_id, "/remote/path") or die("Cannot list directory");

foreach ($entries as $entry)
{
    $tokens = explode(" ", $entry);
    $name = $tokens[count($tokens) - 1];
    $permissions = $tokens[0];
    echo $name . " - " . $permissions . "\n";
}

推荐阅读