FTP 函数
在线手册:中文 英文
PHP手册

ftp_fget

(PHP 4, PHP 5)

ftp_fget从 FTP 服务器上下载一个文件并保存到本地一个已经打开的文件中

说明

bool ftp_fget ( resource $ftp_stream , resource $handle , string $remote_file , int $mode [, int $resumepos ] )

ftp_fget() 函数用来下载由 remote_file 指定的文件,并写入到本地已经被打开的一个文件中。参数 handle 为本地已经打开的文件的句柄。传送模式参数 mode 必须是 (文本模式) FTP_ASCII 或 (二进制模式) FTP_BINARY 中的一个。

Note:

参数 resumepos 仅适用于 PHP 4.3.0 以上版本.

成功时返回 TRUE, 或者在失败时返回 FALSE.

参见 ftp_get()ftp_nb_get()ftp_nb_fget()

参数

ftp_stream

The link identifier of the FTP connection.

handle

An open file pointer in which we store the data.

remote_file

The remote file path.

mode

The transfer mode. Must be either FTP_ASCII or FTP_BINARY.

resumepos

The position in the remote file to start downloading from.

返回值

成功时返回 TRUE, 或者在失败时返回 FALSE.

范例

Example #1 ftp_fget() example

<?php

// path to remote file
$remote_file 'somefile.txt';
$local_file 'localfile.txt';

// open some file to write to
$handle fopen($local_file'w');

// 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);

// try to download $remote_file and save it to $handle
if (ftp_fget($conn_id$handle$remote_fileFTP_ASCII0)) {
 echo 
"successfully written to $local_file\n";
} else {
 echo 
"There was a problem while downloading $remote_file to $local_file\n";
}

// close the connection and the file handler
ftp_close($conn_id);
fclose($handle);
?>

更新日志

版本 说明
4.3.0 resumepos was added.

参见


FTP 函数
在线手册:中文 英文
PHP手册
PHP手册 - N: 从 FTP 服务器上下载一个文件并保存到本地一个已经打开的文件中

用户评论:

broom at alturnanetworks dot com (03-Oct-2008 12:49)

<?php
/**
 * Function returns contents via FTP connection and returns it as string (right version...)
 */
function ftp_get_contents ($conn_id, $filename) {
   
//Create temp handler:
   
$tempHandle = fopen('php://temp', 'r+');
   
   
//Get file from FTP:
   
if (@ftp_fget($conn_id, $tempHandle, $filename, FTP_ASCII, 0)) {
       
rewind($tempHandle);
        return
stream_get_contents($tempHandle);
    } else {
        return
false;
    }
}
?>

broom at alturnanetworks dot com (03-Oct-2008 12:18)

Another ftp_get_contents approach, using a temperary stream handler. Returns file contents as string.

<?php
function ftp_get_contents ($conn_id, $filename,
//Create temp handler:
   
$tempHandle = fopen('php://temp', 'r+');

//Get file from FTP assuming that it exists:
   
ftp_fget($conn_id, $tempHandle, $filename, FTP_ASCII, 0));

   
//Getting detailed stats to check filesize:
   
$fstats = fstat($tempHandle);

    return
fread($tempHandle, $fstats['size']);
}
?>

justrafi at gmail dot com (06-Feb-2008 04:44)

I was in need to synchronize two folders on two separate servers, one is a Windows server, and the other is a Linux server. I created this short and sweet function to help me do this. PLEASE NOTICE: This will not copy folders, and probably will fail if remote folder contains anything else than files.

function sync_folders($host, $port, $username, $password, $remote_dir, $local_dir, $passive_mode = true) {
    $conn_id = ftp_connect($host, $port);
    if (!$conn_id) return false; # fail to connect
    if (!ftp_login($conn_id, $username, $password)) { ftp_close($conn_id); return false; }  # fail to login
    ftp_pasv($conn_id, $passive_mode);
    if (!ftp_chdir($conn_id, $remote_dir)) { ftp_close($conn_id); return false; } # fail to change dir
    if (substr($local_dir, -1) != '/') $local_dir .= '/';

    $list = ftp_nlist($conn_id, '.');
    sort($list);
    foreach ($list as $file) {
        if (!file_exists($local_dir . $file)) {
            $is_copied = ftp_get($conn_id, $local_dir . $file, $file, FTP_BINARY);
        }
    }
    ftp_close($conn_id);
    return true;
}

rodrigo-rocha at oi dot net dot br (06-Sep-2002 03:56)

If you suply only a filename to the second parameter of function the ftp_get will open a pointer to the local file creating it and write to it.It's ok if your server dont execute for to mutch time and you dont get too many files but if you do it too many times the pointers created by ftp_get will not be closed and will end your opened files capacity at your server making it to do not open any more files until you restart it.