写入日志的PHP生成语句的值是什么?

时间:2010-01-29 21:40:21

标签: php codeigniter doctrine

我有这个代码,每个页面加载运行:

$output = "<"."?php  if ( ! defined('BASEPATH')) exit('No direct script access allowed'); ?".">\n\n";
$output .= print_r($events, 1);
$output .= "\nTotal Doctrine time: " . $time  . "\n";
$output .= "Peak Memory: " . memory_get_peak_usage() . "";

file_put_contents(BASEPATH."/logs/doctrine_profiler.php", $output);

但是当我查看日志文件时,我看到了:

Array
(
)

Total Doctrine Time: 0
Peak Memory: 4006524

但如果我回应$output我得到了预期的结果:

Array
(
    [0] => Array
        (
            [type] => execute
            [query] => SELECT t.id AS t__id, t.name AS t__name, t.annual_fee AS t__annual_fee, t.monthly_fee AS t__monthly_fee, t.additional_store_fee AS t__additional_store_fee FROM tier t WHERE (t.id = ?) LIMIT 1
            [time] => 0.000474
            [params] => Array
                (
                    [0] => 3
                )

        )

)

Total Doctrine time: 0.005281925201416
Peak Memory: 6135048

我认为这不重要,但我正在使用CodeIgniter的Doctrine。

编辑:我已经使用MAMP工作,没有更改代码,所以它可能是php.ini的东西吗?

EDIT2:在进一步深入研究之后,由于某种原因,在我的Media Temple服务器上看来,一切都运行了两次。在-each- pageload上,我得到了两次写入的整个日志(ci log)。因此,当没有执行查询时,学说日志就会被重写。我仍然不确定为什么会在MediaTemple上发生这种情况,而不是在本地,所以我会深入一点。

EDIT3:这可以关闭,因为它不再是PHP问题。禁用JavaScript解决了这个问题,所以我找错了地方。谢谢大家的帮助!

1 个答案:

答案 0 :(得分:0)

让我们看看是否由于某种原因,您的代码在同一个请求/进程中被调用了两次,或者是否处理了两个(不那么)单独的请求。

$output = "<"."?php  if ( ! defined('BASEPATH')) exit('No direct script access allowed'); ?".">\n\n";
$output .= print_r($events, 1);
$output .= "\nTotal Doctrine time: " . $time  . "\n";
$output .= "Peak Memory: " . memory_get_peak_usage() . "\n";
function dbgFoo() {
  static $a = 0;
  return ++$a;
}
$output .= 'debug counter: ' . dbgFoo() . "\n";
// edit: forgot the $return parameter for print_r
$output .= 'POST=' . print_r($_POST, 1);
$output .= 'GET=' . print_r($_GET, 1);
$output .= 'callstack: ' . print_r(debug_backtrace(), 1) . "\n\n\n";

file_put_contents(BASEPATH."/logs/doctrine_profiler.php", $output, FILE_APPEND);

如果在同一个php实例/请求中调用了两次代码,则调试计数器输出应为> 1。也许调用堆栈可以帮助您找到应用程序选择再次调用代码的点。
否则,_POST和_GET的输出可能表明为什么有两个http请求。也许你的浏览器中有一个加载项会导致第二个请求?有例如ajax请求和较旧的firebug版本的问题。