קודם כל תלוי מה ההסכם שלך עם הלקוח, כמו שדניאל אמר יש לקוחות שלא ממש ירצו דבר כזה.
ובכל מקרה אם אתה רוצה יש פתרונות חזקים יותר ממה שדניאל הציע. כל עוד לא השתמשת בפיצ'רים שדורשים את הinterpenter של PHP אתה יכול לקמפל את הקוד שלך וליצור קבצים בינאריים. אחרי שיצרת קבצים בינאריים אתה יכול לעבור על הsymbols table ולשנות אותה ככה שלא יהיו שמות של פונקציות\מחלקות וכד'. זה אמור להגן על המערכת שלך משינויים של המתכנת הלא מנוסה או של מי שלא מוכן להשקיע מספיק זמן. אחרי זה אתה יכול להצפין את הקבצים הבינאריים שלך ככה שלא יהיה אפשר לעשות disassemble בצורה פשוטה ועל הדרך לדאוג שיש רישיון מתאים. אני הייתי משתמש במודל הצפנה מהיר יחסית כי אתה לא רוצה לפגוע בהרבה בביצועים, נגיד AES256, הוא חזק ודי מהיר. בתור מפתח הייתי משתמש בסיריאל של הרישיון בתוספת הMAC של המערכת ככה שהגרסה שנתת ללקוח תעבוד רק בשרת המוסכם. אם הרישיון מיועד ליותר משרת אחד הייתי יוצר איזה פונקציה מתמטית שתחזיר את אותה התוצאה עבור הMACים השונים ברישיון ומשתמש בפלט של הפונקציה בתור חלק מהמפתח. אם תסתכל על פונקציות HASH פשוטות אתה בטח תצליח למצוא משהו מתאים. אם ההגנה הזאת עדיין לא מספיקה לך ואתה דואג שהמשתמש יחלץ את הקוד הבינארי מהזיכרון של השרת בזמן ריצה (כמו שפורצים את ההגנה של אפל על אפליקציות לIOS) אתה יכול להוסיף הגנות שיפריעו כמו INT 3 (breakpoint) ועוד מגוון טריקים אחרים. בסופו של דבר עם מספיק השקעה יהיה אפשר לשבור גם את זה אבל זה יהיה קשה יותר וידרוש זמן רב. לדעתי זאת הגנה חזקה מספיק לרישיון של תוכנה. אם זה עדיין לא מספיק בשבילך אז כנראה שהתוכנה שלך באמת שווה ממש הרבה והייתי ממליץ לך להיעזר במומחה לאבטחת מידע
הערה: כשאמרתי בתור חלק מהמפתח התכוונתי לזה שתגזור מהצירופים הללו את המפתח ולא שהם יהיו המפתח עצמו.