Рекомендую Вам для начала задуматься над вопросом: "от кого вы собрались защищаться?".
Если Вы хотите чтобы Ваш клиент, не обладающий специальными навыками не уркал Ваше ПО, то Вам будет достаточно обфускаторов, о которых пишут коллеги выше (Zend, например).
Если Вы хотите защитить решения от угроз извне приложения, Вам следует нанять специалиста разработчика и провести аудит безопасности Вашего решения. Так же можете воспользоваться сканерами безопасности, типа XSpider или подобных.
Защитить же решение, которое размещается на внешнем сервере от хакеров / крякеров или иных специалистов, которые почему-то захотели именно Вашу программульку, Вам скорее всего самому не удастся. В таком случае стоит обратиться к профессионалам. Скорее всего Вам предстоит в таком случае пересмотреть архитектуру Вашего ПО, а так же каналы его распространения. Самый надежный сегодня вариант - это архитектура Software as a Service и собстенные защищенные сервера. Так поступают лидеры рынка, которые заполонили веб своими облачными решениями.