Каковы значения этого PHP-сгенерированных операторов, записанных в журнал? - PullRequest
2 голосов
/ 30 января 2010

У меня есть этот код, который запускается при каждой загрузке страницы:

$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

Не думаю, что это имеет значение, но я использую Doctrine с CodeIgniter.

РЕДАКТИРОВАТЬ: Я получил это работать с использованием MAMP, без изменения кода, так что это может быть php.ini?

РЕДАКТИРОВАТЬ2: После более глубокого изучения этого вопроса, по какой-то причине на моем сервере Media Temple все запускается дважды. При загрузке каждой страницы я получаю весь журнал (ci log), записанный дважды. Таким образом, журнал доктрин перезаписывается, когда ни один запрос не выполняется. Я до сих пор не уверен, почему это происходит на MediaTemple, а не локально, поэтому я углублюсь немного глубже.

EDIT3: это можно закрыть, так как это больше не проблема PHP. Отключение JavaScript решило проблему, поэтому я смотрю не в том месте. Спасибо всем за вашу большую помощь!

1 Ответ

0 голосов
/ 30 января 2010

Давайте выясним, по какой-то причине ваш код get вызывается дважды в одном и том же запросе / процессе или обрабатываются два (не очень) отдельных запроса.

$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.

...