Статьи

Конвертировать ASP в PHP с ASPA

Если вы немного разбирались в PHP, вы, вероятно, уже сталкивались с asp2php — приложением, которое пытается автоматически преобразовать код ASP 3.0 (в основном VBScript) в PHP. Я упоминал и шутил об этом раньше, но недавно играл с чем-то серьезным.

Хотя asp2php — смелый проект, и я не хочу его выбивать, из прошлых экспериментов он оказался неубедительным. Да, он дает нечто похожее на PHP, но реальная проблема заключается в том, что все еще остается TODO — в основном это 80/20. И хотя этого следует ожидать с любым подобным инструментом, проблема в том, что нет способа контролировать то, что генерируется, кроме как путем изменения источника Си.

Некоторое время назад, ища инструменты, способные анализировать PHP 1) , натолкнулся на ASPA , разработанный Анакреоном Мейди: «ASPA пытается автоматизировать процесс перевода страниц asp в php. Поддерживаемые языки: JScript и VbScript ».

ASPA написан на Java и построен на основе ANTLR , зрелой среды с открытым исходным кодом. Что делает его особенным, IMO, так это то, что довольно легко управлять выходным PHP с помощью XML-файлов «отображения», которые загружаются во время выполнения (во время преобразования). Вы найдете это описание немного здесь (PDF).

После игры с ASPA, вот несколько заметок / мыслей.

— Ожидайте, что вам придется потратить время на установку — у вас есть обычная проблема с Java, с которой приходится сталкиваться, включая ant — мне нужно было перестроить ASPA. Здесь я только собираюсь дать подсказки, основанные на «это работало для меня» на WinXP.

— Я использовал версию 1.2 ASPA. В нем отсутствуют различные зависимости, а именно antlr, log4j, dom4j и commons-collection, которые описывает Anakreon. Быстрый способ получить их все — это загрузить версию 1.1 ASPA, в которой они есть, в подкаталоге ./lib./lib Чего не хватает, так это Jaxen .jar./libздесь

— Если вы посмотрите в файл ./etc/log4j.propertieslog4j.appender.FILE.File=logs/log.txt Когда у вас есть ASPA, собранный с помощью ant, aspa-1.2/build/classes/gr/omadak/leviathan/asp/log4j.properties

— Со встроенным ASPA файлы перевода XML можно найти в aspa-1.2/build/classes/gr/omadak/leviathan/asp/objects Я полагаю (не проверено), что вы можете создавать новые XML-файлы с именами файлов, соответствующими объектам ASP / ActiveX, которые вы хотите преобразовать в PHP, как описано здесь (PDF). Хотя то, что ASPA делает здесь, является отличным началом, мне кажется, что для того, чтобы действительно расширить возможности пользователей, необходимо что-то вроде Rhino или Jython в сочетании с доступом к анализу информации о времени из ASPA.

— Чтобы проверить это, я выбрал первое приложение ASP Blogging, опубликованное под лицензией GPL, которое я смог найти через Google — Ublog . Для сравнения я выложил здесь результаты вместе с файлом журнала ASPA. Не изменили это или сделали существенную настройку вывода. В основном это на уровне 80%, я думаю. Некоторые файлы не удалось преобразовать, как объяснено в журнале. Другие вещи, такие как вызовы, require.asp.php Между тем, некоторые мысли должны вдаваться в XSS- последствия всех этих заявлений о print И необходимо подумать о том, были ли API переведены самым умным способом, например, БД вызывает, какой ASPA примитивен для использования с ADODB Джона Лима, но, по-видимому, примерно на 90% там по API. Но работа с ослом была проделана — последние 20% выполнимы, и, если максимально увеличить количество файлов перевода XML, можно снизить их до 5% или ниже.

В целом ООРА, похоже, находится на стадии «все работает», но теперь нужно стремиться к тому, чтобы «это было доступно». В частности, возможность легко модифицировать выходной PHP-код помечает его как значительный, и здесь потенциально есть «серьезный инструмент» для масс, если можно собрать простой в установке бинарный дистрибутив и, что еще лучше, использовать графический интерфейс. застрял на вершине, чтобы помочь управлять преобразованиями (например, файлы перевода XML являются «глобальными» для ASPA, но их использование, вероятно, будет зависеть от конкретного приложения). В его нынешнем виде, я думаю, это очень поможет разработчикам ASP, заинтересованным в наличии PHP-версий своего кода. Также есть возможность внедрить некую PHP-инфраструктуру в качестве целевого API-интерфейса, который предназначен для поддержки распространенных ASP-идиом. Возможно, эти толпы могут произойти один день в конце концов;)

Примечание: Что привело меня к ASPA, так это поиск инструментов, способных анализировать PHP-скрипты, для выполнения чего-то вроде PHP-линта. Интересно, что вряд ли есть кто-то, кто действительно «понимает» PHP, и когда они это делают, это, кажется, приводит к тому, что люди хотят сохранить результаты с закрытым исходным кодом . Помимо вещей, написанных вручную , таких как phpxref , есть два исключения: сцинтилла (к которым вы можете подключиться в Python через SilverCity или wx.STC, но токены очень общие) и spident (который был больше Java, чем я хотел представить).