[коммерческое распространение рнр-скриптов]материал подготовил: Александр Лозовюк 20.08.2004
Программисты, которые используют компилируемые языки высокого уровня (ObjectPascal, C/C++ и другие) при создании и распространении программы имеют возможность выбора — распространять ПО в виде скомпилированных двоичных файлов или открыть исходные тексты программы для всех желающих. Но вот для тех, кто создает серверные программы, используя один из скриптовых языков (Perl, Phyton, PHP) или Java/C# оказываются изначально ограниченны в возможностях распространения своих программ. Ведь поскольку используются скриптовые языки, то это значит, что исходный код программы (скрипта) открыт и превращается в исполняемый код средой исполнения (тут неважно — интерпретатором, JIT-компилятором Java, ядром PHP или .NET Runtime) непосредственно в момент запроса клиентом страницы. Конечно, тут есть много допущений, поскольку современные среды исполнения обычно применяют для увеличения быстродействия ряд методов, к примеру хранение заранее откомпилированного кода или байт-кода и т.д. Но суть всегда одна — программа (скрипт) распространяется в виде набора открытых исходных файлов.
Такое положение существенно ограничивало возможности разработчиков получать доход от продажи своих программ. Если в мире desktop-программ есть возможность привязки ПО к компьютеру, ограничение времени работу программы (trialware, shareware) и другие методы, то для скриптов это неприемлемо. Ведь если исходный код доступен заказчику, то он может его изменять в любое время и как ему вздумается. Так что для веб-разработок была возможна только одна модель продажи — за фиксированную сумму один раз (заказали скрипт — вы его написали и продали за заранее оговоренную сумму).
Конечно, такое ограничение было довольно неудобным и существенным сдерживающим фактором. И вот, компания Zend Techonogy, разработчик ядра Zend (на основе которого работает РНР 4 и 5) оригинально решила эту проблему, выпустив пакет Zend SafeGuard Suite (сейчас доступна версия 3.5). Эта программа позволяет регулировать доступ к вашим скриптам на РНР согласно лицензий — специальным файлам, в которых хранятся данные о правах доступа. Теперь имеется возможность использовать следующие модели распространения ваших скриптов:
ограничение по времени (работа до указанного срока или фиксированное количество суток);
лицензирование на основе одновременной работы некоторого количества пользователей (это больше подойдет для специальных сервисов и внутрикорпоративных порталов);
привязка к оборудованию сервера (генерируется специальный host-id, который уникален для каждого сервера и скрипт будет работать только на одном сервере);
привязка к IP-адресу сервера (или диапазону адресов).
Что интересно, все эти методы можно комбинировать между собой в любом сочетании!
Пакет Zend SafeGuard Suite включает в себя программы:
Zend Encoder — программный комплекс для кодирования скриптов;
Zend License Manager — программа для генерации лицензий.
Zend PHP Optimizer — серверный модуль, подключаемый к ядру РНР, который и работает с закодированными скриптами и лицензиями, а кроме того, отвечает за оптимизацию и повышения производительности сервера.
zendid.exe — утилита для генерации кода для привязки лицензии к определенной машине (аппаратному обеспечению сервера);
на выбор разработчику любой из 4-х способов лицензирования
Подход компании Zend простой — скрипты из открытого вида (простой текст) утилитой Zend Encoder превращаются в закрытые двоичные файлы (которые уже нельзя просмотреть обычным текстовым редактором), а ядро PHP с модулем Optimizer выполняет обратную операцию раскодирования (предварительно «сверившись» с лицензией, допустимо ли исполнение скрипта) и исполняет оптимизированный код. PHP O
ptimizer вообще очень интересный продукт — если он работает с простыми скриптами (не кодированными), то служит для оптимизации работы ядра, применяя различные алгоритмы кэширования и другие методы (подробнее можно прочитать тут). Подход такой — модуль 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=
после кодирования PHP-скрипт превращается в двоичный файл
Первая строка — название продукта, который вы защищаете, далее имя пользователя, Hardware-Locked указывает на то, используется ли привязка к аппаратному обеспечению сервера (для генерации host-id в комплекте есть специальная утилита). Expires указывает дату, до которой скрипт работоспособен (лицензия верна). И в последней строке указывается код верификации — специальным образом сгенерированная строка, которая и служит для однозначного сопоставления «скрипт — лицензия» и выявления случаев ручной корректировки файла лицензий. Лицензии хранятся в файле с расширением «.zl» и могут располагаться в любом месте на сервере. Для подключения лицензии к серверу необходимо редактировать опции в файле конфигурации PHP — php.ini. Пример:
[zend] ; тут опции установленных компонентов Zend zend_optimizer.license_path=»D:\test.zl»
Опция «zend_optimizer.license_path» указывает на файл лицензий, который будет применятся при работе с закодированными скриптами. Если вы держите на одном сервере разные сайты и каждому из них надо устанавливать свои лицензии, то тогда проще создать единую общую директорию для хранения лицензий, и записывать пути через разделитель (в Windows — «;», в Unix — «: «). К примеру, когда есть две лицензии, то задать их можно таким способом:
Сервер сам опознает, какую лицензию к какому скрипту применять.
В лицензиях можно задавать и собственные поля, к примеру, название компании-разработчика. Также есть возможность настроить вывод информации о том, что лицензия истекла, куда и к кому обратится за ее продлением. Этот блок информации задается при генерации лицензии и выводится в окно браузера при попытке доступа к скрипту, срок лицензии которого истек.