Получить номер строки php

Как в PHP узнать место (файл и номер строки), в котором находится код функции?

Нужно выяснить, в каком файле находится код, который будет выполнен при вызове этой команды. Оно находится где-то не в текущем файле, а неизвестно где.

Отладчиком прыгнуть нельзя, можно только добавить команду вывода отладочных данных в консоль, или как-угодно еще изменить код.

Когда php читает описание объекта,то он превращает текстовый код во внутренний формат и размещает в памяти — у этого кода должны быть ссылки на те места в файле,где описаны функции.
Правда,не факт,что их можно достать кодом php,но написать к php отдельный модуль,который это делает,вполне можно,если уже не написали.

(4) этого недостаточно, метод может быть унаследован.
Что-то типа
$refClass = new \ReflectionClass($list);
$refMethod = $refClass->getMethod(‘printHeader’);
echo $refMethod->getFileName();

(4) Это даст название файла с классом, я этот метод уже и сам нашел. А мне нужно найти место, где именно код функции.

(11) вот это даст номер строки https://www.php.net/manual/en/reflectionfunctionabstract.getstartline.php
наверно.
только читай там внимательно про рефлекшн в php, там есть особенности

(12) Вот потому я и создал эту тему. Если бы грепом можно было найти, то вопроса бы не было.
Похоже, что там название функции синтезируется как-то так: «print» . «Header»
И такую строку невозможно найти ни грепом, ни пхп штормом.

Источник

SplFileObject::key

Замечание:

Этот номер может отличаться от реального положения файлового указателя, когда читаются строки фиксированной длины с заданием этой длины методом SplFileObject::setMaxLineLen() .

Список параметров

У этой функции нет параметров.

Возвращаемые значения

Возвращает номер текущей строки файла.

Примеры

Пример #1 Пример использования SplFileObject::key()

$file = new SplFileObject ( «lipsum.txt» );
foreach ( $file as $line ) echo $file -> key () . «. » . $line ;
>
?>

Результатом выполнения данного примера будет что-то подобное:

0. Lorem ipsum dolor sit amet, consectetur adipiscing elit. 1. Duis nec sapien felis, ac sodales nisl. 2. Lorem ipsum dolor sit amet, consectetur adipiscing elit.

Пример #2 Пример использования SplFileObject::key() при задании длины строки методом SplFileObject::setMaxLineLen()

Читайте также:  Php image upload path

$file = new SplFileObject ( «lipsum.txt» );
$file -> setMaxLineLen ( 20 );
foreach ( $file as $line ) echo $file -> key () . «. » . $line . «\n» ;
>
?>

Результатом выполнения данного примера будет что-то подобное:

0. Lorem ipsum dolor s 1. it amet, consectetu 2. r adipiscing elit. 3. 4. Duis nec sapien fel 5. is, ac sodales nisl 6. . 7. Lorem ipsum dolor s 8. it amet, consectetu 9. r adipiscing elit.

Смотрите также

  • SplFileObject::current() — Получить текущую строки файла
  • SplFileObject::seek() — Перевод файлового указателя на заданную строку
  • SplFileObject::next() — Читать следующую строку
  • SplFileObject::rewind() — Перемотка файлового указателя в начало файла
  • SplFileObject::valid() — Проверяет, достигнут ли конец файла (EOF)

Источник

Получить строку кода и файл, который выполняет текущую функцию в PHP?

Я хочу изменить функцию журнала так, чтобы она создавала следующее:

test (файл: File1.php, номер строки: 3)

Итак, любой способ получить имя файла и номер строки кода, выполняющего текущую функцию в PHP?

EDIT для комментариев использования комментариев: когда я использую backlog в моем объектно-ориентированном способе программирования, у меня есть следующая ситуация.

Этот пример будет возвращен как файл «Index.php», а как строка номер 4, здесь начинается класс. Тем не менее, предполагается вернуть файл TestClass.class.php и номер строки 6. Есть идеи, как это исправить?

Solutions Collecting From Web of «Получить строку кода и файл, который выполняет текущую функцию в PHP?»

Вы можете использовать debug_backtrace ().

Таким образом, в вашей функции журнала вы сможете получить имя файла и номер строки, с которого была вызвана функция журнала.

Я использую этот подход в своих классах ведения журнала, и он значительно сократил объем кода, необходимый для получения значимых данных журнала. Другим преимуществом будет читаемость. Магические константы, как правило, становятся довольно уродливыми, когда их смешивают со струнами.

debug_backtrace () может использоваться для трассировки в стек вызовов. Это может быть медленным, поэтому будьте осторожны с ним, если вы делаете много записей.

Если вы используете PHP 5.3, вы можете воспользоваться поздней статической привязкой и иметь метод базового класса log() , и ваши дочерние классы могли бы вызвать его, но при этом сохранять статические ссылки на __FILE__ и __LINE__ .

Читайте также:  Sign Up

Окончательный вариант будет просто передавать __FILE__ и __LINE__ в качестве параметров при вызове функции log() .

Это старый вопрос, но, видя, как мое решение не здесь, я предоставлю его потомству

 try< throw new Exception(); >catch ( Exception $e )< $trace = $e->getTrace(); > $length = 0; foreach ($trace as $t) < if( $t['file'] != __FILE__ )< break; >++$length; > return array_slice( $trace, ($length - count( $trace ) )); 

Вы можете бросить / поймать, чтобы получить чистую трассировку стека, тогда вам нужно искать первую строку, содержащую этот файл (обычно это то, откуда он вызывается), вы также можете использовать индекс трассы, если вы это знаете, или функция.

Трассировка стека исключений почти такая же, как и debug_backtrace(true) .

  • Диаграммы Google – анимация графического графика не работает
  • как передать URL-адрес переменной на следующие страницы в разбивке на страницы php
  • Как я могу ввести доктрину в службу Symfony2
  • Почему curl_multi_exec () не выполняет мои скрипты вообще?
  • PHP money_format
  • Как увеличить числовую часть строки на единицу?
  • является ли определение типа mime лучшим способом для обнаружения своего рода файла?
  • Как безопасно записывать данные JSON в файл с помощью PHP
  • PHP и одновременный доступ к файлам
  • Плагин PHPExcel не импортирует файл в cakephp
  • Отправить письмо по электронной почте в Codeignign с помощью Gmail
  • Установите PEAR с Wamp 2.1
  • PHP getimagesize с переменной
  • Проблема Xdebug и Netbeans
  • PHP: неизменные поля публичных пользователей

Источник

Узнать номер строки основного скрипта

У меня есть скрипт index.php
Есть скрипт mysql.php, в котором описан класс для работы с MySQL.
В index.php я подключаю mysql.php:
require_once «mysql.php»
и могу выполнять запросы. Но если запрос не удался, то вывожу сообщение об ошибке.
Подскажите, как мне в этом сообщении указать номер строки основного скрипта (index.php), где запрос не удался?
Например, содержимое index.php:

 $DB = new MySQLDB("127.0.0.1","login","pas","base"); $DB->query("SELECT * FROM tab1;"); // строка №3 ?>
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15
class MySQLDB { . . public function query($s) { if (!($this->resid = @mysql_query($s,$this->sqlid))) // допустим, это строка №44 { echo "Не удалось отправить запрос MySQL на строке ".__LINE__; exit; } } . . }

При этом он укажет, что ошибка на строке 46, т.к. __LINE__ вернёт номер строки в текущем файле. А как мне заставить его указать 3 строку (файла index.php, из которого идёт обращение к функции) ?

Как узнать номер следующей строки в DataGridView и вывести номер в textbox
Допустим у нас есть таблица и в ней заполнено две строки, тогда в текстбоксе мы должны получить.

Как узнать номер строки без проверки каждой строки
Можно ли как-то узнать номер строки в которой содержится определённый символ без for-сирования? То.

Функцию узнающая текущий номер строки скрипта.
Кто предложит функцию узнающую текущий номер строки скрипта. У меня есть 1000 вызовов одной и.

Узнать номер строки
Здравствуйте, помогите ,пожалуйста, узнать номер строки, которая включает в себя текст. скачиваю.

хмм.. думаю так неполучится, только если так:
$DB->query(«SELECT * FROM tab1;», __LINE__); // строка №3
неудобно правда

зы: одновременно одно и то же накатали

а вскидку приходит в голову способ, передавать в функцию query не только запрос но и строку из которой он был вызван, и уже внутри функции брать её +) (собственно второй аргумент добавить и в него __LINE__ вставить )

З.Ы. вероятно есть более элегантный и быстродейственный(мы теряем быстродействие т.к. каждый раз при запросе будем узнавать строчку, вместо того, чтобы узнавтаь её только при ошибке) способ, но мне на вскидку только такой вариант в голову пришёл +)))

Добавлено через 46 секунд
ыыы=)) собсвенно то же самое что и GаlаX-у мне в голову пришло +))

Жаль. А то бывает много запросов. и во время ошибки приходится долго искать, который запрос неправильный. Лишний параметр тоже не хотелось бы передавать. ладно, там видно будет. Можно будет его сделать не обязательным и передавать его только в сложных местах. Спасибо за помощь.

По моему правильнее будет так

 $DB = new MySQLDB("127.0.0.1","login","pas","base"); if(!$DB->query("SELECT * FROM tab1;"){ %сообщение об ошибке% exit;} ?>
1 2 3 4 5 6 7 8 9 10 11 12 13 14
class MySQLDB { . . public function query($s) { if (!($this->resid = @mysql_query($s,$this->sqlid))) // допустим, это строка №44 { return false; } } . . }

А еще можно глобальный массив ошибок создать и заносить в него случившиеся ошибки, тогда ты сможешь отследить, историю ошибок

Источник

Оцените статью