我强烈建议使用WP-CLI(正如Atanas Angelov所建议的)来搜索和替换WordPress数据库。但您的问题是如何对SQL文件执行此操作。我编写了一个PHP函数,它在搜索和替换SQL时处理序列化数据。以我的经验来看,它运作得很好。如果您有反馈,请让我知道,但请随时使用。
您需要一个可以实现此功能的程序,将此功能转换为CLI工具或使用您喜欢的任何编程语言的小型图形应用程序都不会太困难。要像这样运行它,只需将其放置在PHP文件中,并调用文件底部的函数,如下所示:
snr("http://example.com", "https://example.com", "/path/to/original.sql", "/path/to/replaced.sql");
您可以使用php-e/path/to/which来执行该文件。php
我不会把这个文件放在服务器上可公开访问的目录中,但它工作得很好。
除此之外,还有一个流行的“Interconnect”脚本(https://github.com/interconnectit/Search-Replace-DB) 您可以上载到服务器,并从浏览器中使用它来搜索和替换数据库。WP repo中还有几个WordPress插件,用于搜索和替换数据库。一个是https://wordpress.org/plugins/better-search-replace/
function snr($search, $replace, $inputfile, $outputfile){
$sql = file_get_contents($inputfile);
$sql1 = str_replace($search,$replace,$sql);
file_put_contents($outputfile,$sql1);
$serstrings = preg_split("/(?<=[{;])s:/",$sql1);
foreach($serstrings as $i=>$serstring) {
if (!!strpos($serstring, $replace)){
$justString = str_replace("\\\\","",str_replace("\\\\\\\\","j",explode(\'\\\\";\',explode(\':\\\\"\',$serstring)[1])[0]));
$correct = strlen($justString);
$serstrings[$i] = preg_replace(\'/^\\d+/\',$correct, $serstrings[$i]);
}
}
file_put_contents($outputfile,implode("s:",$serstrings));
}