Включая внешние php-файлы и используя от них функции?

Я пытаюсь реализовать как можно более простую систему лицензирования в устанавливаемом веб-приложении, которое я создаю (загрузка и загрузка пользователей на их сервер). После изучения того, что сеансы не могут быть установлены в междоменном пространстве (это был мой первый выбор), я теперь подумал о включении внешнего файла на свой сервер, содержащего функцию под названием validate() которая проверяет, существует ли лицензия в моя база данных.

Поток событий: Пользователь вводит лицензионный ключ на своем сайте -> Лицензионный ключ, отправленный в файл /validate.php который включает в себя файл с моего сервера -> Сервер проверяет, включен ли в базу лицензионный ключ -> Если да, задает сеанс в домене пользователей и перенаправление на раздел администратора -> Если нет, перенаправляется на страницу входа в систему с сообщением об ошибке.

Вот мой код (теоретический – могут быть проблемы):

validate.php

 include("http://www.example.com/function.php"); validate($_POST['license']); в include("http://www.example.com/function.php"); validate($_POST['license']); 

function.php

 include("db_conn.php"); function validate($license)( $conn = mysql_connect($db_host, $db_user, $db_pass); mysql_select_db($db_name); $license = mysql_real_escape_string($license); $query = "SELECT FROM licenses WHERE license = '$license'"; $result = mysql_query($query); if(mysql_num_rows($result) == 1) { mysql_close($conn); session_set_cookie_params(60*60*24*30,"/","." . $_SERVER['SERVER_NAME']); session_start(); $_SESSION['license_valid'] == "YES"; header("Location:" . $_SERVER['SERVER_NAME'] . "/admin"); } else { mysql_close($conn); header("Location" . $_SERVER['SERVER_NAME'] . "/login/?error=1"); } ); в include("db_conn.php"); function validate($license)( $conn = mysql_connect($db_host, $db_user, $db_pass); mysql_select_db($db_name); $license = mysql_real_escape_string($license); $query = "SELECT FROM licenses WHERE license = '$license'"; $result = mysql_query($query); if(mysql_num_rows($result) == 1) { mysql_close($conn); session_set_cookie_params(60*60*24*30,"/","." . $_SERVER['SERVER_NAME']); session_start(); $_SESSION['license_valid'] == "YES"; header("Location:" . $_SERVER['SERVER_NAME'] . "/admin"); } else { mysql_close($conn); header("Location" . $_SERVER['SERVER_NAME'] . "/login/?error=1"); } ); 

Проблема в том, что я не уверен, как сервер будет обрабатывать функцию validate() например, будет ли сеанс установлен на моем сервере или на сервере пользователя? Будет ли он использовать мой $_SERVER['SERVER_NAME'] или пользовательский? Будет ли он включать db_conn.php с моего сервера или пользователя?

Проецируемый поток:
Пользователь вводит лицензионный ключ на свой сайт (происходит на его сервере)
Лицензионный ключ, отправленный в файл /validate.php … (происходит на его сервере)
… который включает файл с моего сервера (который не работает)

Ваш фактический поток будет:
Пользователь вводит лицензионный ключ на свой сайт (происходит на его сервере)
Лицензионный ключ, отправленный в файл yoursite.com/validate.php … (происходит на его сервере)
… который запускает скрипт на вашем сервере.

Ваш сервер проверяет, включен ли в базу лицензионный ключ.

Если да, задает сеанс на вашем сервере для этого пользователя и перенаправляется в раздел администратора на вашем сервере.
Если нет, перенаправляется на страницу входа на ваш сервер с сообщением об ошибке.


Правильный способ его настройки состоит в том, чтобы на вашем сервере был файл, который принимает параметр URL-ключа лицензионного ключа, проверяет, действительно ли он, затем выводит что-то, чтобы указать, является оно или нет.

validate.php (на вашем сервере)

 <?php session_start(); $key = $_POST['license_key']; // Please clean this variable, obvious SQL injection, blah blah include('function.php'); // From your server, contains the validate() function if (validate($key)) { // Log them in on your server $_SESSION['license_key'] = $key; } else { // Say error and show the login form from your server } в <?php session_start(); $key = $_POST['license_key']; // Please clean this variable, obvious SQL injection, blah blah include('function.php'); // From your server, contains the validate() function if (validate($key)) { // Log them in on your server $_SESSION['license_key'] = $key; } else { // Say error and show the login form from your server } 

Теперь кто-то на другом сервере может установить action на своей <form> на http://yourserver.com/validate.php и ваш сервер займет от этого.


Когда вы включаете скрипт, все переменные в включенном скрипте будут запускаться так, как если бы они были встроенными, внутри встроенного скрипта.

По сути, просто представьте, что этот код находится внутри validate.php , и он будет работать, как если бы он был.

Для этого нужно db_conn.php если db_conn.php находится в другом каталоге validate.php , include внутри validate.php которое запрашивает db_conn.php не удастся – вам нужно будет изменить эту страницу, чтобы она соответствовала путь из включенного файла.