Page 1 of 1

Download to local after ftp_get()

Posted: Sat Mar 01, 2008 6:46 pm
by cesarcesar
I am using ftp_get to transfer a file from a secure location, to a temp location. (working)

Once at the temp location i need to have the file automatically download to the clients local machine. Something like a right click "save as" action. How do i do this? I'm thinking its done with headers but not sure.

My Current Code is below. Thanks for all responses.

Code: Select all

 
// define some variables
$ftp_server = "123.45.67.890";
$local_file = '/scratch1/test/'.$name;
$server_file = $name;
 
echo "server file: $server_file <br>";
 
$ftp_user_name = "5a515";
$ftp_user_pass = "m5n5o5";
 
// set up basic connection
$conn_id = ftp_connect($ftp_server);
 
// login with username and password
$login_result = ftp_login($conn_id, $ftp_user_name, $ftp_user_pass);
 
if ($login_result) echo "Successfully connected<br>";
 
//change directory
ftp_chdir($conn_id, "tts");
ftp_chdir($conn_id, "incoming");
 
// try to download $server_file and save to $local_file
if (ftp_get($conn_id, $local_file, $server_file, FTP_BINARY)){
 
    echo "Successfully written to $local_file\n";
 
}else{
 
    echo "<br>There was a problem\n";
}
 
// close the connection
ftp_close($conn_id);
 
 

Re: Download to local after ftp_get()

Posted: Sun Mar 02, 2008 2:19 am
by cesarcesar
This is the solutions. Thanks to NogDog.

Code: Select all

 
// try to download $server_file and save to $local_file
if (ftp_get($conn_id, $local_file, $server_file, FTP_BINARY)){
    header('Content-Length: '. filesize($local_file));
    header('Content-Type: application/octet-stream');
    header('Content-Disposition: attachment; filename="'.basename($local_file).'"');
    header('Content-Transfer-Encoding: binary');
    header('Cache-Control: must-revalidate, post-check=0, pre-check=0');
    readfile($local_file); // send the file
    exit;  // make sure no extraneous characters get appended
}