4

以下代码正在破坏我的 apache Web 服务器。当我从中删除数据库查询时parse_service_rows(),apache 不会崩溃。

我还尝试在没有帮助的情况下从查询中删除 WHERE 子句。

我的代码如下所示:

public function tab($tab_name = '') {
    /*
     * CODE TO GET ROWS
     */
    $service['rows'] = array_map(array($this, 'parse_service_rows'), $service['rows']);
}

private function parse_service_rows($row) {

    // This query causes apache to crash
    $order = $this->db->get_where('services', array(
            'service_user_id' => $this->user->get('user_id'),
            'service_firm_id' => $this->firm->id,
            'service_type' => $row['type'],
            'service_object_id' => $row['object_id']
    ), 1)->row_array();

    return $row;
}

但是,当我尝试使用foreach而不是array_map

foreach ($service['rows'] as $key => $row) {
    $service['rows'][$key] = $this->parse_service_rows($row);
}

Windows 错误窗口提供以下信息:

Problem Event Name: APPCRASH
  Application Name: httpd.exe
  Application Version:  2.4.2.0
  Application Timestamp:    4fafa3e6
  Fault Module Name:    php5ts.dll
  Fault Module Version: 5.4.4.0
  Fault Module Timestamp:   4fd8f85c
  Exception Code:   c0000005
  Exception Offset: 000713cd
  OS Version:   6.1.7600.2.0.0.256.1
  Locale ID:    1061
  Additional Information 1: 0a9e
  Additional Information 2: 0a9e372d3b4ad19135b953a78882e789
  Additional Information 3: 0a9e
  Additional Information 4: 0a9e372d3b4ad19135b953a78882e789

为什么会这样?

4

2 回答 2

1

您应该检查您的 IIS PHP 错误日志,您应该能够通过您的 IIS 管理员在 PHP 配置中找到它并从那里读取它。

确保您的 PHP 日志级别至少为 E_ALL 并且打开了 error_reporting,如果这是一个开发服务器,您可能也应该打开 display_errors。这些都是 PHP.ini 中的所有选项,您也可以从 IIS 管理控制台进行编辑。

如果这没有帮助,这里有一些你应该看看的地方;

  • 在查询之前调用 $this->user->get('user_id') 并将结果设置为变量的实例。这将显示用户类是否已实例化,以及用户类中 get 函数的范围是否存在任何问题。
  • 也可以在 get_where 之外调用它,$this->firm->id, id 可能不是公共属性,这也会导致 PHP 致命。
于 2013-06-11T21:49:42.873 回答
0

@Kristian您是否尝试过在tab()之前声明parse_service_rows()?我记得在某处读过,如果在调用函数之后声明回调函数,则使用回调可能会出现问题。

于 2013-02-01T18:04:00.490 回答