Поиск файла с определенным именем с любым расширением

Обратите внимание, что я хочу изменить номер отсека.

<?php
    $compartment = "1";

        /* HERE I NEED SOME SCRIPT TO FIND THE EXTENSION OF THE FILE NAME $compartment AND TO SAVE THAT AS A VARIABLE NAMED 'EXTENSION'.*/

    if (file_exists($compartment.$extension)) {
        echo "$compartment.$extension exists!
    } else {
        echo "No file name exists that is called $compartment. Regardless of extension."
    }
?>


<?php
    $compartment = "2";

        /* HERE I NEED SOME SCRIPT TO FIND THE EXTENSION OF THE FILE NAME $compartment AND TO SAVE THAT AS A VARIABLE NAMED 'EXTENSION'.*/

    if (file_exists($$compartment.$extension)) {
        echo "$compartment.$extension exists!
    } else {
        echo "No file name exists that is called $compartment. Regardless of extension."
    }
?>

Спасибо!


person Andy Cheeseman    schedule 08.07.2010    source источник
comment
Что, если их больше одного? В любом случае, вы можете использовать glob.   -  person Artefacto    schedule 08.07.2010
comment
И что вы ожидаете от находки? Искать только в одной конкретной папке или искать во всех папках, начиная с определенной? Подходит ли частичное совпадение или должно совпадать полное имя файла? В любом случае, вы можете проверить opendir и readdir в справочнике по PHP   -  person wimvds    schedule 08.07.2010
comment
Будет только один файл с таким именем, поэтому мне не нужно беспокоиться о нескольких совпадениях. Частичные совпадения не должны возвращаться. т.е. Я хочу вернуть 1 и 13 отдельно.   -  person Andy Cheeseman    schedule 08.07.2010


Ответы (2)


Вам нужен glob().

$compartment = "2";

$files = glob("/path/to/files/$compartment.*"); // Will find 2.txt, 2.php, 2.gif

// Process through each file in the list
// and output its extension
if (count($files) > 0)
foreach ($files as $file)
 {
    $info = pathinfo($file);
    echo "File found: extension ".$info["extension"]."<br>";
 }
 else
  echo "No file name exists called $compartment. Regardless of extension."

кстати, то, что вы делаете выше, плачет за петлю. Не повторяйте свои блоки кода, а заверните один из них в это:

 $compartments = array(1, 3, 6, 9); // or whichever compartments 
                                    // you wish to run through

 foreach ($compartments as $compartment)
  {
   ..... insert code here .......
  }
person Pekka    schedule 08.07.2010
comment
Спасибо. Мне нужно будет несколько раз ссылаться на «восстановленный» файл в коде. Будет ли это проблемой? - person Andy Cheeseman; 08.07.2010
comment
@ Энди, нет, пока ты делаешь это внутри цикла foreach $files as $file. (Вы также можете использовать переменную вне ее, но тогда вам нужно выбрать, какую именно.) - person Pekka; 08.07.2010

Погляди:

  • glob — найти пути, соответствующие шаблону
  • fnmatch — сопоставляет имя файла с шаблоном
  • pathinfo — возвращает информацию о пути к файлу.
person Gordon    schedule 08.07.2010