ftp_fget

(PHP 4、PHP 5、PHP 7、PHP 8)

ftp_fget从 FTP 服务器下载文件并保存到打开的文件

描述

ftp_fget(
    FTP\Connection $ftp,
    resource $stream,
    string $remote_filename,
    int $mode = FTP_BINARY,
    int $offset = 0
): bool

ftp_fget() 从 FTP 服务器检索 remote_filename,并将其写入给定的文件指针。

参数

ftp

一个 FTP\Connection 实例。

stream

一个我们存储数据的打开的文件指针。

remote_filename

远程文件路径。

mode

传输模式。必须是 FTP_ASCIIFTP_BINARY

offset

远程文件开始下载的位置。

返回值

成功时返回 true,失败时返回 false

变更日志

版本 描述
8.1.0 ftp 参数现在期望一个 FTP\Connection 实例;以前,期望一个 resource
7.3.0 mode 参数现在是可选的。以前它是强制性的。

示例

示例 #1 ftp_fget() 示例

<?php

// 远程文件路径
$remote_file = 'somefile.txt';
$local_file = 'localfile.txt';

// 打开要写入的某个文件
$handle = fopen($local_file, 'w');

// 设置基本连接
$ftp = ftp_connect($ftp_server);

// 使用用户名和密码登录
$login_result = ftp_login($ftp, $ftp_user_name, $ftp_user_pass);

// 尝试下载 $remote_file 并将其保存到 $handle
if (ftp_fget($ftp, $handle, $remote_file, FTP_ASCII, 0)) {
echo
"成功写入到 $local_file\n";
} else {
echo
"下载 $remote_file$local_file 时出现问题\n";
}

// 关闭连接和文件句柄
ftp_close($ftp);
fclose($handle);
?>

参见

  • ftp_get() - 从 FTP 服务器下载文件
  • ftp_nb_get() - 从 FTP 服务器检索文件并将其写入本地文件(非阻塞)
  • ftp_nb_fget() - 从 FTP 服务器检索文件并将其写入打开的文件(非阻塞)

添加注释

用户贡献的注释 6 个注释

8
broom at alturnanetworks dot com
15 年前
另一种 ftp_get_contents 方法,使用临时流处理程序。返回文件内容作为字符串。

<?php
function ftp_get_contents ($conn_id, $filename,
// 创建临时处理程序:
$tempHandle = fopen('php://temp', 'r+');

// 从 FTP 获取文件,假设它存在:
ftp_fget($conn_id, $tempHandle, $filename, FTP_ASCII, 0));

// 获取详细统计信息以检查文件大小:
$fstats = fstat($tempHandle);

return
fread($tempHandle, $fstats['size']);
}
?>
5
broom at alturnanetworks dot com
15 年前
<?php
/**
* 函数通过 FTP 连接返回内容,并将其作为字符串返回(正确版本...)
*/
function ftp_get_contents ($conn_id, $filename) {
// 创建临时处理程序:
$tempHandle = fopen('php://temp', 'r+');

// 从 FTP 获取文件:
if (@ftp_fget($conn_id, $tempHandle, $filename, FTP_ASCII, 0)) {
rewind($tempHandle);
return
stream_get_contents($tempHandle);
} else {
return
false;
}
}
?>
2
mike at eastghost dot com
11 年前
如果您位于防火墙后面并收到奇怪的超时、文件创建但现在没有本地数据保存等,您可能需要使用 ftp_pasv()。
0
lionskape at gmail dot com
7 年前
如果您使用的是带有 cp1251 编码的 windows ftp 服务器,则在文件名/路径中存在一些关于俄语“я”的麻烦。

php 使用 telnet 连接 ftp 服务器,并且在 telnet 协议中存在带有代码 255 的特殊符号。您可以尝试使用 ftp_raw($connection, 'OPTS UTF8 ON'); 并使用 utf-8(如果服务器提供)。

P.S. 对我的英语不好表示歉意
-1
justrafi at gmail dot com
16 年前
我需要同步两个不同服务器上的两个文件夹,一个是 Windows 服务器,另一个是 Linux 服务器。我创建了这个简短而实用的函数来帮助我完成此操作。请注意:这不会复制文件夹,如果远程文件夹包含除文件之外的任何其他内容,可能会失败。

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; # 无法连接
如果 (!ftp_login($conn_id, $username, $password)) { ftp_close($conn_id); return false; } # 登录失败
ftp_pasv($conn_id, $passive_mode);
如果 (!ftp_chdir($conn_id, $remote_dir)) { ftp_close($conn_id); return false; } # 更改目录失败
如果 (substr($local_dir, -1) != '/') $local_dir .= '/';

$list = ftp_nlist($conn_id, '.');
sort($list);
foreach ($list as $file) {
如果 (!file_exists($local_dir . $file)) {
$is_copied = ftp_get($conn_id, $local_dir . $file, $file, FTP_BINARY);
}
}
ftp_close($conn_id);
return true;
}
-3
rodrigo-rocha at oi dot net dot br
21 年前
如果您只在 ftp_get 函数的第二个参数中提供文件名,它将打开指向本地文件的指针,创建该文件并写入它。如果您的服务器执行时间不太长,并且您没有获取太多文件,这就可以了。但是,如果您多次这样做,由 ftp_get 创建的指针将不会关闭,并且会最终耗尽服务器上打开文件的容量,导致服务器无法再打开任何文件,直到您重新启动它为止。
To Top