Warning: Cannot use a scalar value as an array in /home/admin/public_html/forum/include/fm.class.php on line 757

Warning: Invalid argument supplied for foreach() in /home/admin/public_html/forum/include/fm.class.php on line 770

Warning: Invalid argument supplied for foreach() in /home/admin/public_html/forum/topic.php on line 737
Форумы портала PHP.SU :: Определить номер текущей строки

 PHP.SU

Программирование на PHP, MySQL и другие веб-технологии
PHP.SU Портал     На главную страницу форума Главная     Помощь Помощь     Поиск Поиск     Поиск Яндекс Поиск Яндекс     Вакансии  Пользователи Пользователи


 Страниц (1): [1]   

> Без описания
Invert
Отправлено: 01 Марта, 2014 - 13:38:50
Post Id



Частый гость


Покинул форум
Сообщений всего: 223
Дата рег-ции: Нояб. 2010  


Помог: 5 раз(а)




Возможно ли узнать на какой строке в данный момент находится выполнение скрипта?
__LINE__ не подходит.

Играюсь с тиками и хотелось бы определять, какая именно строка в данный момент выполняется.


(Добавление)
Нет, не так.

Имеется скрипт:
PHP:
скопировать код в буфер обмена
  1.  
  2. function processLine () {
  3.     $ignore = array ( '_GET', '_POST', '_COOKIE', '_FILES', '_ENV', '_REQUEST', '_SERVER', 'GLOBALS' );
  4.     $result = array ();
  5.     foreach ( $GLOBALS as $itemKey => $itemValue ) {
  6.         if ( !in_array( $itemKey, $ignore ) ) {
  7.             $result[ $itemKey ] = $itemValue;
  8.         }
  9.     }
  10.     var_export( $result );
  11. }
  12.  
  13. register_tick_function ( 'processLine' );
  14. declare( ticks=1 );
  15.  
  16. $array = array ();
  17. for ( $i = 0; $i < 10; $i++ ) {
  18.     $array[ $i ] = $i;
  19. }
  20.  


Нужно как-то узнать, с какой конкретной строки была вызвана processLine

(Отредактировано автором: 01 Марта, 2014 - 13:45:19)

 
 Top
Мелкий Супермодератор
Отправлено: 01 Марта, 2014 - 13:50:41
Post Id



Активный участник


Покинул форум
Сообщений всего: 11926
Дата рег-ции: Июль 2009  
Откуда: Россия, Санкт-Петербург


Помог: 618 раз(а)






-----
PostgreSQL DBA
 
 Top
Invert
Отправлено: 01 Марта, 2014 - 14:23:21
Post Id



Частый гость


Покинул форум
Сообщений всего: 223
Дата рег-ции: Нояб. 2010  


Помог: 5 раз(а)




Точно, спасибо!

CODE (htmlphp):
скопировать код в буфер обмена
  1.  
  2.   0 =>
  3.   array (
  4.     'file' => 'W:\\domains\\tick.local\\www\\index.php',
  5.     'line' => 23,
  6.     'function' => 'processLine',
  7.     'args' =>
  8.     array (
  9.     ),
  10.   ),
  11. )

(Добавление)
Вполне юзабельная штука:
PHP:
скопировать код в буфер обмена
  1. $debug = new Debug();
  2.  
  3. register_tick_function ( array( $debug, 'tickCallback' ) );
  4. declare( ticks = 1 );
  5.  
  6. $array = array ();
  7. for ( $i = 0; $i < 10; $i++ ) {
  8.     $array[ $i ] = $i;
  9. }
  10.  
  11. echo ( 'Count: ' . count( $array ) . '<br>' );
  12.  
  13. unregister_tick_function ( array( $debug, 'tickCallback' ) );
  14. declare( ticks = 0 );
  15.  
  16.  
  17.  
  18.  
  19.  
  20.  
  21. class Debug {
  22.  
  23.     public function tickCallback () {
  24.         $backtrace = debug_backtrace();
  25.         $lineNumber = $this->getLineNumber( $backtrace );
  26.         $lineCode = $this->getLineCode( $backtrace );
  27.         $variables = $this->getVariables();
  28.         echo( "{$lineNumber} : {$lineCode} <br>" . PHP_EOL );
  29.     }
  30.  
  31.     private function getVariables () {
  32.         $ignore = array ( '_GET', '_POST', '_COOKIE', '_FILES', '_ENV', '_REQUEST', '_SERVER', 'GLOBALS' );
  33.         $result = array ();
  34.         foreach ( $GLOBALS as $itemKey => $itemValue ) {
  35.             if ( !in_array( $itemKey, $ignore ) ) {
  36.                 $result[ $itemKey ] = $itemValue;
  37.             }
  38.         }
  39.         return $result;
  40.     }
  41.  
  42.     private function getLineNumber ( $backtrace ) {
  43.         $lastBacktrace = array_shift( $backtrace );
  44.         if ( isset( $lastBacktrace[ 'line' ] ) ) {
  45.             return $lastBacktrace[ 'line' ];
  46.         }
  47.         return 0;
  48.     }
  49.  
  50.     private function getLineCode ( $backtrace ) {
  51.         $lineCode = NULL;
  52.         $lastBacktrace = array_shift( $backtrace );
  53.         if ( isset( $lastBacktrace[ 'line' ] ) && isset( $lastBacktrace[ 'file' ] ) ) {
  54.             $fileHandler = fopen( $lastBacktrace[ 'file' ], 'r' );
  55.             if ( $fileHandler ) {
  56.                 $currentLineNumber = 0;
  57.                 while ( ( $fileLine = fgets( $fileHandler, 4096 ) ) !== FALSE ) {
  58.                     $currentLineNumber++;
  59.                     if ( $currentLineNumber == $lastBacktrace[ 'line' ] ) {
  60.                         $lineCode = $fileLine;
  61.                         break;
  62.                     }
  63.                 }
  64.                 fclose( $fileHandler );
  65.             }
  66.         }
  67.         return trim( $lineCode );
  68.     }
  69.  
  70. }
  71.  


И результат:
CODE (htmlphp):
скопировать код в буфер обмена
  1. 6 : declare( ticks = 1 );
  2. 6 : declare( ticks = 1 );
  3. 8 : $array = array ();
  4. 10 : $array[ $i ] = $i;
  5. 11 : }
  6. 10 : $array[ $i ] = $i;
  7. 11 : }
  8. 10 : $array[ $i ] = $i;
  9. 11 : }
  10. 10 : $array[ $i ] = $i;
  11. 11 : }
  12. 10 : $array[ $i ] = $i;
  13. 11 : }
  14. 10 : $array[ $i ] = $i;
  15. 11 : }
  16. 10 : $array[ $i ] = $i;
  17. 11 : }
  18. 10 : $array[ $i ] = $i;
  19. 11 : }
  20. 10 : $array[ $i ] = $i;
  21. 11 : }
  22. 10 : $array[ $i ] = $i;
  23. 11 : }
  24. 11 : }
  25. Count: 10
  26. 13 : echo ( 'Count: ' . count( $array ) . '
  27. ' );
 
 Top
Страниц (1): [1]
Сейчас эту тему просматривают: 0 (гостей: 0, зарегистрированных: 0)
« Вопросы новичков »


Все гости форума могут просматривать этот раздел.
Только зарегистрированные пользователи могут создавать новые темы в этом разделе.
Только зарегистрированные пользователи могут отвечать на сообщения в этом разделе.
 



Powered by PHP  Powered By MySQL  Powered by Nginx  Valid CSS  RSS

 
Powered by ExBB FM 1.0 RC1. InvisionExBB