此包实现了一个具有便捷功能的简单FTP客户端

3.0.4 2019-10-29 19:03 UTC

This package is not auto-updated.

Last update: 2024-09-25 17:59:13 UTC


README

此仓库包含一个针对FTP(相当不错)的PHP功能的包装器。

概述

$options = array(Ftp::OPTION_PORT => $port, Ftp::OPTION_TIMEOUT => 60);

$ftp = new Ftp($host, $options);
$ftp->connect();
$ftp->login($user, $password);

$ftp->get($local_path, $remote_path); 
$ftp->put($local_path, $remote_path); 
$ftp->delete($remote_path);           
$ftp->mkdir($remote_path);
$entries = $ftp->ls($remote_path, true);
    
$status = $ftp->deleteIfExists($remote_path);
$status = $ftp->fileExists($remote_path);
$status = $ftp->directoryExists($remote_path);
$entry = $ftp->entryExists($remote_path);
$status = $ftp->mkdirRecursiveIfNotExist($remote_path);

$ftp->setEntryManagerClassName($your_own_class_name);

安装

从命令行

composer require dbeurive/ftp

或者,在composer.json文件中

"require": {
    "dbeurive/ftp": "*"
}

文档

代码有大量文档,并为每个方法提供了一个简单的示例。

  • connect():打开与服务器的连接。
  • disconnect():关闭与服务器的连接。
  • login($in_user_name, $in_password):向服务器进行认证。
  • isLogged():测试客户端是否已向服务器进行认证。
  • ls($in_opt_dir='.', $in_opt_throw_exception_on_error=false):列出由给定路径指定的目录的内容。此函数解析服务器返回的输出。
  • put($in_local_file_path, $in_remote_file_path, $in_opt_mode=FTP_BINARY):将文件从本地主机复制到远程服务器。
  • get($in_local_file_path, $in_remote_file_path, $in_opt_mode=FTP_BINARY):从远程服务器获取文件到本地主机。
  • mkdir($in_directory_path):在远程主机上创建目录。
  • mkdirRecursiveIfNotExist($in_directory_path):递归创建由给定路径指定的目录,如果该目录不存在。
  • rmdir($in_directory_path):删除由给定路径指定的目录。
  • delete($in_file_path):在远程服务器上删除由给定路径指定的文件。
  • deleteIfExists($in_directory_path):测试文件是否存在,如果存在,则删除。
  • entryExists($in_entry_path):测试由给定路径指定的条目(目录、文件或链接)是否存在。
  • directoryExists($in_directory_path):测试由给定路径指定的目录是否存在。
  • fileExists($in_file_path):测试由给定路径指定的文件是否存在。
  • setEntryManager($in_class_name):设置表示远程主机上的条目(文件、目录或链接)并负责解析FTP命令LIST输出的类的名称。

最后的方法(setEntryManager)需要更详细的描述。

FTP命令LIST返回代表远程目录中条目(目录、文件或链接)列表的文本。例如

-rw-r--r--    1 0        0               1 Jan 15 14:08 file0.txt
-rw-r--r--    1 0        0               2 Jan 15 14:08 file1.txt
-rw-r--r--    1 0        0               3 Jan 15 14:08 file2.txt
-rw-r--r--    1 0        0               4 Jan 15 14:08 file3.txt
drwxr-xr-x    2 0        0            4096 Jan 15 14:08 r1
drwxr-xr-x    2 0        0            4096 Jan 15 14:08 r2
drwxr-xr-x    2 0        0            4096 Jan 15 14:08 r3
drwxr-xr-x    2 0        0            4096 Jan 15 14:08 r4

请注意

  • FTP命令LIST返回的文本组织可能因操作系统或FTP服务器而异。
  • 根据操作系统或FTP服务器,与条目关联的属性可能不相同。

然而,必须解析此文本以提取条目列表及其属性(权限、所有者、组...)。

无法处理所有可能的文本组织(针对所有操作系统和可能的所有FTP服务器)以及所有可能的属性。

因此,FTP包装器允许用户声明自己的类来处理文本解析和属性管理。默认使用的类是EntryManagerUnix

然而,您可以编写并声明自己的类来处理其他用例。您的类必须扩展抽象类AbstractEntryManager

您必须在发出任何处理条目的命令(如LIST...)之前设置您的条目管理器。您应该在实例化Ftp对象后立即设置它。

请参阅此示例

单元测试

为了运行单元测试,您需要以下元素

  • 运行FTP服务器和SSH服务器的主机。
  • 访问FTP服务器和SSH服务器。

SSH用于在运行FTP服务器的主机上执行shell命令。这些命令将为测试准备环境。

准备

编辑tests/setenv.sh

此脚本定义了单元测试期间使用的参数。这些参数包括

以下参数用于(单元)测试有效测试案例

  • FTP_REMOTE_HOST_OK:FTP服务器的主机名或IP地址。
  • FTP_USER_OK:用于认证FTP服务器的用户名。
  • FTP_PASSWORD_OK:用于认证FTP服务器的密码。
  • FTP_PORT_OK:FTP服务器使用的TCP端口(例如:21)。

用于(单元)测试无效测试案例的参数

  • FTP_REMOTE_HOST_KO:不监听FTP连接请求的主机的名称或IP地址。
  • FTP_USER_KO:无效的用户名。
  • FTP_PASSWORD_KO:无效的密码。
  • FTP_PORT_KO:无效的TCP端口号。
  • ROOT_ON_REMOTE:远程主机(运行FTP服务器)上的FTP路径,用于通过FTP获取和放置文件。
  • BAD_DIR_ON_REMOTE:远程主机(运行FTP服务器)上的无效FTP路径

用于在运行FTP服务器的主机上设置环境的参数

  • SSH_ARG:用于通过SSH连接到运行FTP服务器的主机的ssh命令的命令行参数。

示例

export FTP_REMOTE_HOST_OK='10.11.12.13'
export FTP_USER_OK='good_ftp_user_name'
export FTP_PASSWORD_OK='goot_ftp_password'
export FTP_PORT_OK=21    
export FTP_REMOTE_HOST_KO='yahoo.com'
export FTP_USER_KO='invalid_user_name'
export FTP_PASSWORD_KO='invalid password'
export FTP_PORT_KO=10021
export ROOT_ON_REMOTE='/files';
export BAD_DIR_ON_REMOTE='/tmp';
export SSH_ARG='root@127.0.0.1'

编辑tests/clear_on_remote.sh

脚本tests/clear_on_remote.sh将在运行FTP服务器的主机上执行。它将为单元测试准备环境。

设置正确的FTP_REMOTE_DIR值。

FTP_REMOTE_DIR:服务器主机上的绝对系统路径,用于通过FTP获取或放置文件。

示例

FTP_REMOTE_DIR=/home/ftpuser/ftp/files

运行单元测试

运行以下命令

. ./tests/setenv.sh
./vendor/bin/phpunit