PHP - adının yalnızca bir kısmını bilerek zaman açın veya bir dosyayı kopyalamak?

3 Cevap php

Ben numaralandırılmış klasörler tarafından sipariş edilen dosyaların büyük bir depo var. Her klasörde sonra benzersiz bir dizi karakter bilinmeyen bir dize ile başlar, bir dosya olduğunu. Eşsiz sayısı göz önüne alındığında nasıl ben Bu dosyayı açmak veya kopyalayabilirsiniz?

for example: I have been given the number '7656875' and nothing more. I need to interact with a file called '\server\7656800\7656875 foobar 2x4'.

nasıl ben bunu PHP kullanarak elde edebilirsiniz?

3 Cevap

Gibi Yacoby suggested, glob hile yapmak gerekir. Siz de bunun birden tutucuları olabilir, bu nedenle derinlik, ancak doğru adlandırma biliyorsanız, bunu yapabilirsiniz:

$matchingFiles = glob('/server/*/7656875*');

hangi maç olur

"/server/12345/7656875 foo.txt"
"/server/56789/7656875 bar.jpg"

ama

"/server/12345/subdir/7656875 foo.txt"

Eğer derinliği glob() yardımcı olmaz bilmiyorsanız, örn, en üst klasör yolu bir RecursiveDirectoryIterator geçen kullanabilirsiniz

$iterator = new RecursiveIteratorIterator(
                new RecursiveDirectoryIterator('/server'));

foreach($iterator as $fileObject) {
    // assuming the filename begins with the number
    if(strpos($fileObject->getFilename(), '7656875') === 0) {
         // do something with the $fileObject, e.g.
         copy($fileObject->getPathname(), '/somewhere/else');
         echo $fileObject->openFile()->fpassthru();
    }
}

* Note: code is untested but should work

DirectoryIterator return SplFileInfo nesneler, böylece doğrudan üst düzey bir API aracılığıyla dosyalara erişmek için kullanabilirsiniz.

Değişken uzunlukta alt-alt-dizinleri altında gizli eğer, kullanmak find

echo `find . -name "*$input*"`;

Her sonucu patlayabilir ve trim, sonra doğru olanı buldum umuyoruz.