2013-08-07 70 views
1

我正在嘗試編寫一個PHP頁面,該頁面使用GET變量,它是FTP中的文件名並將其下載。但是,它似乎並不奏效。當echo語句正在運行時,函數本身(ftp_get)返回TRUE,但是沒有其他事件發生,並且在控制檯中沒有錯誤。腳本運行時無法從FTP服務器自動下載文件

<?php 
$file = $_GET['file']; 

$ftp_server = "127.0.0.1"; 
$ftp_user_name = "user"; 
$ftp_user_pass = "pass"; 
// set up a connection or die 
$conn_id = ftp_connect($ftp_server) or die("Couldn't connect to $ftp_server"); 

// login with username and password 
$login_result = ftp_login($conn_id, $ftp_user_name, $ftp_user_pass); 

if (ftp_get($conn_id, $file, $file, FTP_BINARY)) { 
    echo "Successfully written to $file\n"; 
} else { 
    echo "There was a problem\n"; 
} 

?> 

理想情況下,我會簡單地將它們鏈接到:ftp://example.com/TestFile.txt,它會下載該文件對他們來說,不過,那隻能說明他們的文件的內容在他們的瀏覽器,而不是下載。

我已經通過PHP手冊網站閱讀了FTP功能,並且我相信ftp_get是我正在使用的正確的一個。

有沒有這樣做的更簡單的方法,還是隻是我忽略的東西?

+1

從手冊:「ftp_get()從FTP服務器檢索遠程文件,並將其保存到本地文件中。」本地是指運行PHP的機器,而不是客戶機的桌面機器。我不知道是否有比讀取保存的文件並將其輸出給用戶更簡單的方法。 – 2013-08-07 16:43:03

+0

是'error_reporting(E_ALL); ini_set('display_errors','1');'on? – JohnnyJS

+0

@Jeffman沒有辦法簡單地從FTP下載文件到用戶的PC上?它看起來不像是一個概念的牽強。 – user2547842

回答

2

有兩種(或者更多)方式可以做到這一點。您可以像使用ftp_get一樣將文件副本存儲在服務器上,然後將其發送給用戶。或者你可以每次下載它。

現在,您可以使用ftp命令執行此操作,但使用readfile有更快的方法。
繼從readfile文檔中的第一個例子:

// Save the file as a url 
$file = "ftp://{$ftp_user_name}:{$ftp_user_pass}@{$ftp_server}" . $_GET['file']; 

// Set the appropriate headers for a file transfer 
header('Content-Description: File Transfer'); 
header('Content-Type: application/octet-stream'); 
header('Content-Disposition: attachment; filename=' . basename($file)); 
header('Content-Transfer-Encoding: binary'); 
header('Expires: 0'); 
header('Cache-Control: must-revalidate'); 
header('Pragma: public'); 
header('Content-Length: ' . filesize($file)); 
// and send them 
ob_clean(); 
flush(); 

// Send the file 
readfile($file); 

這將簡單地獲取文件,並轉發它的內容給用戶。標題將使瀏覽器保存文件作爲下載。

你可以更進一步。假設您通過http://example.com/ftp/將其保存在用戶可訪問的目錄中的一個名爲script.php的文件中。如果您使用的Apache2和具有mod_rewrite的啓用,你可以在這個目錄下創建一個.htaccess文件,其中包含:

RewriteEngine On 
RewriteRule ^(.*)$ script.php?file=$1 [L] 

當用戶瀏覽到您的http://exmaple.com/ftp/README.md文件的script.php將$_GET['file']等於/README.md和文件被調用ftp://user:[email protected]/README.md將在他的電腦上下載下載

相關問題