marvinjanssen/magicmounter

PHP流包装库,用于神奇地挂载本地或远程文件系统。

v1.0 2017-11-27 13:58 UTC

This package is not auto-updated.

Last update: 2024-09-29 05:01:39 UTC


README

MagicMounter,由Marvin Janssen(http://marvinjanssen.me)于2017年发布。

MagicMounter可以神奇地挂载“任何东西”。这些挂载可以通过使用PHP的任何文件/流函数通过magic://流包装器进行通用访问。使MagicMounter独特的是,挂载的底层驱动对最终用户是透明的。因此,您可以在某个时刻将本地目录挂载到magic://production,稍后可以通过FTP在相同的挂载点挂载远程目录。

由于MagicMounter作为一个流包装器,所有与流相关的优点都可用。想想所有的流函数、过滤器、迭代器等等。这个事实可以说使它成为PHP中最强大的FTP客户端之一,同时保持相当简洁。

挂载

Magic::mount(string $name,string $type,array $options);

在哪里

  • $name:挂载的名称(如magic://name)。
  • $type:挂载的类型,定义要加载哪个底层驱动(例如:'fs''ftp''ftps')。
  • $options:可选的特定驱动器选项,更多信息请参阅驱动器类。

用法

通过Composer安装

composer require marvinjanssen/magicmounter

下载项目作为zip文件并包含

require 'magicmounter/src/magicmounter.php'

示例代码

// Local filesystem:

Magic::mount('backup','fs',['directory'=>'/media/backup']);

copy('./index.php','magic://backup/index.php');

Magic::unmount('backup');

// FTP:

Magic::mount('production','ftp',
	[
	'host' => 'ftp.example.com',
	'username' => 'user',
	'password' => 'password',
	'directory' => '/var/www'
	]);

copy('./index.php','magic://production/index.php');

Magic::unmount('production');

驱动器

MagicMounter目前包含3个驱动器。

fs

本地文件系统驱动器。

选项

  • directory:要挂载的本地目录。

ftp

使用内置ftp_*函数的标准FTP驱动器。驱动器实现了PHP FTP扩展允许的尽可能多的文件系统功能。

选项

  • username:FTP用户名(默认'anonymous')。
  • password:FTP密码(默认'')。
  • port:FTP端口(默认21)。
  • directory:可选目录(默认'/')。
  • timeout:FTP连接超时(默认90)。
  • measure_transfer:尝试测量传输(默认false)。
  • exception_on_read_error:读取失败时抛出异常(默认false)。

如果启用measure_transfer,请使用以下方法来检索测量结果

$resource = fopen('magic://mount/file.ext','r');

// ...

Magic::quote($resource,'download_speed');
Magic::quote($resource,'bytes_downloaded');

ftps

扩展ftp但使用ftp_ssl_connect()

选项与ftp相同。

扩展

通过您的自定义驱动器扩展MagicMounter非常简单。在MagicMounter\driver命名空间中创建自己的类并实现MagicMounter\Driver接口。一个好的起点是MagicMounter\driver\Fs类。建议您对PHP流包装器有一定的了解。此外,确保尽可能多地实现,以提供全面的多功能驱动器。(支持fseek()fopen()touch()rename()stat()fopen()模式等。)

只要实现MagicMounter\Driver,您就可以定义任何自定义驱动器

Magic::driver('custom','\My\CustomDriver');

Magic::mount('production','custom');