Maybe you want to have a single page documentation and use sidebar navigation for navigating inside the page. So this sample layouts are for you. Even maybe you'd like to use top navigation bar for navigating between your pages.

Installation

PHPMyLicense has a built-in installer. It can check your server for minimum requirements, check and activate your purchase code, populate your database with the data it needs, make possible changes on the server to run PML correctly and setup an admin account to you. Just run yourserver.com/yourpml/install/ and let it do the rest.

Protecting your code with PHPMyLicense

PHPMyLicense has a built-in installer. It can check your server for minimum requirements, check and activate your purchase code, populate your database with the data it needs, make possible changes on the server to run PML correctly and setup an admin account to you. Just run yourserver.com/yourpml/install/ and let it do the rest.

Here you can get a better view of how to do this.

Here's how the protection class will be:

PHP Obfuscator

Yes! PHPMyLicense have not one, but TWO PHP Obfuscators! With it, you can encode your Protection Class, as another PHP files on your project.

All you need to do is navigate to Security Tools -> PHP Obfuscator, select witch one you want, place your code in the box, and let us to the rest!

Click here to view it in action!

Remember, your code NEEDS to end with the closing tag ( ?> )

PHPMyLicense Settings

PHPMyLicense permits some customizations on its Control Panel. Let's see some:

General Settings

Here's where the general settings are. Here, you can enable or disable some of the extra features in your PHPMyLicense. Check it out:

License Mask

With this field, you can configure how your License Keys will look like when generated by PHPMyLicense. Is basically a mask. You input the mask, and the system will replace the characters of the mask with the equivallent. Check on the table below the list of possibilities.

# Uppercase letters or numbers.
X Uppercase letters only.
x Lowercase letters only.
9 Numbers only.
Anything else Will repeat the character on the License Key. Use it for - or spaces.
Then, if your mask is
PML-####-####-####-99
your License Key can be:
PML-A28S-82JS-LKM7-43

Sign API Response

With this option enabled, you can sign all API returns with RSA. This function needs a RSA keypair, located at

/system/libs/signature
DON'T CHANGE THE FILE NAME!!

For your convenience, the system is loaded with a default keypair, but in production mode, we highly recommends you to use your own keypair. The system uses the PEM format.

In the Signature Type field, you can choose between returning raw base64 signature, or hash the signature with sha1 or md5.

Encrypt API Response

With this option enabled, you can encrypt all your API returns with AES-Rijndael Algorithm. To use this feature, you will need a strong encryption key. But, PHPMyLicense can generate it for you! Just hit the Generate button and the system will generate it for you

The Encrypt Algorithm used in this function is AES-Rijndael, avaiable for almost all programming languages, facilitating the cross-language integration.

Return all Data

With this option enabled, the API will return all license data in every successfull response.

With this option enabled, the response will be:

{"status":200,"message":"License is valid.","signature":"25a02425c58c1f2b296ea030df45665ea72a0362","signaturetype":"sha1"}
With the option enabled, will be:
{"status":200,"message":"License is valid.","licensedata":{"domain":"test.net","customer_email":"mx1@tests.phpmylicense.ml","licensekey":"DEMO-LE80-8373-WI3V-327W","expirydate":"1493913812","issued-by":"6","comments":""},"signature":"19308edefc9a53c6804d270d684e6b16a7beda80","signaturetype":"sha1"}

The fields returned:

domain Full License Domain.
customer_email Customer's e-mail address.
licensekey The License Key.
expirydate Expiration Date Timestamp.
issued-by Issuer User ID.
comments Extra data included on the license.

Mail Settings

If you want PHPMyLicense to send e-mails for you, or in case of Automatic Renewal Module, send e-mails to your customers, you need to activate this feature in this page, and insert the basic SMTP informations.

The password recovery page only works if e-mail sending is activated and configured correctly. Otherwise, you can't recover your PHPMyLicense password.

API Settings

PHPMyLicense supports some operations in the API. But, to secure this operations, it requires an API Key. In this page, you can setup new API Keys and change its permissions.

To generate a new API Key, just hit the Generate new API Key button.

Here I'll explain better how permissions works.

Insert Permission With this activated, that API key can issue new licenses.
Update Permission With this activated, that API key can update an existing license.
Delete Permission With this activated, that API key can delete an existing license. BE CAREFULL!.
Read Permission With this activated, that API key can't perform any operations that requires changing something in license. Is basically a read-only permission.

API Reference

PHPMyLicense is built in with a powerfull API that can activate licenses, perform license changes and issue trial licenses for your customers, all programatically. Your API is based on REST protocol, with json output.

Checking one license

This is the way that the Protection Class checks your license. It will get the client hostname or public IP, and query the API using this host/ip and the Product ID as parameters, and if the API returns valid, the execution of your script can proceed.

Parameters

Name type description
license string License Key generated when issuing the license.
product integer License's Product ID. Get it in the Products -> List Products

Return

Name type description
status integer Status code. Follows the HTTP Status Code Standart.
message string Human-friendly message text with the return situation.

Status Codes

200 Success, the license is valid
301 License is not valid
404 No license found using the input parameters
500 Server Error. Check details on the logs.

Calling the API this way, the system will check the license in the database, and return if it's valid or not. IMPORTANT: IF THE PRODUCT IS SET TO SANDBOX, PML WILL ALWAYS RETURN VALID

Then, the full URL will be something like

https://your-url.ext/api/?license=DEV-QEQJ-U85W-17SM-J16W&product=12

Subtitle 2

Ut vitae sagittis ex. In porttitor ante in nunc ultrices malesuada. Praesent iaculis odio vitae volutpat tempus. Nullam a sodales lorem, nec pellentesque odio. Praesent ullamcorper nisl commodo justo imperdiet dignissim. Duis purus magna, congue sit amet varius condimentum, dapibus tristique urna. Aliquam congue molestie tempor. Curabitur vel arcu vel nibh euismod porttitor. Sed a dolor maximus ex tempus pharetra rhoncus et nulla. Integer dolor ex, lobortis ac leo non, dapibus cursus ligula. Fusce sed ultrices urna, vel tincidunt mi. Nullam neque dolor, tempor nec lorem vitae, scelerisque consectetur quam.

Integer egestas ante id justo mollis feugiat ac vel metus. Nunc pulvinar scelerisque faucibus. Aenean at libero hendrerit, feugiat felis suscipit, facilisis justo. Praesent laoreet rutrum velit vitae facilisis. Fusce ac consectetur leo. Praesent dapibus interdum arcu, et hendrerit mi imperdiet eget. Morbi volutpat, leo id interdum aliquet, massa justo vestibulum nisl, eget posuere velit diam ac nibh. Duis tellus enim, porttitor id lectus vitae, tristique congue odio. Duis elementum porttitor nibh et porta. Suspendisse potenti.

Ut vitae sagittis ex. In porttitor ante in nunc ultrices malesuada. Praesent iaculis odio vitae volutpat tempus. Nullam a sodales lorem, nec pellentesque odio. Praesent ullamcorper nisl commodo justo imperdiet dignissim. Duis purus magna, congue sit amet varius condimentum, dapibus tristique urna. Aliquam congue molestie tempor. Curabitur vel arcu vel nibh euismod porttitor. Sed a dolor maximus ex tempus pharetra rhoncus et nulla. Integer dolor ex, lobortis ac leo non, dapibus cursus ligula. Fusce sed ultrices urna, vel tincidunt mi. Nullam neque dolor, tempor nec lorem vitae, scelerisque consectetur quam.

Subtitle 3

Fusce porttitor diam mauris, in fringilla elit euismod non. Aliquam non justo suscipit, pellentesque felis quis, egestas ante. Nunc quis imperdiet mauris, vitae cursus ante. Aenean vel efficitur ante, ullamcorper tempus massa. Integer ornare urna vitae quam semper fermentum. Mauris in dolor tempus, ultricies quam ac, lacinia nisl. Donec vitae ante sem.

Ut vitae sagittis ex. In porttitor ante in nunc ultrices malesuada. Praesent iaculis odio vitae volutpat tempus. Nullam a sodales lorem, nec pellentesque odio. Praesent ullamcorper nisl commodo justo imperdiet dignissim. Duis purus magna, congue sit amet varius condimentum, dapibus tristique urna. Aliquam congue molestie tempor. Curabitur vel arcu vel nibh euismod porttitor. Sed a dolor maximus ex tempus pharetra rhoncus et nulla. Integer dolor ex, lobortis ac leo non, dapibus cursus ligula. Fusce sed ultrices urna, vel tincidunt mi. Nullam neque dolor, tempor nec lorem vitae, scelerisque consectetur quam.

Subtitle 4

Phasellus dictum magna eget enim suscipit ornare. Sed in mollis nibh. Quisque odio tortor, molestie eget ullamcorper a, aliquam faucibus nisi. Sed mi risus, semper tincidunt ultrices ac, aliquet vel elit. Class aptent taciti sociosqu ad litora torquent per conubia nostra, per inceptos himenaeos. Sed at mi bibendum, congue risus ac, eleifend ex. Sed malesuada eros eget purus varius molestie. Pellentesque aliquet sapien nec turpis tincidunt vehicula. Vestibulum nisi nulla, vulputate ac nibh quis, feugiat rhoncus nunc. Nullam et magna tempus lacus tincidunt laoreet non in ex. Donec auctor accumsan iaculis. Duis cursus eleifend efficitur. Cras placerat nisi magna, at varius sem bibendum sed.

Donec lacinia ultrices venenatis. Duis id aliquam velit, a vehicula quam. Proin iaculis bibendum ex, hendrerit fringilla augue finibus ut. Aliquam sodales turpis vel ex cursus scelerisque. In feugiat justo quis viverra suscipit. Vivamus hendrerit aliquam purus, sit amet ultrices felis. Ut ac nisl pulvinar, tempor odio vel, feugiat ex. Phasellus consequat, leo eget lacinia sagittis, eros tellus pretium tortor, id congue purus augue eu orci. Fusce non eros iaculis, aliquet nulla quis, facilisis mi. Vivamus dictum justo non diam ultricies, sit amet eleifend erat efficitur. Ut porta diam ut dolor tincidunt, interdum placerat odio commodo. Suspendisse egestas sapien erat, et tincidunt magna fermentum sit amet. Donec vitae mi efficitur, tempus nisi ut, lacinia libero. Maecenas auctor odio mi, ac facilisis nisi vehicula efficitur. Ut hendrerit nulla ut nisl porttitor maximus. Pellentesque feugiat bibendum est, ut aliquam velit consequat eu.

Title2

Integer egestas ante id justo mollis feugiat ac vel metus. Nunc pulvinar scelerisque faucibus. Aenean at libero hendrerit, feugiat felis suscipit, facilisis justo. Praesent laoreet rutrum velit vitae facilisis. Fusce ac consectetur leo. Praesent dapibus interdum arcu, et hendrerit mi imperdiet eget. Morbi volutpat, leo id interdum aliquet, massa justo vestibulum nisl, eget posuere velit diam ac nibh. Duis tellus enim, porttitor id lectus vitae, tristique congue odio. Duis elementum porttitor nibh et porta. Suspendisse potenti.

Ut vitae sagittis ex. In porttitor ante in nunc ultrices malesuada. Praesent iaculis odio vitae volutpat tempus. Nullam a sodales lorem, nec pellentesque odio. Praesent ullamcorper nisl commodo justo imperdiet dignissim. Duis purus magna, congue sit amet varius condimentum, dapibus tristique urna. Aliquam congue molestie tempor. Curabitur vel arcu vel nibh euismod porttitor. Sed a dolor maximus ex tempus pharetra rhoncus et nulla. Integer dolor ex, lobortis ac leo non, dapibus cursus ligula. Fusce sed ultrices urna, vel tincidunt mi. Nullam neque dolor, tempor nec lorem vitae, scelerisque consectetur quam.