如何通过PHP追踪FTP文件上传状态并写入MySQL数据库?
实现FTP上传后记录状态到MySQL的方法
当然可以实现,核心思路是通过FTP上传的返回值判断操作结果,再将状态值写入MySQL数据库,以下是具体实现方案:
步骤说明
- 先初始化上传状态为失败(默认值0)
- 完善FTP上传逻辑,根据
ftp_put的返回值更新状态 - 连接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
相关产品推荐
相关产品推荐

