我有这个代码,每个页面加载运行:
$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解决了这个问题,所以我找错了地方。谢谢大家的帮助!
答案 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版本的问题。