获取没有目录的PHP文件夹列表

时间:2017-02-28 06:50:41

标签: php

当设置了url参数时,它应该搜索是否存在具有此parametername / foldername的文件夹。 但是glob函数给了我目录和foldername。 如何在没有目录的情况下列出foldername?

<?php

if(isset($_GET["customer"])){
    $customer = $_GET['customer'];
    $path = 'cover/';
    $dirs = glob($path.'*', GLOB_ONLYDIR);
    print_r($dirs);
    if(array_search($customer, $dirs) !== false) {
        echo "found something";
    }
    else {
        echo "nothing found";
    }
}
else {
    echo "no parameter in the url";
}

?>

此代码的结果:

Array ( [0] => cover/twDE [1] => cover/twEN )

所以我想有一个数组只有没有封面/ /..

的foldernames

谢谢你的帮助 格雷格

3 个答案:

答案 0 :(得分:0)

sites-enabled

答案 1 :(得分:0)

试试这个:

function customResult($dirsFound) {
    return str_replace('cover/', '', $dirsFound);
}

$customer = isset($_GET['customer']) ? $_GET['customer'] : '';
if (strlen($customer)) {
    $path = 'cover/';
    $dirs = array_map('customResult', glob($path . '*', GLOB_ONLYDIR));

    if (array_search($customer, $dirs) !== false) {
        echo "found something";
    } else {
        echo "nothing found";
    }
} else {
    echo "no parameter in the url";
}

答案 2 :(得分:0)

有几种方法可以做到。

chdirscandir

chdir('./cover');
$dirs = array_filter(scandir('.'), 'is_dir'));

使用FilesystemIterator

$fsi = new FileSystemIterator('./cover');
foreach ($fsi as $element) {
    if ($element->isDir()) {
        echo $element->getbasename(), PHP_EOL;
    }
}

globbasename

print_r(array_map('basename', glob('./cover', GLOB_ONLYDIR)));

以上所有内容只会为您提供&#34;封面&#34;中的目录名称。夹。然后,您可以运行array_search或其他任何内容。

但是:,因为您的文件夹名称似乎与您的客户名称相对应,您也可以直接glob,例如。

glob("./cover/$customer", GLOB_ONLYDIR);

这可以节省您对in_array的额外通话费用。如果结果是空数组,则没有客户目录。

话虽如此,如果您只是验证路径+客户值是否是一个目录,您可以将代码减少到一次检查。

if (is_dir("./cover/$customer")) {
    // found your customer's folder
}

旁注:如果使用此方法,则应确保$customer变量不包含允许目录遍历的字符,以防止恶意用户尝试映射文件系统布局。