Модераторы: skyboy, MoLeX, Aliance, ksnk

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Как сделать свою суперглобальную переменную? 
V
    Опции темы
Fortop
Дата 19.3.2013, 19:33 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Завсегдатай
Сообщений: 2200
Регистрация: 13.11.2007
Где: Донецк

Репутация: 20
Всего: 42



Цитата(animegirl @  19.3.2013,  19:18 Найти цитируемый пост)
arse error: syntax error, unexpected '[', expecting ',' or ';' in ....

Версия php  у тебя меньше 5.4

Код

$trace = debug_backtrace();
$firstLine = reset($trace);
echo $firstLine['file'], PHP_EOL;


Цитата(animegirl @  19.3.2013,  19:18 Найти цитируемый пост)
Notice: Undefined index: file in ...

Вызываешь debug_backtrace() напрямую вне функции или подключаемого файла.
Поэтому стектрейса нет.

Для таких случаев можно добавить подобную проверку

Код

if ($trace = debug_backtrace()) {
    $firstLine = reset($trace);
    echo $firstLine['file'], PHP_EOL;
} else {
    echo __FILE__, PHP_EOL; 
}



Добавлено через 2 минуты и 9 секунд
для получения времени работы можно пользоваться или xhproof
Он запишет не только время выполнения каждого запуска скрипта, но и время выполнения отдельных функций в скрипте


В самом же скрипте можно использовать getrusage()

Код


$dat = getrusage();
echo $dat["ru_utime.tv_sec"]*1e6+$dat["ru_utime.tv_usec"], PHP_EOL; // время выполнения скрипта в миллисекундах



Добавлено через 2 минуты и 58 секунд

т.е. вместо того чтобы возится самому с вычислением времени и прочего - мы поручаем эту работу профайлеру и/или системе.
Сами лишь пользуемся той информацией, которую они нам дают.


--------------------
Мир это Я.
Живее всех живых.
PM MAIL   Вверх
animegirl
Дата 19.3.2013, 19:58 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Незнайка на Марсе
**


Профиль
Группа: Участник
Сообщений: 326
Регистрация: 24.7.2011

Репутация: нет
Всего: нет



Цитата(Fortop @  19.3.2013,  19:33 Найти цитируемый пост)
Вызываешь debug_backtrace() напрямую вне функции или подключаемого файла.

То есть перелопатить все 100+ файлов на добавление этой строчки, а потом каждый раз когда захочу подправить, что-то опять все файлы править, разве не для этого функции придумали?

Спасибо за функцию getrusage(), надо будет глянуть, что она может. Ну и как я уже написла, это только часть лога )
Для статистики по MySQL тоже есть команды готовые?


--------------------
Скажи миру - НЯ!
PM   Вверх
IgorIV
Дата 19.3.2013, 22:45 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 642
Регистрация: 7.9.2009

Репутация: 2
Всего: 8



animegirl
Код


$start_time = microtime(TRUE);

function stop_timer()
{
    global $start_time;

    $run_time = microtime(TRUE) - $start_time;
    return $run_time;
}

function write_log($file)
{
    $main_path = substr(dirname(__FILE__),0,-3);
    if($file)
    {
        $run_time = stop_timer();
        $path = $main_path.'stats/runtime/'.$file;
        if(!file_exists($path) )
        {
            if (!mkdir($main_path.'stats/runtime/'.$file, 0755, true))
            {
               echo 'Не удалось создать директории...';
            }
        }
        else
        {
            //echo 'есть директория<br />';
        }
        $filename = $main_path.'stats/runtime/'.$file.'/'.date('d.m.y_H.i.s').'.log';
        if(file_exists($path) OR is_writable($path))
        {
            file_put_contents($filename, $run_time, FILE_APPEND);
        }
        else
        {
            //echo 'путь не существует<br />';
        }
    }

}

register_shutdown_function('write_log', basename(__FILE__,'.php'));



Как-то так, особо не ломая код.
PM MAIL   Вверх
animegirl
Дата 19.3.2013, 22:49 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Незнайка на Марсе
**


Профиль
Группа: Участник
Сообщений: 326
Регистрация: 24.7.2011

Репутация: нет
Всего: нет



IgorIV
Замысел был красив, но я это уже проходила, чуток в другой форме, но всё равно, в $file запишется stats.inc


--------------------
Скажи миру - НЯ!
PM   Вверх
Fortop
Дата 19.3.2013, 23:02 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Завсегдатай
Сообщений: 2200
Регистрация: 13.11.2007
Где: Донецк

Репутация: 20
Всего: 42



Цитата(animegirl @  19.3.2013,  19:58 Найти цитируемый пост)
То есть перелопатить все 100+ файлов на добавление этой строчки

Зачем лопатить?

Я же тебе показал в  write_log() дописываешь код с debug_backtrace()
Естественно без echo, а так как тебе нужно - т.е. с прочтением в локальную переменную
и используешь ее вместо своего GLOBALS

И тебе больше не нужно будет прописывать 
Код

$GLOBALS['script_name'] = basename(__FILE__,'.php');



--------------------
Мир это Я.
Живее всех живых.
PM MAIL   Вверх
animegirl
Дата 19.3.2013, 23:06 (ссылка)    | (голосов:1) Загрузка ... Загрузка ... Быстрая цитата Цитата


Незнайка на Марсе
**


Профиль
Группа: Участник
Сообщений: 326
Регистрация: 24.7.2011

Репутация: нет
Всего: нет



Fortop
И результат будет тот же, что и у Игоря, и что у меня два дня назад, если вызывать debug_backtrace() либо __FILE__ внутри stat.inc то выдадут они в итоге stat.inc а не то скрипт, который надо отследить. Я даже предположу, что debug_backtrace() сам использует __FILE__  smile 


--------------------
Скажи миру - НЯ!
PM   Вверх
Fortop
Дата 19.3.2013, 23:43 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Завсегдатай
Сообщений: 2200
Регистрация: 13.11.2007
Где: Донецк

Репутация: 20
Всего: 42



Цитата(animegirl @  19.3.2013,  23:06 Найти цитируемый пост)
 если вызывать debug_backtrace() либо __FILE__ внутри stat.inc то выдадут они в итоге stat.inc а не то скрипт, который надо отследить.

Что за тупые предположения?


animegirl, debug_backtrace содержит имена всех методов которые были вызваны чтобы добраться до текущего участка кода
Там есть намного больше того, что может тебе подуматься.
Код

#0  include() called at [/usr/share/php/libzend-framework-php/Zend/View.php:108]
#1  Zend_View->_run(/home/www/gobookee.test/application/views/scripts/search/index.phtml) called at [/usr/share/php/libzend-framework-php/Zend/View/Abstract.php:888]
#2  Zend_View_Abstract->render(search/index.phtml) called at [/usr/share/php/libzend-framework-php/Zend/Controller/Action/Helper/ViewRenderer.php:900]
#3  Zend_Controller_Action_Helper_ViewRenderer->renderScript(search/index.phtml, ) called at [/usr/share/php/libzend-framework-php/Zend/Controller/Action/Helper/ViewRenderer.php:921]
#4  Zend_Controller_Action_Helper_ViewRenderer->render() called at [/usr/share/php/libzend-framework-php/Zend/Controller/Action/Helper/ViewRenderer.php:960]
#5  Zend_Controller_Action_Helper_ViewRenderer->postDispatch() called at [/usr/share/php/libzend-framework-php/Zend/Controller/Action/HelperBroker.php:277]
#6  Zend_Controller_Action_HelperBroker->notifyPostDispatch() called at [/usr/share/php/libzend-framework-php/Zend/Controller/Action.php:527]
#7  Zend_Controller_Action->dispatch(indexAction) called at [/usr/share/php/libzend-framework-php/Zend/Controller/Dispatcher/Standard.php:295]
#8  Zend_Controller_Dispatcher_Standard->dispatch(Zend_Controller_Request_Http Object ([] => Array ([0] => _GET,[1] => _POST),[] => /search.php?q=wireless+communication,[] => http://www.gobookee.test,[] => ,[] => /search.php,[] => Array ([q] => wireless communication,[controller] => search,[action] => index),[] => ,[] => Array (),[] => 1,[] => default,[] => module,[] => search,[] => controller,[] => index,[] => action), Zend_Controller_Response_Http Object ([] => Array (),[] => Array (),[] => Array (),[] => Array (),[] => 200,[] => ,[] => ,[headersSentThrowsException] => 1)) called at [/usr/share/php/libzend-framework-php/Zend/Controller/Front.php:954]
#9  Zend_Controller_Front->dispatch() called at [/usr/share/php/libzend-framework-php/Zend/Application/Bootstrap/Bootstrap.php:97]
#10 Zend_Application_Bootstrap_Bootstrap->run() called at [/usr/share/php/libzend-framework-php/Zend/Application.php:366]
#11 Zend_Application->run() called at [/home/www/gobookee.test/htdocs/index.php:65]




--------------------
Мир это Я.
Живее всех живых.
PM MAIL   Вверх
animegirl
Дата 20.3.2013, 00:06 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Незнайка на Марсе
**


Профиль
Группа: Участник
Сообщений: 326
Регистрация: 24.7.2011

Репутация: нет
Всего: нет



Fortop
Каюсь, не посмотрела, выдачу всего массива, попробовала из файла stat.inc 
Код

$bt = debug_backtrace();
echo $bt[0]['file'];

Выдаёт index.php как и надо, но если перенести эти строки в другой инклуд файл, то всё смещается, на позиции 0 встаёт stat.inc а index.php уходит на позицию 1.

И как теперь там искать нужное, если $GLOBALS['script_name'] используется в разных местах?


--------------------
Скажи миру - НЯ!
PM   Вверх
Fortop
Дата 20.3.2013, 01:41 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Завсегдатай
Сообщений: 2200
Регистрация: 13.11.2007
Где: Донецк

Репутация: 20
Всего: 42



Цитата(animegirl @  20.3.2013,  00:06 Найти цитируемый пост)
И как теперь там искать нужное, если $GLOBALS['script_name'] используется в разных местах? 

Как определяется его нужность?
Чем определяется логика его установки?

Первый скрипт, который собственно был запущен?
Массив работает по принципу стека.
0й элемент - ближайший вызов
Последний элемент - первый вызов

Через сколько бы include у вас мой код не вызвался.

Это сообщение отредактировал(а) Fortop - 20.3.2013, 01:43


--------------------
Мир это Я.
Живее всех живых.
PM MAIL   Вверх
animegirl
Дата 20.3.2013, 01:49 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Незнайка на Марсе
**


Профиль
Группа: Участник
Сообщений: 326
Регистрация: 24.7.2011

Репутация: нет
Всего: нет



Fortop

a.php
Код

<?
require_once 'b.php';
?>


b.php
Код

<?
require_once 'c.php';
?>


c.php
Код

<?
$bt = debug_backtrace();
print_r($bt);
?>

=
Цитата(Browser)

Array ( [0] => Array ( [file] => /var/www/way.way/public/tests/b.php [line] => 2 [function] => require_once ) [1] => Array ( [file] => /var/www/way.way/public/tests/a.php [line] => 2 [args] => Array ( [0] => /var/www/way.way/public/tests/b.php ) [function] => require_once ) )



--------------------
Скажи миру - НЯ!
PM   Вверх
Fortop
Дата 20.3.2013, 01:52 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Завсегдатай
Сообщений: 2200
Регистрация: 13.11.2007
Где: Донецк

Репутация: 20
Всего: 42



В чем вопрос?


--------------------
Мир это Я.
Живее всех живых.
PM MAIL   Вверх
animegirl
Дата 20.3.2013, 01:59 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Незнайка на Марсе
**


Профиль
Группа: Участник
Сообщений: 326
Регистрация: 24.7.2011

Репутация: нет
Всего: нет



Fortop, В том, что a.php (забыла упомянуть, что выдача с него), не в [0]


--------------------
Скажи миру - НЯ!
PM   Вверх
Fortop
Дата 20.3.2013, 02:08 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Завсегдатай
Сообщений: 2200
Регистрация: 13.11.2007
Где: Донецк

Репутация: 20
Всего: 42



Цитата(Fortop @  20.3.2013,  01:41 Найти цитируемый пост)
0й элемент - ближайший вызов
Последний элемент - первый вызов



Цитата(animegirl @  20.3.2013,  01:49 Найти цитируемый пост)

Array ( 
[0] => Array ( [file] => /var/www/way.way/public/tests/b.php [line] => 2 [function] => require_once ) 
[1] => Array ( [file] => /var/www/way.way/public/tests/a.php [line] => 2 [args] => Array ( [0] => /var/www/way.way/public/tests/b.php ) [function] => require_once ) )



Как это выглядит когда файлов больше 10ти я показывал выше http://forum.vingrad.ru/index.php?showtopi...t&p=2554174

Где был вызыван debug_backtrace()
Цитата(Fortop @  19.3.2013,  23:43 Найти цитируемый пост)
include() called at [/usr/share/php/libzend-framework-php/Zend/View.php:108]



А это собственно файл к которому мы обратились самым первым
Цитата(Fortop @  19.3.2013,  23:43 Найти цитируемый пост)
#11 Zend_Application->run() called at [/home/www/gobookee.test/htdocs/index.php:65]








--------------------
Мир это Я.
Живее всех живых.
PM MAIL   Вверх
IgorIV
Дата 20.3.2013, 20:20 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 642
Регистрация: 7.9.2009

Репутация: 2
Всего: 8



Цитата(animegirl @  19.3.2013,  22:49 Найти цитируемый пост)
Замысел был красив, но я это уже проходила, чуток в другой форме, но всё равно, в $file запишется stats.inc

 smile  smile 

Посмотри вывод


Код

a.php

$all_start_time = microtime(TRUE);

require_once 'animegirl.php';
require_once 'b.php';

register_shutdown_function('write_log', basename(__FILE__,'.php'));



$all_time = microtime(TRUE) - $all_start_time;

echo  '<br /> all_time  = '.$all_time.'<br />';



b.php

Код

require_once 'c.php';
register_shutdown_function('write_log', basename(__FILE__,'.php'));


c.php
Код

$bt = debug_backtrace();
print_r($bt);
echo '<hr />';

register_shutdown_function('write_log', basename(__FILE__,'.php'));



animegirl.php
Код


$start_time = microtime(TRUE);

function stop_timer()
{
    global $start_time;

    $run_time = microtime(TRUE) - $start_time;
    return $run_time;
}

function write_log($file)
{
    $main_path = substr(dirname(__FILE__),0,-3);
    if($file)
    {
        $run_time = stop_timer();
        $path = $main_path.'stats/runtime/'.$file;
        if(!file_exists($path) )
        {
            if (!mkdir($main_path.'stats/runtime/'.$file, 0755, true))
            {
                die('Не удалось создать директории...');
            }
        }
        else
        {
            echo 'есть директория<br />';
        }
        $filename = $main_path.'stats/runtime/'.$file.'/'.date('d.m.y_H.i.s').'.log';
        if(file_exists($path) OR is_writable($path))
        {
            file_put_contents($filename, $run_time, FILE_APPEND);
        }
        else
        {
            echo 'путь не существует<br />';
        }
    }
    echo '0_script_name = '.$file."<br />";
    echo '0_start_time = '.$start_time."<br />";
    echo '0_run_time = '.$run_time."<br />";
}

register_shutdown_function('write_log', basename(__FILE__,'.php'));



    echo '1_script_name = '.$file."<br />";
    echo '1_start_time = '.$start_time."<br />";
    echo '1_run_time = '.$run_time."<br />";


$dat = getrusage();

//var_dump ($dat);
echo '<br />getrusage = '.($dat["ru_utime.tv_sec"]*1e6+$dat["ru_utime.tv_usec"]), PHP_EOL; // время выполнения скрипта в миллисекундах
echo '<br />';
echo '<hr />';



Код

1_script_name = 
1_start_time = 1363799677.6567
1_run_time = 

getrusage = 822486 
Array ( [0] => Array ( [file] => /usr/local/www/apache22/data/screenn.local/tmp/b.php [line] => 7 [function] => require_once ) 
[1] => Array ( [file] => /usr/local/www/apache22/data/screenn.local/tmp/a.php [line] => 11 
[args] => Array ( [0] => /usr/local/www/apache22/data/screenn.local/tmp/b.php ) [function] => require_once ) ) 

 all_time = 0.0010559558868408
есть директория
0_script_name = animegirl
0_start_time = 
0_run_time = 0.00098991394042969
есть директория
0_script_name = c
0_start_time = 
0_run_time = 0.0016179084777832
есть директория
0_script_name = b
0_start_time = 
0_run_time = 0.0021259784698486
есть директория
0_script_name = a
0_start_time = 
0_run_time = 0.002613067626953


Это сообщение отредактировал(а) IgorIV - 20.3.2013, 20:21
PM MAIL   Вверх
IgorIV
Дата 20.3.2013, 20:58 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 642
Регистрация: 7.9.2009

Репутация: 2
Всего: 8



Но мне кажется я не понял задачу? Время выполнения какого скрипта интересует?
PM MAIL   Вверх
Страницы: (4) Все 1 2 [3] 4 
Ответ в темуСоздание новой темы Создание опроса
Правила форума "PHP"
Aliance
IZ@TOP
skyboy
SamDark
MoLeX

Новичкам:

  • PHP редакторы собираются и обсуждаются здесь
  • Электронные книги по PHP, документацию можно найти здесь
  • Интерпретатор PHP, полную документацию можно скачать на PHP.NET

Важно:

  • Не брезгуйте пользоваться тегами [code=php]КОД[/code] для повышения читабельности текста/кода.
  • Перед созданием новой темы воспользуйтесь поиском и загляните в FAQ
  • Действия модераторов можно обсудить здесь

Внимание:

  • Темы "ищу скрипт", "подскажите скрипт" и т.п. будут переноситься в форум "Web-технологии"
  • Темы с именами: "Срочно", "помогите", "не знаю как делать" будут УДАЛЯТЬСЯ

Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, IZ@TOP, skyboy, SamDark, MoLeX, awers.

 
1 Пользователей читают эту тему (1 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | PHP: Общие вопросы | Следующая тема »


 




[ Время генерации скрипта: 0.1084 ]   [ Использовано запросов: 21 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.