2

名前に括弧を含むディレクトリがあります。例: "dir_123[test@test.de]"

そのディレクトリ内に .ti​​f ファイルがあります。

私がしているのは、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

glob() のワイルドカードを理解するには、http : //unixhelp.ed.ac.uk/CGI/man-cgi ?glob+7 にアクセスしてください。

したがって、正しいエスケープは次のとおりです。

$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;
}

この機能は、php 5.2.6-3ubuntu4.1 を搭載した Ubuntu 9.04 コンピューターでテストされ、機能しました。

それがうまくいくことを願っています!

//ライナス・ウネベック

于 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 に答える