Php is_dir ($ Klasör) harf duyarsız nasıl yapılır?

4 Cevap php

I is_dir() klasör veya argüman üst veya alt durumda eğer umurumda veya alt ve üst bir karışımını yok etmek gerekir.

Yani foldername "My Folder" ve ben is_dir("mY FoLdEr") sonuç olmalıdır çalıştırırsanız true.

4 Cevap

Yani PHP kadar değil. Bu işletim sistemi ve PHP üzerinde çalışan dosya sistemi kalmış. , Windows duyarsız olduğunu ancak Unix / Linux her versiyonu harf duyarlıdır.

Bana o başka bir şekilde koyalım: is_dir() temelde bir sistem çağrısı için bir sarıcı veya dosya bilgi sistem aramaların sonuçlarını kullanacak. Bu işletim sistemi ve dosya sistemi kurallarına göre, bir dosya adı ile eşleşen bulunursa, eğer bu sistem çağrıları şey dönmek ya da olmaz ya. PHP öylesine hayır sadece is_dir() Linux üzerinde duyarsız olabilir yapamaz bunu değiştiremezsiniz.

Yapabileceğiniz en iyi görmek için test için içlerinden dizin ve döngü içinde dosyaların bir listesini almak herhangi bir maç aradığınız ne bir harf duyarsız karşılaştırma bile.

Note: Eğer birden fazla isabet örneğin "ev" almak ve "Ev" olacak maç hem "ev" olabilir. (İstediğiniz) böyle bir işlev, bu durumda ne yapardınız?

Alternatif küçük harfe tüm dosya adlarını değiştirebilir ve daha sonra belirtilen dosyayı bulmak için giriş küçük sürümünü kullanabilirsiniz.

Düzenli ifadeler kullanabilirsiniz. Ben php sözdizimi oldukça emin değilim:

is_dir("[mM][yY] [fF][oO][lL][dD][eE][rR]")

Bunun için iyi bir regexp olabilir.

Kirli yolu, gerçek dir tüm dizinleri listesini almak ve istenen bir adla ()-ed isimleri Psikofarmakolojik strtolower karşılaştırabilirsiniz olabilir

Ben bir dizin yolunu doğrulamak için gereken bir sorunu vardı. Ben farklı durumlarda benzer isim dizinleri bir karışımı var istemiyordu. yani my\dir ve My\Dir. I Filip glob('{mM}{yY} {fF}{oO}{lL}{dD}{eE}{rR}', GLOB_BRACE) tarafından belirtilen grep yaklaşım denedi ama ben dizin adı uzun yaklaşık 8 karakterden daha olsaydı durma noktasına eziyet olacağını bulundu. Yani bu duyarsız is_dir() bir dava için benim çözüm;

$path  = '/';
$parts = explode(DIRECTORY_SEPARATOR, '/My/DirecTorY/pATh');

foreach($parts as $key => $dir) {
    $isUnique = true;

    if (is_dir($path . DIRECTORY_SEPARATOR . $dir)) {
        $path .= DIRECTORY_SEPARATOR . $dir;
        $isUnique = false;
    } else {
        $iterator = new DirectoryIterator($path);
        $name = strtolower($dir);

        foreach($iterator as $file) {
            $filename = $file->getFilename();
            if($file->isDir() && strtolower($filename) == $name) {
                $path .= DIRECTORY_SEPARATOR . $filename;
                $isUnique = false;
                break;
            }
        }
    }

    if($isUnique) {
        $path .= DIRECTORY_SEPARATOR 
              . implode(DIRECTORY_SEPARATOR, array_slice($parts, $key));
        break;
    } 
}

var_dump($isUnique, $path);