Программисты, которые используют компилируемые языки высокого уровня (ObjectPascal, C/C++ и другие) при создании и распространении программы, имеют возможность выбора — распространять ПО в виде скомпилированных двоичных файлов или открыть исходные тексты программы для всех желающих. Но вот для тех, кто создает серверные программы, используя один из скриптовых языков (Perl, Phyton, PHP) или Java/C#, оказываются изначально ограниченными в возможностях распространения своих продуктов. Ведь, поскольку используются скриптовые языки, это значит, что исходный код программы (скрипта) открыт и превращается в исполняемый код средой исполнения (неважно чем — интерпретатором, JIT-компилятором Java, ядром PHP или .NET Runtime) непосредственно в момент запроса клиентом страницы. Конечно, тут есть много допущений, поскольку современные среды исполнения обычно применяют для увеличения быстродействия ряд методов — к примеру, хранение заранее откомпилированного кода или байт-кода и так далее. Но суть всегда одна — программа (скрипт) распространяется в виде набора открытых исходных файлов.
Такое положение существенно ограничивало возможности разработчиков получать доход от продажи своих программ. Если в мире десктоп-программ есть возможность привязки ПО к компьютеру, ограничение времени работу программы (trialware, shareware) и другие методы, то для скриптов это неприемлемо. Ведь если исходный код доступен заказчику, то он может его изменять в любое время и как ему вздумается. Так что для веб-разработок была возможна только одна модель продажи — за фиксированную сумму один раз (заказали скрипт — вы его написали и продали за заранее оговоренную сумму).
На выбор разработчику предлагается любой из четырех способов лицензированияКонечно, такое ограничение было довольно неудобным и являло собой существенный сдерживающий фактор. И вот компания Zend Techonogy, разработчик ядра Zend (на основе которого работают РНР 4 и 5), оригинально решила эту проблему, выпустив пакет Zend SafeGuard Suite (сейчас доступна версия 3.5). Эта программа позволяет регулировать доступ к вашим скриптам на РНР согласно лицензиям — специальным файлам, в которых хранятся данные о правах доступа. Теперь имеется возможность использовать следующие модели распространения ваших скриптов:
Что интересно, все эти методы можно комбинировать между собой в любом сочетании!
Пакет Zend SafeGuard Suite включает в себя программы:
После кодирования PHP-скрипт превращается в двоичный файлПодход компании Zend простой — скрипты из открытого вида (простой текст) утилитой Zend Encoder превращаются в закрытые двоичные файлы (которые уже нельзя просмотреть обычным текстовым редактором), а ядро PHP с модулем Optimizer выполняет обратную операцию раскодирования (предварительно «сверившись» с лицензией — допустимо ли исполнение скрипта) и исполняет оптимизированный код. PHP Optimizer — вообще очень интересный продукт: если он работает с простыми скриптами (не кодированными), то служит для оптимизации работы ядра, применяя различные алгоритмы кеширования и другие методы (подробнее можно прочитать тут). Подход такой — модуль Optimizer (а это, в принципе, одна библиотека) входит в каждый пакет от самой Zend (PHPWinEnabler, Zend Accelerator, Zend Performance Suite) а также доступен сам по себе совершенно бесплатно. А если учитывать, что SafeGuard Suite — довольно дорогое решение, то, если вы его покупаете, очень желательно купить еще и один из пакетов для оптимизации — ведь быстродействия никогда не бывает слишком много, а преимущества от использования коммерческих пакетов оптимизации, как говорится, налицо.
Работа с пакетом Zend SafeGuard Suite очень проста. Сначала надо подготовить файлы для кодирования. Все операции производятся через удобный интуитивных графический интерфейс, так что сложностей возникнуть не должно. Выбираете директорию с РНР-файлами, указываете конечную директорию и настройки преобразования. К настройкам относятся задание способа включения PHP-кода (теги <? или ASP-стиль < %), настройка уровня оптимизации (он зависит от того, что именно ваши скрипты делают,; разработчики предупреждают, что не все библиотеки и функции будут корректно работать после кодирования, и для предотвращения проблем надо проводить тесты в каждом конкретном случае) и срок работы (действия лицензии) в виде конечной даты или количества дней. Все, после кодирования файлы окажутся уже в виде закрытого двоичного кода, а не простого текстового. Их уже нельзя редактировать, поэтому кодировать надо уже полностью отлаженную и работающую версию скриптов или, как выход, кодировать и лицензировать только ядро, часть функций, которые не будут изменяться при частичной переработке программы.
А теперь надо сгенерировать лицензию, перейдя на вторую вкладку — «Zend license generator». Лицензия — это небольшой файл текстового содержания, который описывает условия распространения скрипта, причем использовать лицензию от одного продукта для работы с другим не получится. Лицензия выглядит так:
Product-Name = test
Registered-To = raiden
Hardware-Locked = No
Expires = 02-Aug-2004
Produced-By = Zend Encoder trial
Verification-Code= 0Ga4MdoXNDCDT/AKrpiT5NF2kVvcAhUAhsXW6wF8Qeg4TwOwDMN94O0aN8Q=
Лицензия — это обычный текстовый файлПервая строка — это название продукта, который вы защищаете, далее имя пользователя, Hardware-Locked указывает на то, используется ли привязка к аппаратному обеспечению сервера (для генерации host-id в комплекте есть специальная утилита). Expires указывает дату, до которой скрипт работоспособен (лицензия верна). И в последней строке указывается код верификации — специальным образом сгенерированная строка, которая и служит для однозначного сопоставления "скрипт — лицензия" и выявления случаев ручной корректировки файла лицензий. Лицензии хранятся в файле с расширением ".zl" и могут располагаться в любом месте на сервере. Для подключения лицензии к серверу необходимо редактировать опции в файле конфигурации PHP — php.ini. Пример:
[zend]
; тут опции установленных компонентов Zend
zend_optimizer.license_path="D:\test.zl"
Опция "zend_optimizer.license_path" указывает на файл лицензий, который будет применяться при работе с закодированными скриптами. Если вы держите на одном сервере разные сайты, и каждому из них надо устанавливать свои лицензии, то проще создать единую общую директорию для хранения лицензий и записывать пути через разделитель (в Windows — ";", в Unix — ": "). К примеру, когда есть две лицензии, то задать их можно таким способом:
zend_optimizer.license_path="D:\test.zl;c\mylicense\license2.zl"
Сервер сам опознает, какую лицензию к какому скрипту применять.
В лицензиях можно задавать и собственные поля — к примеру, название компании-разработчика. Также есть возможность настроить вывод информации о том, что лицензия истекла, и куда и к кому обратиться за ее продлением. Этот блок информации задается при генерации лицензии и выводится в окно браузера при попытке доступа к скрипту, срок лицензии которого истек.
phpBB нормально работает в закодированном видеДля проверки работы комплекса автор использовал пакет Zend WinEnabler 1.1, который включает модуль Optimizer и триал-версию Zend SafeGuard Suite 3.5.0а, в качестве тестового скрипта — популярный форум phpBB. После кодирования форум работает абсолютно идентично, скорость работы в принципе не изменилась. Хотя разработчики и предупреждают, что не всякий код совместим, но довольно большой проект рhpBB, интенсивно работающий с базой данных, работал без сбоев.
Описанная информация — лишь базовая, сам принцип работы пакета довольно интересен, а возможность лицензирования РНР-скриптов выглядит очень и очень заманчиво, ведь теперь гораздо легче распространять коммерческие программы. А хостинговые компании могут предоставить новые сервисы для клиентов. Вместе с новыми возможностями языка, появившиеся в РНР 5, это открывает дорогу для РНР в мир серьезных корпоративных и бизнес-приложений.
Ссылки по теме
Статья получена: hostinfo.ru