PHP ftp_mkdir() 函数

PHP ftp_mkdir() 函数用于在FTP服务器上创建一个新目录。

注意:使用此函数前需要先建立FTP连接,并确保有相应的创建目录权限。

语法

ftp_mkdir(resource $ftp, string $directory): string|false

参数说明

参数 描述
ftp 必需。FTP连接的标识符,由ftp_connect()ftp_ssl_connect()返回
directory 必需。要创建的目录名称。可以是相对路径或绝对路径

返回值

  • 成功创建时返回新创建的目录名
  • 失败时返回 false

示例

示例1:基本用法

<?php
// 连接FTP服务器
$ftp_server = "ftp.example.com";
$ftp_user = "username";
$ftp_pass = "password";
$ftp_conn = ftp_connect($ftp_server) or die("无法连接到 $ftp_server");

// 登录
$login = ftp_login($ftp_conn, $ftp_user, $ftp_pass);

if (!$login) {
    die("登录失败");
}

// 创建目录
$dir_name = "new_directory";
if (ftp_mkdir($ftp_conn, $dir_name)) {
    echo "目录 '$dir_name' 创建成功";
} else {
    echo "创建目录失败";
}

// 关闭连接
ftp_close($ftp_conn);
?>

示例2:创建多层目录

<?php
// 建立FTP连接
$ftp_conn = ftp_connect('ftp.example.com');
ftp_login($ftp_conn, 'user', 'pass');

// 创建嵌套目录
$new_dir = 'uploads/images/2024';
if (ftp_mkdir($ftp_conn, $new_dir)) {
    echo "嵌套目录创建成功: $new_dir";
} else {
    // 尝试逐级创建
    $parts = explode('/', $new_dir);
    $current_path = '';

    foreach ($parts as $part) {
        if (!empty($part)) {
            $current_path .= ($current_path ? '/' : '') . $part;
            if (!@ftp_chdir($ftp_conn, $current_path)) {
                if (!ftp_mkdir($ftp_conn, $current_path)) {
                    echo "创建目录 '$current_path' 失败";
                    break;
                }
                echo "创建目录: $current_path
"; } } } } ftp_close($ftp_conn); ?>

示例3:带错误处理的完整示例

<?php
function createFtpDirectory($ftp_conn, $directory) {
    // 检查目录是否已存在
    if (@ftp_chdir($ftp_conn, $directory)) {
        ftp_chdir($ftp_conn, '..'); // 返回上级目录
        return "目录 '$directory' 已存在";
    }

    // 尝试创建目录
    $result = ftp_mkdir($ftp_conn, $directory);

    if ($result !== false) {
        return "目录创建成功: " . $result;
    } else {
        // 检查连接是否有效
        if (!ftp_systype($ftp_conn)) {
            return "FTP连接已断开";
        }
        return "创建目录失败,请检查权限";
    }
}

// 使用示例
$ftp = ftp_connect('localhost');
if ($ftp === false) {
    die("无法连接FTP服务器");
}

if (ftp_login($ftp, 'user', 'pass')) {
    echo createFtpDirectory($ftp, 'test_folder');
    ftp_close($ftp);
} else {
    echo "登录失败";
}
?>

注意事项

  • 确保FTP服务器支持创建目录操作
  • 检查用户是否具有在目标路径创建目录的权限
  • 目录路径可以是相对路径(相对于当前工作目录)或绝对路径
  • 某些FTP服务器可能需要使用ftp_pasv()启用被动模式
  • 创建多层目录时,可能需要逐级创建父目录
  • 使用@运算符可以抑制错误,但建议使用适当的错误处理机制

相关函数

  • ftp_rmdir() - 删除FTP服务器上的目录
  • ftp_chdir() - 改变FTP服务器上的当前目录
  • ftp_pwd() - 返回当前目录名
  • ftp_nlist() - 列出FTP目录中的文件