Wordpress导入程序在单击“上传文件和导入”按钮后显示空白页调试一般字压错误克隆/迁移/移动或备份wordpress网站

2022-08-30 16:42:20

我一直在尝试将.xml文件从旧的WordPress导入到新的WordPress中。我在php中具有以下设置.ini:

  • upload_max_filesize = 64M
  • post_max_size = 90M
  • memory_limit = 128M

但是当我点击上传文件和导入按钮时,我得到一个空白页。没有错误或任何东西。

enter image description here有人知道如何解决这个问题吗?谢谢。

更新:

打开下面建议的错误显示后,我能够得到以下错误:

Fatal error: Class 'DOMDocument' not found in /var/www/html/wp-content/plugins/wordpress-importer/parsers.php on line 61

然后我能够通过安装php-xml来修复它。


答案 1

这个问题的原始形式没有提供足够的信息来证明实际试图猜测解决方案是合理的。

因此,我觉得最相关的答案是一些一般的故障排除步骤,这些步骤可能会更清楚地说明类似的情况 - 我的重点是在这种特定情况下可能有帮助的提示,但是由于无论如何都会相当冗长,因此我也包括一些更一般的提示。

OP实际上并没有要求wordpress导入/导出功能的替代方案,但是由于这是一个迁移变得很糟糕(加上wordpress导入/导出功能还有很多不足之处),我将尝试回答Alans关于在服务器/位置/域之间迁移wordpress的替代方法的问题。

冒着陈述显而易见的事实:这个答案会很长!

调试一般字压错误

步骤 1.确保您可以看到哪里出了问题

启用调试模式,并确保 已启用,并定义了适当的级别。这对任何wordpress开发都至关重要。display_errorserror_reporting

打开并找到此行:wp-config.php

define('WP_DEBUG', false);

将其替换为:

//Switch on wordpress' built-in debug mode
define('WP_DEBUG', true);
/**
 * Just a convenient check so you can leave the next few lines unchanged
 * for next time you need debugging, and just switch true/false above.
 */
if (WP_DEBUG) {
    //Handle all errors regardless of error level
    ini_set('error_reporting', -1);
    //Display errors directly in the browser
    ini_set('display_errors', 'On');
}

...如果由于某种原因,该行已经不存在,只需将其插入行上方的某个位置即可。

/* That's all, stop editing! Happy blogging. */

这应该允许您查看有关大多数(php-)错误的更多信息。

笔记:

  1. 在大多数情况下,只需设置为将自动启用 - 但是我发现上述内容涵盖了一些边缘情况,其中错误尽管存在,但仍未显示。WP_DEBUGtruedisplay_errorsWP_DEBUGtrue
  2. 在实时(生产)网站上,向每个访问者显示错误可能非常不可取,因此您可能希望:
    • 有条件地启用,例如通过IP:(显然替换您的实际IP)WP_DEBUGdefine('WP_DEBUG', $_SERVER['REMOTE_ADDR'] === '123.123.123.123');
    • 记录错误而不是显示它们 - 请参阅wordpress codex以获取更多信息:在WordPress中调试
  3. 如果您安装了低质量或过时的插件或主题,则很可能会看到这些插件或主题中编写不佳的功能的大量输出。

如果您在启用调试模式后立即看到引用其中一个插件的错误,我的建议是就此问题联系插件开发人员,或者只是卸载插件并找到另一个满足您需求的插件。在开发过程中甚至不关心使用调试模式的开发人员的插件很可能还包含安全问题和/或在未来或第三方兼容性方面不合标准。

步骤2.重现错误

无论你做了什么让问题发生 - 再做一次。这应该给你一些工作,例如,简单地将其粘贴到谷歌上,看看会发生什么。您很可能不是第一个遇到任何问题的人。

如果仍然没有看到任何可见的错误,请尝试右键单击“nothingness”并在明文编辑器中查看页面源代码。有时,错误可以隐藏在属性内部或屏幕上的元素后面。

您还可以尝试插入一些故意损坏的代码,以确认实际上将打印错误。例如,在指令之后键入。wp-config.phpthis_function_surely_does_not_exist();ini_set()

有些主机限制使用,所以如果事情仍然不起作用,但你没有看到任何错误,试着找出如何设置相关设置 - 它可能在你的托管服务提供商控制面板(cPanel,Plesk等)中,你可以直接访问你的php.ini通过FTP...或者他们可能无法设置它(立即找到其他提供商!ini_set()php.ini

也有可能您无法更改该值,但默认情况下,错误会记录在提供程序面板中的某个位置。

如果您得到一个完全白色的浏览器窗口,则可能是您在某个地方遇到了致命错误 - 或者服务器本身存在配置问题。这超出了本答案的范围,因此,如果下一节中有关增加限制的建议不起作用,请尝试谷歌“WSOD”以开始使用。

查找实际限制和设置

不要相信仅仅因为你有一个名为的文件,其中包含一行,说你的内存限制实际上是128M。这可以通过许多不同的方式进行设置,因此唯一可靠的方法是询问php其当前的内存限制是多少。对于大多数设置都是如此!php.inimemory_limit = 128Mphp.ini

为了公平地了解您的工作环境是什么样的,请创建一个名为 的文件(最好是在 wordpress 安装的根目录中),其中包含以下内容:phpinfo.php

<?php
//Your memory limit
echo 'memory_limit: ' . ini_get('memory_limit') . '<br>';
//Your maximum size of post-data (including file uploads)
echo 'post_max_size: ' . ini_get('post_max_size') . '<br>';
//The maximum file size for uploads
echo 'upload_max_filesize: ' . ini_get('upload_max_filesize') . '<br>';
//Maximum runtime for php scripts (in seconds)
echo 'max_execution_time: ' . ini_get('max_execution_time') . '<br>';
//Current error reporting level
echo 'error_reporting: ' . ini_get('error_reporting') . '<br>';
//Are errors displayed?
echo 'display_errors: ' . ini_get('display_errors') . '<br>';
//Will errors be logged?
echo 'log_errors: ' . ini_get('log_errors') . '<br>';
//Where will errors be logged?
echo 'error_log: ' . ini_get('error_log') . '<br>';
//What is the absolute path of this files parent folder
// = the complete path to your wordpress "root folder"
echo 'root of wordpress: ' . __DIR__ . '<br>';

/**
 * If you are curious to see *a lot* of information about your environment
 * then uncomment this line too:
 */
//phpinfo();

/**
 * This should print whatever is in the error log, but it could potentially
 * be huge, so use with caution!
 */
//echo '<pre>' . file_get_contents(ini_get('error_log')) . '</pre><br>';

您应该知道,上述所有值都可以在执行脚本期间更改 - 并且某些(质量较差)插件实际上会更改。例如,我看到插件试图增加memory_limit - 除了6-7年过去之外,这一切都很好,并且插件“增加”内存限制到32MB实际上搞砸了安装,因为现在需要64MB才能进行非常基本的wordpress安装,而对于大多数人来说,128MB将是一个更合理的最小值。这样做的问题是,在任何给定的执行点上实际确切地知道值的唯一方法是在该点插入上面的右键。

“偶尔”发生的错误的一些非常常见的原因,特别是与导入或文件上传有关的原因是 ,或者设置得太低 - 您可以尝试使用中的调用来增加它们:memory_limitpost_max_sizeupload_max_filesizeini_set()wp-config.php

ini_set('memory_limit', '256M');
ini_set('post_max_size', '128M');
ini_set('upload_max_filesize', '64M');

同样,您的主机可能会完全阻止您使用这些函数来影响限制,但可能会为您提供另一种设置它们的方法。

如果这也不起作用,请尝试禁用尽可能多的插件,并作为最后的手段切换到默认主题 - 但如果事情发展到这一点,请准备好丢失小部件和一堆设置。

如果你仍然停留在原点,请在Stack Overflow上提出一个问题,并非常详细地说明你在一切向南之前做了什么;)

克隆/迁移/移动或备份wordpress网站

那里有很多备份/迁移插件。如果您没有处理文件,数据库等的经验,那么您最好的选择可能是使用其中之一。我不会推荐任何特定的插件,因为更改太频繁了,我个人总是手动完成 - 谷歌搜索应该会产生很多相关的结果,我相信他们中的许多人在大多数情况下都可以完成工作。

但是,如果像我一样,您更喜欢手动操作以了解(和控制)该过程,这是我用于定期移动,重命名,克隆或备份wordpress安装的方法 - 它应该适用于几乎任何独立安装(即,如果您尝试移动多站点,则可能应该去寻找另一个指南)。

无论您是否处于以下状态,这些说明都应该有效

  • 从一台服务器迁移到另一台服务器 - 例如,从开发迁移到生产
  • 从一个域迁移到另一个域
  • 从子文件夹迁移到域根目录(或相反的方式)
  • 进行备份(只需在过程中途停止,如果需要重新创建备份,请从上次中断的地方继续)

基本步骤是:

  1. 获取所有文件的副本
  2. 获取整个数据库的副本
  3. 对文件进行必要的更正
  4. 将文件上载到新服务器(如果要还原备份,则为相同)
  5. 在新服务器上加载数据库
  6. 在数据库中执行必要的更正

这要求您有权访问:

  • 您的文件,例如通过FTP或您的托管服务提供商,都有一个工具可以创建包含所有文件的存档。
  • 您的数据库,例如通过phpMyAdmin或任何可以为您进行完整数据库转储的工具。

所有体面的托管计划,以及几乎所有便宜的共享托管计划都带有phpMyAdmin和FTP访问权限。VPS',私人服务器等显然带有直接文件和数据库访问,这将更好(或至少更快)。

如果您无法访问上述内容,无论您的网站托管在哪里,这可能是因为您从不希望您将其移走的人那里购买了您的网站(通常是因为他们免费或以非常低的成本设计了您的网站,并且需要您留在他们身边以收回他们的投资)。如果是这种情况,您可以尝试使用众多备份/迁移插件之一,但是它们甚至可能不允许您安装插件,因此您必须与他们联系并制定一些协议。(如果您无权访问您的数据库,但您有权访问您的文件,您可以自己安装phpMyAdmin - 但是如何做到这一点超出了本答案的范围)

请注意,根据您实际执行的操作,可以跳过某些步骤 - 一旦您了解了该过程,以及为什么(有时)需要每个步骤,您就可以随意执行这些步骤 - 但如果这是您第一次从头开始并完成每个步骤。

步骤 1.获取所有文件的副本

您需要获取wordpress安装的“根”中的所有文件。这是包含 的文件夹,加上大约 15-20 个文件。确保你也得到隐藏文件(例如,如果你使用FTP,文件可能会默认隐藏 - 在某些情况下,这个文件是完全无关紧要的,但在其他情况下,它可能是必不可少的,所以只要确保你得到一切)wp-contentwp-adminwp-includes.htaccess

如果您的托管服务提供商有某种文件管理器,您可能需要先尝试一下。许多文件管理器都提供了将文件夹作为单个压缩存档进行更新或下载的选项 - 这将比单独下载所有文件快得多。

如果您有一个VPS或任何具有SSH或其他形式的控制台访问的解决方案,请使用它并导航到安装的“根”,然后将所有内容压缩 - 应该做的事情。使用您拥有的任何方式下载文件。zip -r my_wp_backup.zip .

如果您只有FTP访问文件的权限,则可能需要一段时间,但您只需使用FTP登录(我最喜欢的FTP客户端是FileZilla,因为它易于使用,并且允许多次同时传输...但任何客户都应该没问题)。导航到wordpress的“根”,并将所有文件传输到计算机上的本地文件夹(不要忘记显示隐藏的文件!

步骤2.获取整个数据库的副本

如果您可以通过您的提供商访问phpMyAdmin,请使用它 - 这是迄今为止最简单的,除了极其特殊的数据库或极其旧的phpMyAdmin版本之外,我从未遇到过问题。

只需登录到phpMyAdmin,选择您的数据库,单击导出并接受默认值(选项因版本而异,但对于任何“正常”wordpress数据库,默认值应该没问题)。这应该为您提供名称以“.sql”结尾的文件下载 - 或者一个包含大量文本的大文本字段。如果您获得后者,只需将其复制到本地计算机上的常规文本文件中 - 记事本,记事本++或任何其他纯文本编辑器都可以使用(即不要使用Word,google文档或任何其他富文本编辑器!

如果您无法访问phpMyAdmin,则可以安装它(我不打算描述),或者您必须找到其他方法来导出数据库,例如:

  • 如果您具有控制台访问权限,则此命令应该会为您提供可用的转储: - 如果您不知道数据库的名称,请查看wp-config.php(如果您不知道,还包含您的用户名和密码)mysqldump -u your_database_username -p your_db_name > my_backup.sql
  • 如果您没有控制台访问权限,请浏览您的提供商控制面板 - 当然,他们有一些方法可以让您进行数据库转储。

第3步.对文件进行必要的更正

您现在应该在本地磁盘上有一个完整的备份。

  • 如果您只是进行备份,则已完成 - 文件和数据库已准备好上传到同一位置,所有内容都将还原到当前状态。
  • 如果您要移动到其他服务器或同一服务器上的其他位置,请找出:
    • 您的新路径是什么(如果您的提供商没有为您提供任何线索,请上传上述文件)phpinfo.php
    • 您的新数据库用户名和密码是什么
    • 如果您需要一个特殊的主机名来连接到数据库(在大多数情况下就足够了,但是一些提供商有专用的mysql服务器,要求您连接到其他主机名)localhost

更正您的文件 - 相关行是:wp-config.php

/** The name of the database for WordPress */
define('DB_NAME', 'your_database_name');

/** MySQL database username */
define('DB_USER', 'your_database_username');

/** MySQL database password */
define('DB_PASSWORD', 'your_database_password');

/** MySQL hostname */
define('DB_HOST', 'localhost');

虽然有些插件很少在需要更新的文件中写入信息,但是如果您的wordpress根文件夹的绝对路径或安装的绝对URL在迁移过程中发生变化,您还应该进行完整的搜索并替换它们:

  • 如果安装的旧绝对路径是旧的,而新的绝对路径是在所有文件中搜索并替换这些路径。不要包含尾部斜杠!/var/www/www.example.com/web/blog/var/www/blog.example.com/public_html
  • 如果旧 URL 是,并且新 URL 将进行搜索以替换为 。不要包含,也不要包含尾部斜杠!http://www.example.com/bloghttp://blog.example.comwww.example.com/blogblog.example.comhttp://

请注意,如果由于某种原因,您处于不知道旧的绝对路径和/或URL的情况下,则可以在数据库中找到它们,因此请先执行步骤5,并在表中查找值(您的绝对URL),并且通常包含您的绝对路径(加号) - 如果它不知道,那么表中可能会有其他行可以告诉您路径是什么, 查找以 或 开头的内容。prefix_optionssiteurlupload_path/wp-content/uploads/var/www/home/something

步骤 4.将文件上载到新服务器或新位置

与步骤1一样,您的选项可能会有所不同,但关键是将所有文件上传到将成为新根目录的任何文件夹中。使用您可用的任何手段来执行此操作。

不要屈服于上传文件后“尝试”网站的诱惑 - 尽管如果您在所有步骤完成之前访问,它不太可能产生不可预见的后果

第5步.在新服务器上加载数据库

同样,选项也各不相同:

  • 如果phpMyAdmin可用,只需登录,选择您的数据库,单击导入并从步骤2上传文件。有时我甚至会点击标签,直接将整个内容粘贴到大文本字段中。SQL
  • 如果您具有控制台访问权限,则可以上传文件并运行mysql -u your_database_username -p your_new_db_name < my_backup.sql

第6步.在数据库中执行必要的更正

如果要将备份还原到同一服务器和位置,则已完成。

但是,如果您要迁移到其他服务器或不同的URL,则需要注意Wordpress本身以及许多插件会在数据库中的很多(数千个)位置写入您的绝对URL,并且您的绝对路径也可能至少存在于几行中。

您还需要注意,许多插件以及一些核心wordpress函数使用php函数轻松地在数据库中存储复杂数据。这种格式对变化非常敏感,因此“常规”搜索和替换非常(非常!)可能会破坏所有内容。serialize

幸运的是,有一个免费工具专门设计考虑到这一点。我没有隶属关系,但我不能推荐互连/ it数据库搜索和替换足够多。它维护得很好,超级用户友好,我从来没有亲身经历过它搞砸了任何事情。

使用上面的链接下载它,解压缩它,重命名文件夹并将其上传到您的wordpress根文件夹。然后在浏览器中转到(显然替换了URL的相关部分)。something_random_for_securityhttp://blog.example.com/something_random_for_security

您将看到一个整洁的图形界面,它可能已经为您填写了数据库详细信息(通过阅读您的)。wp-config.php

在屏幕顶部有一个搜索字段和一个替换字段。不要弄乱其他任何东西,当然,除非它实际上未能自动获取您的数据库信息。

喜欢您需要搜索的文件:

  • 旧的绝对路径,并替换为新的绝对路径(不包括尾部斜杠)
  • 旧的绝对 URL 并替换为新的绝对 URL(不包括协议和尾部斜杠)http://

您可以先使用“试运行”按钮查看将要更改的内容,如果可能出现任何明显的问题 - 之后只需单击“实时运行”按钮,它就会咀嚼整个数据库,并在相关的地方以安全的方式替换。serialize()

步骤 6,5 损坏的永久链接

如果您已将站点从一个文件夹移动到另一个文件夹(或向上或向下移动一个级别),则永久链接/“漂亮的URL”可能不起作用(即您的首页很好,但其他所有内容都是一个大错误)。这是因为“隐藏”文件中的规则变得“混乱”。修复非常简单 - 只需访问“设置” - >wordpress admin中的“永久链接”...您无需进行任何更改,只要您访问该页面,文件就会自动刷新。.htaccess

检查一切是否正常,然后去庆祝...


答案 2

您的指令格式错误。尝试

upload_max_filesize = 64M
post_max_size = 90M
memory_limit = 128M
max_execution_time = 120

如果这些不起作用,请询问您的网络主机;您可能无法在 php.ini 中进行更改。

并尝试运行调试 https://codex.wordpress.org/Debugging_in_WordPress 以捕获PHP错误,这些错误可能指向问题和解决方案。


推荐