1 <?php 2 function logFtpDownload($filename){ 3 $phpftp_host = "host"; //服务器地址 4 $phpftp_port = port; //服务器的端口号 5 $phpftp_user = "username"; // 用户名 6 $phpftp_passwd = "password; //口令 7 $ftp_path = dirname($filename) . "/"; //获取路经 8 $select_file = basename($filename); //获取文件名 9 $ftp = ftp_connect($phpftp_host,$phpftp_port); //连接FTP服务器 10 if($ftp){ 11 if(ftp_login($ftp, $phpftp_user, $phpftp_passwd)){ //登陆 12 if(@ftp_chdir($ftp,$ftp_path)){ //进入指定路径 13 $tmpfile = tempnam( getcwd()."/", "temp" ); //建唯一的临时文件 此目录要有读的权限,或者更高 14 if(ftp_get($ftp, $tmpfile, $select_file, FTP_BINARY)) { //下载指定的文件到临时文件 15 ftp_quit( $ftp ); // 关闭连接 16 header("Content-Type:application/octet-stream"); 17 header("Content-Disposition: attachment; filename=" . $select_file); 18 readfile($tmpfile); 19 unlink($tmpfile); // 删除临时文件 20 return true; 21 }else{ 22 return false; 23 } 24 }else{ 25 return false; 26 } 27 }else{ 28 return false; 29 } 30 } 31 }
这是上传函数,先准备好!貌似我也是从哪位大神那找来的。。不记得了,不好意思!
1 <?php 2 $path=$_GET[‘timePath‘].‘/‘.$_GET[‘companyId‘].‘/‘.$_GET[‘timePath‘].‘-‘.$_GET[‘shopId‘].‘.txt‘; 3 $downResult=logFtpDownload($path);
拼接路径字符串,调用函数,并传入路径字符串!
到这里,基本上已经完成了!不过这是理想状态,就是页面没任何输出,路径$path是写死的,因为header();之前不能有任何输出。
这种情况一般都是用JS来解决,前台页面用ajax异步提交到后台查询相关、处理数据,如果文件路径是相对单一的,甚至可以组合好路径$path,我的由于条件太多,文件路径也不相同,所以只能把数据处理好,回传给前台,ajax判断回传,如果成功,就用window.open();打开一个新窗口,并把相关参数传给后台对应控制器,当然,最好openWindow=window.open();把它赋值,好用来关闭,然后给一个intervalId=window.setInterval("函数名",1000);这个就是打开新窗口后1秒开始执行 "函数名"这个函数,这个函数就是用来显示后台抛出的异常,比如文件不存在,ftp登录、连接失败等等。。
大概就是这样了,我就是个小菜鸟,写这个就是给自己整理下思路,加深下印象!还望各位神前来指导。。
时间: 2024-10-11 08:15:05