包括外部php文件和使用它们的功能?

时间:2011-09-12 02:56:08

标签: php function include

我正在尝试在我正在构建的可安装的Web应用程序中实现尽可能简单的许可系统(用户下载并上传到他们的服务器)。在得知会话无法跨域设置(这是我的第一选择)之后,我现在考虑在我的服务器上包含一个外部文件,其中包含一个名为validate()的函数,该函数验证许可证是否有效存在于我的数据库中。

活动流程:用户在其网站上输入许可密钥 - >许可证密钥已发布到文件/validate.php,其中包含来自我的服务器的文件 - >服务器检查数据库中是否包含许可证密钥 - >如果是,请在用户域上设置会话并重定向到管理部分 - >如果不是,则重定向回登录页面,并显示错误消息。

这是我的代码(理论上 - 可能有问题):

validate.php

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");
}
);

问题是,我不确定服务器将如何处理函数validate(),例如,会话会在我的服务器或用户的服务器上设置吗?它会使用我的$_SERVER['SERVER_NAME']还是用户?它是否会包含来自我的服务器的db_conn.php或用户的?{/ p>

1 个答案:

答案 0 :(得分:1)

您的预计流量:
用户在其网站上输入许可证密钥(发生在他的服务器上)
许可证密钥发布到文件/validate.php ... (发生在他的服务器上)
...包含来自我的服务器的文件(不起作用)

您的实际流量将是:
用户在其网站上输入许可证密钥(发生在他的服务器上)
许可证密钥已发布到文件yoursite.com/validate.php ... (发生在他的服务器上)
...在您的服务器上运行脚本。

您的服务器会检查数据库中是否包含许可证密钥。

如果是,请在您的服务器上为该用户设置会话,然后重定向到您服务器上的admin部分 如果不是,请重定向到服务器上的登录页面,并显示错误消息。


设置它的正确方法是在服务器上放置一个文件,该文件采用许可证密钥的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
}

现在,另一台服务器上的某人可以将action上的<form>设置为http://yourserver.com/validate.php,您的服务器将从那里接管。


当您添加脚本时,包含脚本中的所有变量都将在包含脚本中内联运行,就像它们内联一样。

基本上,想象一下所有代码都在validate.php内,它会像它一样运行。

这里有一个值得注意的问题 - 如果function.phpvalidate.php位于不同的目录中,includevalidate.php请求db_conn.php将失败 - 您需要更改此页面以匹配包含文件中的路径。