【问题标题】:use external class file from parent domain onto subdomain使用来自父域的外部类文件到子域
【发布时间】:2011-10-24 15:51:48
【问题描述】:

如何从我的父域中包含一个类文件以在我的服务器上的子域中使用?

例如,我有一个类文件来处理用户身份验证以及一些重要的方法。如何在子域上使用该身份验证类?

我的文件夹结构是

父域

/home/<domain>/public_html/

子域

/home/<domain>/public_html/users/cluster_1/<sub>

当我创建一个新的子域时,我有一个模板 index.php 被复制到

/home/<domain>/public_html/users/cluster_1/<sub>/index.php

在 index.php 中我想包含我的身份验证类,以便我可以根据其方法返回的数据做更多的事情。

我知道我不能包含 http 请求,而且我也不想使用 dirname(dirname(__FILE__),因为如果用户更改他们可以看到域的服务器文件夹结构。

我尝试了一个 fopen,但我无法让它包含我的课程,我还尝试了一个像这样的 cURL

function get_data($url) {
    $ch = curl_init();
    $timeout = 5;
    curl_setopt($ch,CURLOPT_URL,$url);
    curl_setopt($ch,CURLOPT_RETURNTRANSFER,1);
    curl_setopt($ch,CURLOPT_CONNECTTIMEOUT,$timeout);
    $data = curl_exec($ch);
    curl_close($ch);
    return $data;
}
$returned_content = get_data('http://domain.com/api/ApiClient.php');

有没有一种优雅的方式来包含我的 ApiClient.php 类文件,即使用户为他们更改 PHP 代码也不会看到 PHP 错误引发的文件夹结构信息。

【问题讨论】:

    标签: php curl include fopen


    【解决方案1】:

    对不起,不,不是。

    虽然实际上可以通过 HTTP 下载 PHP 代码并使其在本地运行,但出于安全隐患强烈不鼓励这样做:包含系统中的一个小错误或包含系统中的一个小错误代码服务器,突然你从未经检查的来源运行恶意代码。他们默认禁用该行为是有充分理由的。

    如果您的用户可以编辑和运行他们自己的(未经检查的)PHP 代码,那么对您的用户看到您的目录结构犹豫不决是没有意义的:除非您保护了您的设置(听起来不像),否则他们会发现现在的那个结构。只需使用适当的函数来遍历目录。

    我只是使用直接包含方法。

    require MAIN_CLASS_PATH . '/api/ApiClient.php';
    

    如果您真的希望他们不知道父域:

    • 将共享类移动到一个单独的项目中,从而一个单独的目录(比如 /home/$user/shared/api
    • 通过设置 PHP 的 open_basedir 并禁用 exec() 等函数(可用于绕过 open_basedir)来保护子域
    • 包含来自您的父域和子域的 /home/$user/shared/api。

    【讨论】:

    • 是的,我想通了。在我的固执中,我创建了一个隐藏目录并将类文件的副本放在那里并用 htaccess 规则锁定。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2010-10-10
    • 2015-01-23
    • 2023-04-01
    • 1970-01-01
    • 1970-01-01
    • 2023-03-27
    • 2020-12-23
    相关资源
    最近更新 更多