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登錄、連接失敗等等。。
大概就是這樣了,我就是個小菜鳥,寫這個就是給自己整理下思路,加深下印象!還望各位神前來指導。。