vielhuber / magicreplace
一个零开销的搜索/替换类。
Requires
- php: >=5.6
Requires (Dev)
- dev-master
- 1.5.8
- 1.5.7
- 1.5.6
- 1.5.5
- 1.5.4
- 1.5.3
- 1.5.2
- 1.5.1
- 1.5.0
- 1.4.9
- 1.4.8
- 1.4.7
- 1.4.6
- 1.4.5
- 1.4.4
- 1.4.3
- 1.4.2
- 1.4.1
- 1.4.0
- 1.3.9
- 1.3.8
- 1.3.7
- 1.3.6
- 1.3.5
- 1.3.4
- 1.3.3
- 1.3.2
- 1.3.1
- 1.3.0
- 1.2.9
- 1.2.8
- 1.2.7
- 1.2.6
- 1.2.5
- 1.2.4
- 1.2.3
- 1.2.2
- 1.2.1
- 1.2.0
- 1.1.9
- 1.1.8
- 1.1.7
- 1.1.6
- 1.1.5
- 1.1.4
- 1.1.3
- 1.1.2
- 1.1.1
- 1.1.0
- 1.0.9
- 1.0.8
- 1.0.7
- 1.0.6
- 1.0.4
- 1.0.3
- 1.0.2
- 1.0.1
- 1.0.0
This package is auto-updated.
Last update: 2024-09-23 13:22:34 UTC
README
✨ magicreplace ✨
magicreplace 是一个数据库迁移的搜索替换工具。
简介
问题
当迁移数据库时,通常 URL 环境也会改变。如果 URL 在数据库中硬编码(如 WordPress 所述),则必须更改这些 URL。如果您现在对整个数据库进行搜索和替换以更改 URL,则可能会损坏序列化的数据。只需尝试
unserialize(str_replace('www.foo.tld', 'www.barrr.tld', serialize('url=www.foo.tld')));
并将获得一个丑陋的错误。
已经存在一些很酷的工具可以解决这个问题,例如...
- Velvet Blues Update URLs
- Better Search Replace
- Suchen & Ersetzen
- WP Migrate DB
- WP-CLI 的搜索替换
- Search-Replace-DB
- SerPlace
magicreplace 与这些工具有何不同?
- 速度快(100MB 数据库文件,300,000 行的运行时间约为 5 秒)
- 轻量级:仅小于 10KB
- 在内存限制设置小的文件上也能工作
- 基于文件:不需要数据库或 wp 安装 - 可以在纯(sql)文件上工作
- 本地使用:不需要远程服务器或网络服务
- 多替换:执行多个替换
- 考虑边缘情况:可以处理对象甚至引用
- 忽略在运行时不可用的类
- 可以用命令行或作为类使用
- 操作谨慎:如果序列化失败,则不做任何更改
- 永不更改数据(超出范围的整数保留,自动生成的日期不更新)
- 将其工作分成几部分以克服 php 限制
- 支持特殊 base64 字符串中的替换(例如在 BeTheme 中)
免责声明
这并不免除您进行备份的责任。使用此脚本风险自负!
命令行
要求
Mac
brew install coreutils
Windows
使用 WSL/WSL2/Cygwin 运行即可。
Linux
–
安装
wget https://raw.githubusercontent.com/vielhuber/magicreplace/master/src/magicreplace.php
使用
php magicreplace.php input.sql output.sql search-1 replace-1 search-2 replace-2
类
安装
composer require vielhuber/magicreplace
使用
<?php require __DIR__ . '/vendor/autoload.php'; use vielhuber\magicreplace\magicreplace; magicreplace::run('input.sql', 'output.sql', ['search-1' => 'replace-2', 'search-2' => 'replace-2']);
推荐替换策略
例如,如果您想将 http://www.foo.tld 替换为 https://www.bar.tld,最安全的方法是使用以下替换(按给定顺序)
http://www.foo.tld
https://www.bar.tld
https://www.foo.tld
https://www.bar.tld
http://foo.tld
https://www.bar.tld
https://foo.tld
https://www.bar.tld
www.foo.tld
www.bar.tld
foo.tld
bar.tld
测试
只需将这些 3 个文件放置在 tests/data
的子文件夹中(可选嵌套)
input.sql
:所需的输入文件output.sql
:所需的输出文件settings.sql
:定义您的替换
示例 settings.sql
文件
{
"replace": {
"http://www.foo.tld": "https://www.bar.tld",
"https://www.foo.tld": "https://www.bar.tld"
}
}
如果测试失败,预期的输出将存储在 expected.sql
中。
您甚至可以自动生成测试用例(比较 magicreplace 与 Search-Replace-DB,并且只给出差异)如果您省略 input.sql
和 output.sql
,并定义一个从本地导出的 MySQL 数据库。示例 settings.sql
文件
{
"source": {
"host": "localhost",
"port": "3306",
"database": "xxx",
"username": "xxx",
"password": "xxx",
},
"replace": {
"http://www.foo.tld": "https://www.bar.tld",
"https://www.foo.tld": "https://www.bar.tld"
}
}
input.sql
和 output.sql
然后会自动生成。在您重新运行测试之后,这些生成的文件会被使用。如果您想再次生成它们,只需在运行测试之前删除它们即可。您还可以提供一个 whitelist.sql
文件,其中包含应忽略的所有来自 input.sql
的行(例如,当 magicreplace 与 Search-Replace-DB 的行为不同时)。