2

我有名称中包含括号的目录。即“dir_123[test@test.de]”

在该目录中有 .tif 文件。

我所做的是计算 Tif 文件。在我的 Mac 上,我使用 MAMP 做到了这一点,效果很好:

$anz = count(glob(str_replace("[", "\[", "dir_123[test@test.de]/*.tif")));

在我运行 XAMPP 的 Windows 机器上,由于括号,它无法工作:

$anz = count(glob(str_replace("[", "\[", "dir_123[test@test.de]\\*.tif")));

如何让我的 XAMPP 服务器读取该目录?

4

3 回答 3

1

访问http://unixhelp.ed.ac.uk/CGI/man-cgi?glob+7了解 glob() 的通配符。

所以,正确的转义是:

$pattern = "dir_123[test@test.de]/*.tif";
if ( strpos($pattern, '[') !== false || strpos($pattern, ']') !== false )
{
    $placeholder = uniqid();
    $replaces = array( $placeholder.'[', $placeholder.']', );
    $pattern = str_replace( array('[', ']', ), $replaces, $pattern);
    $pattern = str_replace( $replaces, array('[[]', '[]]', ), $pattern);
}
$anz = count(glob( $pattern ));
于 2012-06-11T23:53:33.617 回答
1

您是否尝试过转义所有特殊字符?

前任。

$dir = "dir_123[test@test.de]";

$from = array('[',']');
$to   = array('\[','\]');

$anz = count(glob(str_replace($from,$to,$dir . "\\*.tif")));

这适用于我在 Ubuntu 上。

如果这不起作用,您可以执行以下操作:

function countTif($dir) {
    $ret = 0;
    $scan = scandir($dir);
    foreach($scan as $cur) {
        $ret += ((substr($cur,-4) == ".tif")?1:0);
    }
    return $ret;
}

如果您需要递归计数:

function countTif($dir) {
    $ret = 0;
    $scan = scandir($dir);
    foreach($scan as $cur) {
        if(is_dir("$dir/$cur") and !in_array($cur,array('.','..'))) {
            $ret += countTif("$dir/$cur");
        } else {
            $ret += ((substr($cur,-4) == ".tif")?1:0);
        }
    }
    return $ret;
}

此功能已在我的 Ubuntu 9.04 计算机上使用 php 5.2.6-3ubuntu4.1 进行了测试和工作

希望它对你有用!

//Linus Unnebäck

于 2009-07-30T20:26:42.560 回答
0

我改用这段代码解决了这个问题:

$dir = scandir("\\\\server\\dir");
foreach ($dir as $key=>$row)
    if (end(explode(".", $row)) != "tif")
        unset($dir[$key]);
$anz = count($dir);
于 2009-07-31T10:22:12.800 回答