【问题标题】:Apache error - child pid 1789 exit signal Bus error (10)Apache 错误 - 子 pid 1789 退出信号总线错误 (10)
【发布时间】:2012-01-11 23:20:40
【问题描述】:

我收到了这个奇怪的错误child pid 1789 exit signal Bus error (10) 我以前从未在我的 Apache 错误日志中看到过。我正在使用 FuelPHP 框架。网络应用程序运行良好。但是今天突然间我创建了新的控制器,它本身就是另一个控制器的副本。我复制的那个工作正常(http://localhost/myapp/admin/users),但是副本(http://localhost/myapp/admin/apartments)让我犯了那个错误?!我对此感到沮丧。

经过 3 个小时的调试,我终于找到了整个事情停止的那一行。它位于这一行if (class_exists($class)) 的Router 类的FuelPHP 核心中。 if 之前的$class 的值为Controller_Admin_Apartments,这是我添加的类,存在于我的控制器类文件夹中。

fuel/core/classes/router.php:

protected static function parse_segments($segments, $namespace = '', $module = false)
{
    $temp_segments = $segments;

    foreach (array_reverse($segments, true) as $key => $segment)
    {
        $class = $namespace.'Controller_'.\Inflector::words_to_upper(implode('_', $temp_segments));
        array_pop($temp_segments);
        if (class_exists($class))      // ***** HERE ERROR HAPPENS ***** //
        {
            return array(
                'controller'    => $class,
                'action'        => isset($segments[$key + 1]) ? $segments[$key + 1] : null,
                'method_params' => array_slice($segments, $key + 2),
            );
        }
    }

    // Fall back for default module controllers
    if ($module)
    {
        $class = $namespace.'Controller_'.$module;
        if (class_exists($class))
        {
            return array(
                'controller'    => $class,
                'action'        => isset($segments[0]) ? $segments[0] : null,
                'method_params' => array_slice($segments, 1),
            );
        }
    }
    return false;
}

FeulPHP forum 的用户指出这可能与硬件有关。但事实并非如此。我把整个东西移到另一台电脑上,仍然有同样的东西。我只是不明白。这里发生了什么?

【问题讨论】:

    标签: php apache fuelphp


    【解决方案1】:

    好吧,拍我吧。刚刚发现我自己的错误。我不知道为什么会这样,但我的控制器 Controller_Admin_Apartments 中有一个合成器错误。我有这个功能:

    public function action_delete($id = null)
    {
        if (apartment = Model_Apartment::find($id))
        {
            $apartment->delete();
            Session::set_flash('success', 'Deleted apartment #'.$id);
        }
        else
        {
            Session::set_flash('error', 'Could not delete apartment #'.$id);
        }
        Response::redirect('admin/apartments');
    }
    

    注意这一行:if (apartment = Model_Apartment::find($id)),我忘记在变量名前面添加$。我真的很惊讶 FulePHP 框架没有提醒我,我唯一的错误是在 Apache 错误日志中:S。奇怪,就是奇怪……

    【讨论】:

      【解决方案2】:

      这是一个完全不同的解决方案,但与“信号总线错误”有关:当我在 php.ini 的 memory_limit 设置中不小心输入了512MB 而不仅仅是512M 时,我得到了这个。

      【讨论】:

        猜你喜欢
        • 2011-08-30
        • 2015-11-25
        • 2013-03-19
        • 2014-04-28
        • 1970-01-01
        • 2016-07-14
        • 2017-07-06
        • 2013-02-07
        • 1970-01-01
        相关资源
        最近更新 更多