代码之家  ›  专栏  ›  技术社区  ›  Zack

这个PHP生成的语句的值不是什么?

  •  2
  • Zack  · 技术社区  · 16 年前

    我有一个代码可以在每次页面加载时运行:

    $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
    

    我不认为这很重要,但我使用的原则与代码点火器。

    编辑:我已经让它使用mamp工作了,不需要修改代码,所以它可能是php.ini吗?

    伊迪丝2:在深入研究了这一点之后,似乎出于某种原因,在我的媒体神庙服务器上,一切都运行了两次。在每次页面加载时,我会将整个日志(CI日志)写入两次。因此,当没有执行任何查询时,条令日志将被重写。我仍然不知道为什么这发生在中介模板上,而不是在本地,所以我会潜得更深一点。

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

    1 回复  |  直到 16 年前
        1
  •  0
  •   VolkerK    16 年前

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

    $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版本存在问题。

    推荐文章