Skip to content

php_ref_ftp

FTP 函数允许 PHP 脚本充当 FTP 客户端,从而能够与 FTP 服务器进行交互。这包括建立连接、登录、传输文件(上传/下载)、管理目录等。

这些函数提供了对文件传输协议(File Transfer Protocol, FTP)的低级访问。请注意,并非所有 FTP 服务器都支持所有函数,并且行为有时可能会有所不同。

安全警告: 标准 FTP 以纯文本形式传输凭据(用户名/密码)和数据,这使得它在公共网络上不安全。只要可能,优先考虑使用安全替代方案,如 FTPS (FTP over SSL/TLS) 或 SFTP (SSH File Transfer Protocol)。

对于简单的文件读写操作,可以考虑使用 PHP 的文件系统函数配合 ftp:// 或 ftps:// 流包装器(stream wrappers),它们可以提供更直观的接口(例如,file_get_contents(‘ftp://user:pass@host/file.txt’))。但是,对于更复杂的交互(如列出目录、更改模式),则需要专用的 FTP 函数。

要使用 FTP 函数,您的 PHP 安装中必须启用 FTP 扩展。

  • Linux 系统: 通常通过包管理器安装,例如 sudo apt-get install php-ftp (Debian/Ubuntu) 或 sudo yum install php-ftp (CentOS/RHEL)。之后您可能需要重启您的 Web 服务器 (Apache/Nginx) 和 PHP-FPM。
  • Windows 系统: FTP 扩展通常已捆绑,您只需在 php.ini 文件中取消注释 extension=ftp 即可启用,然后重启 Web 服务器。
  • 从源代码编译: 如果手动编译 PHP,请包含 —enable-ftp 配置选项。对于 FTPS 支持(ftp_ssl_connect()),PHP 必须使用 OpenSSL 支持进行编译。

您可以通过检查 phpinfo() 的输出或使用 extension_loaded(‘ftp’) 来验证扩展是否已启用。

FTPS 使用 SSL/TLS 加密 FTP 连接。PHP 的 FTP 扩展使用 ftp_ssl_connect() 函数支持显式 FTPS。请确保您的 PHP 构建包含 OpenSSL 支持。

SFTP 是一种运行在 SSH (Secure Shell) 之上的不同协议。它通常被认为比 FTPS 更安全、对防火墙更友好。PHP 标准 FTP 扩展中 不 内置 SFTP 支持。

要使用 SFTP,您通常需要安装 SSH2 PECL 扩展。它提供了诸如 ssh2_connect()、ssh2_auth_password()、ssh2_sftp()、ssh2_scp_send() 和 ssh2_scp_recv() 等函数。

另外,像 phpseclib 这样的库提供了纯 PHP 实现的 SFTP 和其他协议,从而避免了对 PECL 扩展的需求。

建议:如果服务器支持,请始终使用 SFTP 或 FTPS。除非绝对必要且仅在受信任的网络上,否则避免使用纯 FTP。

以下函数是核心 FTP 扩展的一部分:

函数描述
ftp_alloc()为要上传的文件分配空间。
ftp_cdup()更改到父目录。
ftp_chdir()更改服务器上的当前目录。
ftp_chmod()设置远程文件的权限(如果服务器允许)。
ftp_close()关闭 FTP 连接。别名:ftp_quit()。
ftp_connect()打开一个 FTP 连接。(不安全 - 凭据以纯文本发送)。
ftp_delete()删除服务器上的文件。
ftp_exec()请求在服务器上执行程序(通常禁用)。
ftp_fget()从服务器下载文件并保存到已打开的本地文件指针。
ftp_fput()将数据从已打开的本地文件指针上传到远程文件。
ftp_get_option()检索 FTP 连接的运行时选项。
ftp_get()从服务器下载文件并将其保存到本地。
ftp_login()登录 FTP 连接。(不安全 - 凭据以纯文本发送)。
ftp_mdtm()返回远程文件的最后修改时间。
ftp_mkdir()在服务器上创建目录。
ftp_nb_continue()继续非阻塞文件传输。
ftp_nb_fget()非阻塞地下载文件到已打开的本地文件指针。
ftp_nb_fput()非阻塞地从已打开的本地文件指针上传。
ftp_nb_get()非阻塞地下载文件。
ftp_nb_put()非阻塞地上传文件。
ftp_nlist()返回指定目录中的文件名列表。
ftp_pasv()开启或关闭被动模式。(通常防火墙需要)。
ftp_put()将本地文件上传到服务器。
ftp_pwd()返回当前目录名称。
ftp_quit()ftp_close() 的别名。
ftp_raw()向 FTP 服务器发送任意命令。
ftp_rawlist()返回目录中文件的详细列表(原始服务器格式)。
ftp_rename()重命名服务器上的文件或目录。
ftp_rmdir()移除(删除)服务器上的空目录。
ftp_set_option()设置 FTP 连接的运行时选项。
ftp_site()向服务器发送 SITE 命令。
ftp_size()返回远程文件的大小(以字节为单位)。
ftp_ssl_connect()通过 SSL/TLS 打开安全 FTP 连接(FTPS)。需要 PHP 支持 OpenSSL。
ftp_systype()返回远程服务器的系统类型标识符。

这些常量由 FTP 扩展定义,主要用于传输模式和非阻塞操作。

常量描述
FTP_ASCII文本文件传输模式(转换行尾)。别名:FTP_TEXT。
FTP_BINARY二进制文件传输模式(原始传输)。别名:FTP_IMAGE。
FTP_TIMEOUT_SEC如果未通过 ftp_set_option() 另行设置,网络操作使用的默认超时时间。
FTP_AUTOSEEK与 ftp_set_option() 一起使用。启用文件传输中的定位(影响带有 resume_pos 的 ftp_get/ftp_put)。
FTP_AUTORESUME与 ftp_set_option() 一起使用。自动确定 GET/PUT 传输的续传位置。
FTP_FAILED非阻塞传输的返回状态:传输失败。
FTP_FINISHED非阻塞传输的返回状态:传输完成。
FTP_MOREDATA非阻塞传输的返回状态:传输仍在进行。

有关详细用法和示例,请参阅官方 PHP FTP 文档。