PHP检测是否在子目录中

时间:2012-08-05 00:25:19

标签: php

我想确定我在install.php上的PHP文件是否位于子域/子目录中(基本上不在domain.com/install.php上)。

找到我的问题的解决方案

见下文

6 个答案:

答案 0 :(得分:4)

使用dirname($_SERVER['SCRIPT_NAME'])获取URI的目录部分。

答案 1 :(得分:0)

扫描特定目录:

if(file_exists('/subdir/install.php')) {
    // it exists there
} elseif(file_exists('/subdir2/install.php')) {
    // it exists there
} else {
    // it's not in these directories
}

扫描所有目录:

$files = glob('/*');

foreach($files as $file) {
 //check to see if the file is a folder/directory
    if(is_dir($file)) {
        if(file_exists($file . 'install.php')) {
            // it was found   
        } else {
            // it was not found
        }
    }
}

答案 2 :(得分:0)

而不是使用$_SERVER['SCRIPT_NAME']使用$_SERVER['REQUEST_URI']

请参阅PHP $_SERVER Documentation

答案 3 :(得分:0)

您的语法错误是因为您错过;末尾的$scriptname="install.php"

你的方法看起来应该可行。

您可以确定文件是否安装在域根目录而不是文件夹或子域的另一种方法是这样的:

function subdomboolcheck()
{
    $root = $_SERVER['DOCUMENT_ROOT'];
    $filePath = dirname(__FILE__);

    if ($root == $filePath) {
        return false; // installed in the root
    } else {
        return true;  // installed in a subfolder or subdomain
    }
}

答案 4 :(得分:0)

if ($handle = opendir('directory/subdirectory/')) {

    while (false !== ($entry = readdir($handle))) {

        if (strpos($entry, '.php') !== false) {
          echo $entry."<br>";
        }
    }

    closedir($handle);
}

答案 5 :(得分:0)

我的回答不是100%完整,因为尚未在所有服务器环境上进行过测试,但是我可以确认,如果使用嵌入式PHP Web引擎或带有符号链接Web文件夹的apache服务器,此方法将奏效。该函数以/ folder形式返回子文件夹,因为这是我需要的。如果有人可以检查Nginx,将会有很大帮助。注意,使用CONTEXT_DOCUMENT_ROOT与DOCUMENT_ROOT && SCRIPT_NAME与REQUEST_URI,因为这可能意味着路由器URL与实际活动文件。按照您可以说的问题使用

If (!empty(getSubFolder())) {
  //Do some stuff here
}
/**
     * Logic to determine the subfolder - result must be /folder
     */
    function getSubFolder() {

        //Evaluate DOCUMENT_ROOT && CONTEXT_DOCUMENT_ROOT
        $documentRoot = "";
        if (isset($_SERVER["CONTEXT_DOCUMENT_ROOT"])) {
            $documentRoot = $_SERVER["CONTEXT_DOCUMENT_ROOT"];
        } else
            if (isset($_SERVER["DOCUMENT_ROOT"])) {
                $documentRoot = $_SERVER["DOCUMENT_ROOT"];
            }
            $scriptName = $_SERVER["SCRIPT_FILENAME"];



            //echo str_replace($documentRoot, "", $scriptName);
            $subFolder = dirname( str_replace($documentRoot, "", $scriptName));

            if ($subFolder === "/" || (str_replace($documentRoot, "", $scriptName) === $_SERVER["SCRIPT_NAME"] && $_SERVER["SCRIPT_NAME"] === $_SERVER["REQUEST_URI"])) {
                $subFolder = null;
            }

            return $subFolder;
    }