【问题标题】:Drupal update.php produces errorDrupal update.php 产生错误
【发布时间】:2009-11-21 18:16:26
【问题描述】:

我在共享托管环境中有一个基本的 Drupal 6 站点。该网站已经运行了大约一个月。

我上传了一个新版本的 webform Drupal 模块,当我去 update.php 完成页面时,我得到了错误。 update.php 预览页面没有显示网络表单所需的任何更新,但如果我继续,我会收到以下错误。也许如果没有补丁我不应该继续更新.php?

在“运行更新”步骤我收到此错误:

发生 HTTP 错误 0。 http://nejewls.com/update.php?id=8&op=do

在审核日志页面我收到此错误

警告:array_pop() [function.array-pop]:参数应该是第 314 行 /home/nejebel4/public_html/update.php 中的数组。

注意事项:

  • 该站点是 Drupal 6.14
  • 6.x-2.9 未知的网络表单
  • 我尝试在 .htaccess 级别禁用 SecFilterInheritance
  • 网站重定向到 .htaccess 文件中的 www
  • 我将 settings.php 中的基本 URL 设置为带和不带 www

【问题讨论】:

    标签: drupal drupal-6


    【解决方案1】:

    第一个问题:你怎么不知道你运行的是什么版本的 webform?它在站点的模块或更新页面中显示什么?如果那里什么都没有显示。系统表中 DB 模式的值是多少?

    第二个问题:我的一位同事因为安装了模块的开发版本而弄得一团糟。您确定您之前只使用了 beta 版或稳定版,而不是 dev 快照?

    那么,至于解决方案……

    我没有任何方便的站点来尝试重现您的问题。但是您收到的警告并不是真正的问题...在我看来,问题似乎是网络表单的更新无法正常运行或无法正确报告成功。

    生成警告的代码位在 update.php 文件中,它是:

    if ($_SESSION['update_success']) {
      $output = '<p>Updates were attempted. If you see no failures below, you may proceed happily to the <a href="'. base_path() .'?q=admin">administration pages</a>. Otherwise, you may need to update your database manually.'. $log_message .'</p>';
    }
    else {
      list($module, $version) = array_pop(reset($_SESSION['updates_remaining']));
      $output = '<p class="error">The update process was aborted prematurely while running <strong>update #'. $version .' in '. $module .'.module</strong>.'. $log_message;
      if (module_exists('dblog')) {
        $output .= ' You may need to check the <code>watchdog</code> database table manually.';
      }
      $output .= '</p>';
    }
    

    所以,只有在更新过程中出现问题时,才会运行生成错误的代码。因此,它看起来是您正在更新的模块中的一个错误。

    如果我遇到你的情况我绝对想要或需要最新的更新我会尝试手动执行更新。以下是如何做到这一点(我假设您的模块是 webform,但该过程也适用于其他模块:

    1. 备份您的数据库!
    2. 确保您已安装开发者模块。
    3. 浏览数据库表“系统”并找出您当前为 webform 模块安装的架构版本(通常是一个以 6 开头的四位数字)。
    4. 打开模块目录中的 webform.install 文件,并搜索架构版本大于现有版本的所有更新。它们看起来像名为 webform_update_6XXX() 的函数。
    5. http://example.com/devel/php 提供的 php 控制台中,一次运行所有这些更新,直到找到破坏系统并可以对其进行调试的更新。
    6. File a bug 与您的补丁一起使用,以便社区可以从您的工作中受益。
    7. 一旦您解决了该问题并安装了所有更新,您就可以使用上次运行的架构编号手动设置系统表。

    您可以尝试的另一个选项

    1. 备份您的数据库!
    2. 停用并完全卸载 webform 模块。
    3. 安装新版本的网络表单。
    4. 通过 SQL 从备份数据库中的表中手动导入数据

    这两个选项都可能很棘手且耗时。

    希望这会有所帮助!

    【讨论】:

      【解决方案2】:

      看起来像 this issue 在 Drupal.org 上提交的。看起来没有解决。我会在 Freenode 上的 Drupal IRC 频道#drupal 寻求帮助

      【讨论】:

        猜你喜欢
        • 2015-06-12
        • 2018-06-15
        • 1970-01-01
        • 2013-07-30
        • 2016-08-10
        • 2018-11-01
        • 2017-04-11
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多