PHP - открыть или скопировать файл, зная только часть его имени? - PullRequest
0 голосов
/ 22 апреля 2010

У меня есть огромное хранилище файлов, которые упорядочены по нумерованным папкам. В каждой папке есть файл, который начинается с уникального номера, а затем с неизвестной строки символов. Учитывая уникальный номер, как я могу открыть или скопировать этот файл?

например: Мне дали номер «7656875» и больше ничего. Мне нужно взаимодействовать с файлом с именем '\ server \ 7656800 \ 7656875 foobar 2x4'.

как мне добиться этого с помощью PHP?

Ответы [ 4 ]

4 голосов
/ 22 апреля 2010

Если вы знаете имя каталога, рассмотрите возможность использования glob()

$matches = glob('./server/dir/'.$num.'*');

Тогда, если существует только один файл, который должен начинаться с номера, возьмите первый (и только) соответствует.

3 голосов
/ 22 апреля 2010

Как и Якоби предложил , glob должно сработать. В нем также может быть несколько заполнителей, поэтому, если вы знаете глубину, но не правильно называете имя, вы можете сделать:

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

, что соответствует

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

но не

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

Если вы не знаете, глубина glob() не поможет, вы можете использовать RecursiveDirectoryIterator , передающий самый верхний путь к папке, например,

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

* Примечание: код не проверен, но должен работать

DirectoryIterator возврат SplFileInfo объектов, так что вы можете использовать их для прямого доступа к файлам через API высокого уровня.

0 голосов
/ 22 апреля 2010

Если оно скрыто ниже в подкаталогах переменной длины, используйте find

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

Взрывайте и обрезайте каждый результат, затем надеемся, что вы нашли правильный.

0 голосов
/ 22 апреля 2010
$result = system("ls \server\" . $specialNumber . '\');
$fh = fopen($result, 'r');
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...