php_ref_ftp
PHP FTP/FTPS 函数
Section titled “PHP FTP/FTPS 函数”PHP FTP 简介
Section titled “PHP 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 和 SFTP
Section titled “安全替代方案:FTPS 和 SFTP”FTPS (FTP over SSL/TLS):
Section titled “FTPS (FTP over SSL/TLS):”FTPS 使用 SSL/TLS 加密 FTP 连接。PHP 的 FTP 扩展使用 ftp_ssl_connect() 函数支持显式 FTPS。请确保您的 PHP 构建包含 OpenSSL 支持。
SFTP (SSH File Transfer Protocol):
Section titled “SFTP (SSH File Transfer Protocol):”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。
PHP FTP 函数参考
Section titled “PHP 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() | 返回远程服务器的系统类型标识符。 |
PHP 预定义 FTP 常量
Section titled “PHP 预定义 FTP 常量”这些常量由 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 文档。