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 }
這是上傳函數,先準備好!貌似我也是從哪位大神那找來的。。不記得了,很差意思!php
1 <?php 2 $path=$_GET['timePath'].'/'.$_GET['companyId'].'/'.$_GET['timePath'].'-'.$_GET['shopId'].'.txt'; 3 $downResult=logFtpDownload($path);
拼接路徑字符串,調用函數,並傳入路徑字符串!ajax
到這裏,基本上已經完成了!不過這是理想狀態,就是頁面沒任何輸出,路徑$path是寫死的,由於header();以前不能有任何輸出。服務器
這種狀況通常都是用JS來解決,前臺頁面用ajax異步提交到後臺查詢相關、處理數據,若是文件路徑是相對單一的,甚至能夠組合好路徑$path,個人因爲條件太多,文件路徑也不相同,因此只能把數據處理好,回傳給前臺,ajax判斷回傳,若是成功,就用window.open();打開一個新窗口,並把相關參數傳給後臺對應控制器,固然,最好openWindow=window.open();把它賦值,好用來關閉,而後給一個intervalId=window.setInterval("函數名",1000);這個就是打開新窗口後1秒開始執行 "函數名"這個函數,這個函數就是用來顯示後臺拋出的異常,好比文件不存在,ftp登陸、鏈接失敗等等。。app
大概就是這樣了,我就是個小菜鳥,寫這個就是給本身整理下思路,加深下印象!還望各位神前來指導。。異步