Isimleri parantez ile dizinleri bulmak için topak () kullanarak

3 Cevap php

I have got directories which contain brackets in the names. i.e. "dir_123[test@test.de]"

Bu dirs içinde vardır. Tif dosyaları.

Ne yapmam Tif dosyaları sayma olduğunu. Benim Mac ben MAMP ile harika çalıştı yaptı:

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

Benim, Windows makine XAMPP çalıştıran çünkü bu parantez çalışmaz:

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

Nasıl benim XAMPP Sunucu dizinleri okumak için alabilirim?

3 Cevap

Eğer tüm özel karakterler kaçış için denediniz mi?

Ör.

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

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

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

Bu Ubuntu benim için çalışıyor.

O çalışmıyor ise bunu yapabilirsiniz:

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

Ve özyinelemeli sayma gerekirse:

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

Bu fonksiyonlar php 5.2.6-3ubuntu4.1 ile test ve benim Ubuntu 9.04 bilgisayarda çalıştı

O senin için çalıştığını umuyoruz!

/ / Linus Unnebäck

Yazarın http://unixhelp.ed.ac.uk/CGI/man-cgi?glob+7 glob için joker anlamak için ().

Yani, doğru kaçan:

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

Ben yerine bu kodu kullanarak bunu çözdü:

$dir = scandir("\\\\server\\dir");
foreach ($dir as $key=>$row)
    if (end(explode(".", $row)) != "tif")
        unset($dir[$key]);
$anz = count($dir);