检查Path是否指向DIRECTORY内部或path是DIRECTORY的子目录

时间:2019-01-24 06:50:52

标签: php directory copy

首先,这不是重复的,因为我还没有找到与此相关的答案。 我的所有文件和文件夹都位于Base DIRECTORY上。

$base = dirname(__DIR__).'/files';

我想从路径复制到路径:

$copyFrom = $base.'/our';
$copyTo   = $base.'/New folder';

现在,我要首先检查{strong> $ base 中是否存在ourNew Folder目录,以便复制应在内部完成$ base 仅目录。

例如,如果用户尝试将../../放在copyFrom / copyTo路径的末尾,那么系统将在外部复制,以防止我需要检查。

我尝试过的是,但这只是告诉我目录存在:

if (is_dir($base.$copyFrom) && is_dir($base.$copyTo)) {

}

对此进行了再次尝试,但从某种意义上说,这将返回NotPresent我在$ base ourNew folder中有2个目录

                $directories = glob($base . '/*' , GLOB_ONLYDIR);
            foreach ($directories as $result) {
                if ($result === '.' or $result === '..') continue;
                if (is_dir($copyTo == $result)) {
                    echo 'Yes ';
                }else{
                    echo 'NotPresent ';
                    echo $copyTo .'  '. $result . ' | ';   

                }
            }

回声

  

C:\ MAMP \ htdocs \ projectAuru \ our / files /我们的C:\ MAMP \ htdocs \ projectAuru \ our / files /新文件夹| C:\ MAMP \ htdocs \ projectAuru \我们的文件/我们的C:\ MAMP \ htdocs \ projectAuru \我们的文件/我们|

1 个答案:

答案 0 :(得分:1)

如果目录必须直接位于$base文件夹下,则只需检查名称是否在glob()返回的目录列表中即可。

$directories = glob($base . '/*' , GLOB_ONLYDIR);
$copyFrom    = '/our';
$copyTo      = '/New Folder';
// As $directories will have entries like ./dirname, add . to check
if ( in_array(".".$copyFrom, $directories) && in_array(".".$copyTo, $directories) ) {
    echo 'Yes ';
}else{
    echo 'NotPresent ';
}

如果您要检查路径是否没有..类型条目,则可以搜索字符串以进行检查(将/添加到开头可以检查/../ )...

$copyTo      = '../../New Folder';
if ( strpos("/".$copyTo, "/../") !== false )    {
    echo "trying to change path";
}
else if (is_dir($base.$copyFrom) && is_dir($base.$copyTo)) {
    // Paths are OK and directories exist.
}