You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何通过PHP追踪FTP文件上传状态并写入MySQL数据库?

实现FTP上传后记录状态到MySQL的方法

当然可以实现,核心思路是通过FTP上传的返回值判断操作结果,再将状态值写入MySQL数据库,以下是具体实现方案:

步骤说明

  1. 先初始化上传状态为失败(默认值0)
  2. 完善FTP上传逻辑,根据ftp_put的返回值更新状态
  3. 连接MySQL数据库,将最终状态插入到指定表中

完整代码示例

// --------------------------
// 1. 配置参数(根据实际情况修改)
// --------------------------
// FTP配置
$ftp_server = 'your_ftp_server';
$ftp_username = 'your_ftp_user';
$ftp_userpass = 'your_ftp_password';
$remote_dir = '/remote/path/'; // FTP服务器上的目标目录
$filename2 = '/local/path/your_file.txt'; // 本地文件路径
$file2 = 'your_file.txt'; // 上传后的文件名

// 数据库配置
$db_host = 'localhost';
$db_user = 'your_db_user';
$db_pass = 'your_db_password';
$db_name = 'your_db_name';

// --------------------------
// 2. 初始化上传状态
// --------------------------
$upload_status = 0; // 0=失败,1=成功,默认设为失败

// --------------------------
// 3. 执行FTP上传操作
// --------------------------
$ftp_conn = ftp_connect($ftp_server);
if ($ftp_conn) {
    if (ftp_login($ftp_conn, $ftp_username, $ftp_userpass)) {
        ftp_pasv($ftp_conn, TRUE); // 启用被动模式,避免防火墙拦截
        $rfile = $remote_dir . $file2;
        
        // 执行上传并判断结果
        if (ftp_put($ftp_conn, $rfile, $filename2, FTP_ASCII)) {
            $upload_status = 1; // 上传成功,更新状态为1
            echo "文件上传成功";
        } else {
            echo "文件上传失败";
        }
        ftp_close($ftp_conn);
    } else {
        echo "FTP登录失败";
    }
} else {
    echo "无法连接到FTP服务器 $ftp_server";
}

// --------------------------
// 4. 将状态写入MySQL数据库
// --------------------------
// 连接数据库
$db_conn = mysqli_connect($db_host, $db_user, $db_pass, $db_name);
if (!$db_conn) {
    die("数据库连接失败: " . mysqli_connect_error());
}

// 使用预处理语句插入状态(避免SQL注入)
// 假设表名为upload_records,字段包含status(状态)、upload_time(上传时间)、filename(文件名)
$sql = "INSERT INTO upload_records (status, upload_time, filename) VALUES (?, NOW(), ?)";
$stmt = mysqli_prepare($db_conn, $sql);
mysqli_stmt_bind_param($stmt, "is", $upload_status, $file2); // 绑定参数:i=整数,s=字符串

// 执行插入操作
if (mysqli_stmt_execute($stmt)) {
    echo "上传状态已记录到数据库";
} else {
    echo "记录状态失败: " . mysqli_error($db_conn);
}

// 清理资源
mysqli_stmt_close($stmt);
mysqli_close($db_conn);

关键细节说明

  • 状态判断:ftp_put会返回布尔值,成功返回true、失败返回false,以此来更新$upload_status的值
  • 数据库安全:必须使用预处理语句(如示例中的mysqli_prepare),禁止直接拼接SQL语句,防止SQL注入
  • 错误处理:对FTP连接、登录、上传,以及数据库连接、插入的每一步都做了错误判断,确保异常情况也能正确记录失败状态
  • 扩展字段:可以根据需求给数据库表添加更多字段,比如user_id(上传用户ID)、file_size(文件大小)等,方便后续查询和统计

数据库表结构示例

如果还没有创建存储状态的表,可以执行以下SQL创建:

CREATE TABLE upload_records (
    id INT AUTO_INCREMENT PRIMARY KEY COMMENT '记录ID',
    status TINYINT(1) NOT NULL COMMENT '上传状态:1成功,0失败',
    filename VARCHAR(255) NOT NULL COMMENT '上传的文件名',
    upload_time DATETIME NOT NULL COMMENT '上传时间',
    user_id INT COMMENT '可选:上传用户的ID'
);

内容的提问来源于stack exchange,提问作者Mdev2023it

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.23 15:13:15