yii2 框架中 上传文件到ftp 【不建议这么玩哦】 前端 ```html <script> document.addEventListener("DOMContentLoaded", function (event) { // 在 DOM 加载完成后执行代码 ajaxSubmit(); }); function ajaxSubmit() { $('button.myjs-ajax-submit').on('click', function (e) { var fileInput = $('#myfile')[0]; var file = fileInput.files[0]; var formData = new FormData(); formData.append('myfile', file); var url = '后端地址'; $.ajax({ url: url, type: 'POST', data: formData, processData: false, contentType: false, dataType: "json", success: function (res) { if (res.code == 0) { alert(res.msg); } else { var src = res.data; } console.log(res) }, error: function (xhr, status, error) { // 处理错误 } }); }); } </script> <input type="file" name="myfile" id="myfile"/> <button type="button" class="myjs-ajax-submit">提交</button> ``` 后端 ```php public function uploadFtp() { if (Yii::$app->request->isPost) { $save_dir = Yii::$app->basePath . "/common/data/"; $file = $_FILES; $get_file = isset($file['myfile']) ? $file['myfile'] : ''; if (!empty($get_file)) { ini_set("upload_max_filesize", "-1"); // 不限制上传文件大小 ini_set("post_max_size", "-1"); // 不限制 POST 数据大小 ini_set("memory_limit", "-1"); // 不限制 内存大小 ini_set("max_execution_time", "0"); // 不限制脚本执行时间 $name = $get_file['name']; $type = $get_file['type']; $tmp_name = $get_file['tmp_name']; $error = $get_file['error']; $size = $get_file['size']; $target_file = $save_dir . basename($name); // 将上传文件从临时目录移动到目标目录 if (move_uploaded_file($tmp_name, $target_file)) { try { $ftp_res = $this->ftpUpload($target_file, basename($name)); } catch (\Exception $e) { return ['code' => 0, 'msg' => $e->getMessage()]; } if ($ftp_res) { return ['code' => 1, 'msg' => '上传成功', 'data' => basename($name)]; } } } } return ['code' => 0, 'msg' => '上传失败']; } /** * Desc [ ] * User shyn * Date 2023/5/18 * Time 11:45 * @param $local_file 本地文件路径和文件名 * @param string $remote_file 远程文件名 */ public function ftpUpload($local_file, $remote_file = '') { // FTP 服务器登录信息 $ftp_server = "域名或ip"; $ftp_username = "用户名"; $ftp_password = "密码"; if (empty($local_file)) { throw new Exception("本地文件路径和文件名不能为空"); } if (empty($remote_file)) { throw new Exception("远程文件名不能为空"); } // 远程 FTP 目录和文件名 $remote_dir = "/"; // 建立 FTP 连接 $conn_id = ftp_connect($ftp_server); // 登录 FTP 服务器 $login_result = ftp_login($conn_id, $ftp_username, $ftp_password); ftp_pasv($conn_id, true); if (!($conn_id && $login_result)) { throw new Exception("连接失败"); } // 将工作目录设置为远程 FTP 目录 ftp_chdir($conn_id, $remote_dir); // 获取远程目录下的文件列表 $file_list = ftp_nlist($conn_id, "."); // 输出文件列表 foreach ($file_list as $file) { if ($file === $remote_file) { throw new Exception("文件名重复"); } } // 上传文件 $upload_result = ftp_put($conn_id, $remote_file, $local_file, FTP_ASCII, 0); // 关闭 FTP 连接 ftp_close($conn_id); if ($upload_result) { return true; } return false; } ```