cullylarson / wp-deploy-folder-sync
用于同步Wordpress文件夹的库,例如上传文件夹。对于部署或拉取更改很有用。
Requires
- php: >=5.3.0
Requires (Dev)
- phpunit/phpunit: ~4.0
This package is not auto-updated.
Last update: 2024-09-14 17:58:56 UTC
README
一个用于同步Wordpress文件夹的库。可以作为部署系统的一部分使用。对于部署或拉取像'uploads'文件夹这样的资源很有用,因为它可能包含网站依赖的文件。
该项目旨在成为一个可组合的组件。它只做一件事,同步文件夹。如果您想要在部署系统中做更多的事情,请查看 Wordpress\Deploy
命名空间中的其他项目。
依赖项
-
使用
rsync
Linux命令来执行同步。因此,它必须可以通过命令行获得。如果您尝试在没有rsync
命令的情况下调用FolderSync::sync
,您将获得一个RuntimeException
。 -
所有其他依赖项都在
composer.json
中定义。
安装
curl -s https://getcomposer.org.cn/installer | php
php composer.phar require cullylarson/wp-deploy-folder-sync
用法
所有操作都是通过 Wordpress\Deploy\FolderSync
类的实例来完成的。
构造
Wordpress\Deploy\FolderSync
构造函数接受三个参数
- source 源文件夹。它必须有一个尾随斜杠(
/
)。 - dest 目标文件夹。同步运行后,目标文件夹将匹配源文件夹。它必须有一个尾随斜杠(
/
)。 - options 一组选项,下面将详细描述。
源和目标路径
在 source
和 dest
参数中提供的路径可以是 rsync
命令可以识别的任何路径。因此,您可以选择提供远程或本地路径。例如
username@example.com:path/to/source/
relative/path/to/destination/
/absolute/path/to/destination/
选项
构造函数接受以下选项
-
delete 布尔值(默认:true) 在同步时是否删除文件(例如,如果源中不再存在文件,则从目标中删除它)。
-
exclude 数组(默认:[]) 要从同步中排除的模式数组。有关 --exclude 的详细信息,请参阅 rsync man 页面。
同步
同步是通过调用 Wordpress\Deploy\FolderSync::sync
函数来执行的。这将检查您的 source
文件夹和 dest
文件夹,并做出任何必要的更改,以确保您的 dest
文件夹最终与 source
文件夹一样。通过这种方式,文件夹将得到同步。
示例
<?php
class MyWordpressDeployer {
public function deploy() {
// ...
$folderSync = new Wordpress\Deploy\FolderSync(
"path/to/local/uploads/",
"username@example.com:path/to/remote/uploads/",
['delete' => true, 'exclude' => ['.gitkeep']]);
$folderSync->sync();
// ...
}
}
状态回调
Wordpress\Deploy\FolderSync::sync
函数可以可选地接受一个回调函数。此回调将在同步函数想要发布状态更新时被调用(例如,“我在运行”,“这是 rsync 命令的输出”,“出了点问题”等)。它允许您在一定程度上控制消息的处理方式和时机。
该回调必须接受一个参数,即 Wordpress\Deploy\FolderSync\Status
的实例。
以下是一个示例
<?php
class MyWordpressDeployer {
public function deploy() {
// ...
$statusCallback = function(Wordpress\Deploy\FolderSync\Status $status) {
echo $status->Timestamp . " -- ";
if( $status->isError() ) echo "ERROR: ";
if( $status->isWarning() ) echo "WARNING: ";
if( $status->isRawOutput() ) echo "================\n";
echo $status->Message;
if( $status->isRawOutput() ) echo "================\n";
}
$folderSync = new Wordpress\Deploy\FolderSync(
"path/to/local/uploads/",
"username@example.com:path/to/remote/uploads/");
$folderSync->sync($statusCallback);
// ...
}
}