Быстро парсинг PHP в C#

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

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

Таким образом, это всегда ведет себя как недавно составленная таблица и нет никакой потребности назвать DBCC CHECKIDENT. Первое значение идентификационных данных будет тем, определенным в определении таблицы, и это будет то же, неважно, при вставке данных впервые или для Энного

7
задан cletus 19 September 2009 в 18:53
поделиться

2 ответа

Почему это делается на C #? В PHP это сделать тривиально. Используйте функцию token_get_all () , и она разбивает файл PHP на поток лексем, который вы можете использовать для окончательного определения списка классов и методов, написав конечный автомат.

Что бы вы ни делали. не пытайтесь делать это с помощью регулярных выражений. Это будет невероятно утомительно и подвержено ошибкам.

Изменить: Для этого есть три основных возможности:

  1. Сделать это на PHP. Это будет самый быстрый (для разработки) и самый простой вариант:
  2. Запустите PHP-скрипт из командной строки, чтобы либо сделать это, либо сгенерировать серию токенов, которые могут быть интерпретированы программой C #. Это следующий самый простой вариант:
  3. Используйте Phalanger , перенос PHP на платформу .Net. Это могло бы быть более приемлемым для руководства, поскольку это все еще код .Net; или
  4. Используйте Quercus , порт PHP на виртуальную машину Java.

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

Чтобы беспокоиться о предполагаемых «недостатках безопасности» PHP, возникает несколько проблем:

  1. Любая структура или стек технологий могут иметь недостатки безопасности. Дело в том, что ваш сисадмин только разрешает. Фактически, Net, протестуя против Java, указывает на иррациональную предвзятость. Я говорю это как давний разработчик Java: Java, .Net и PHP могут иметь недостатки безопасности;
  2. Вы можете запускать PHP из командной строки, поэтому он не обслуживает никакие HTTP-запросы, что снижает проблему безопасности практически до нуля;
  3. Если вас беспокоят внутренние угрозы безопасности (от кого-то, имеющего доступ к ящику), просто ограничьте исполняемый файл PHP CLI, чтобы он мог выполняться только группой, в которой находится только ваша программа.
18
ответ дан 6 December 2019 в 10:01
поделиться

Возможно, вы сможете использовать ctags для своих целей. Я не уверен, как бы вы интегрировали его с C #, поскольку ctags написан на C.

В качестве альтернативы, если вы знаете свои парсеры, вы можете взглянуть на файлы грамматики в исходном коде PHP. В частности, zend_ini_parser.y и zend_language_parser.y .

Наконец, хотя это и не лучшее решение, вы могли , вероятно, уйти с горсткой домашнего приготовления регулярные выражения. Грамматика PHP довольно строгая в отношении классов и функций. Вам просто нужно немного отслеживать состояние, чтобы знать, к какому классу принадлежит функция.

1
ответ дан 6 December 2019 в 10:01
поделиться
Другие вопросы по тегам:

Похожие вопросы: