php получает имя файла с расширением, используя его первые символы

Ха, это мой первый серьезный веб-проект и на тот момент у меня просто большая загадка.

Сделка состоит в том, чтобы получить предыдущее и следующее расширение файла, используя его первые буквы, например:

есть файл 04.jpeg 05.gif 06.tiff, мы сейчас читаем 05.gif, поэтому мы удаляем расширение

и теперь это '05', поэтому мы добавляем один, чтобы получить '06' и КАК ПОЛУЧИТЬ ЭТО РАСШИРЕНИЕ ФАЙЛА?!?!?!

Подробности:

Проблема в том, что мне нужно исправить мой браузер изображений, который работает в двух режимах:

  1. Браузер комиксов

    [комиксы в папке выглядят так:

    page00.extension

    page01.extension

    (...)

    page09.extension

    page10.extension

    page11.extension]

  2. Браузер отдельных файлов

    [отдельные файлы в папке выглядят так:

    01. расширение

    02. расширение

    03. расширение

    (...)

    09. расширение

    10. расширение

    11. расширение]

[расширение может быть jpg, jpeg, gif, png и т. д.]

Я получаю текущее расширение $ и имя файла с помощью $ _GET var.

Вот код - я работаю с фреймворком bootstrap 3:

Также мне жаль, что нет комментариев, но это не так уж сложно, как кажется

<?php

if($type == 2) {
$number = substr($clean, 4);
$nextnum = $number + 1;
$prevnum = $number - 1;


$prevpath = HOW TO GET IT WITH EXTENSION??
$nextpath = HOW TO GET IT WITH EXTENSION??
$nextext = '.' . substr(strrchr($prevpath,'.'),1);
$prevext = '.' . substr(strrchr($nextpath,'.'),1);


if ($nextnum >= 10) {
$next    = 'page' . $nextnum . $nextext;
} else {
$next    = 'page0' . $nextnum . $nextext; }

if ($prevnum >= 10) {
$prev    = 'page' . $prevnum . $prevext;
} else {
$prev    = 'page0' . $prevnum . $prevext; }

if ($clean === "page00") {
$prev = 'page00' . $extension; }

$count = 'page' . $x;
if ($clean === $count) {
$next = $count . $extension; }

} elseif($type == 3) {

$nextnum = $clean + 1;
$prevnum = $clean - 1;

$prevpath = HOW TO GET IT WITH EXTENSION?? <====== MY PROBLEM
$nextpath = HOW TO GET IT WITH EXTENSION?? <====== MY PROBLEM
$nextext = '.' . substr(strrchr($prevpath,'.'),1);
$prevext = '.' . substr(strrchr($nextpath,'.'),1);

if ($nextnum >= 10) {
$next = $nextnum . $nextext;
$prev = $prevnum . $prevext;
} else {
$next = '0' . $nextnum . $nextext;
$prev = '0' . $prevnum . $prevext; }

if ($clean === "01") {
$prev = '01' . $extension; }

if ($clean === $x) {
$next = $x . $extension; } }


echo '<br />
<div class="btn-group btn-group-justified">
      <a class="btn btn-default" href="?browse=' . $prev . '" role="button">Poprzedni</a>
      <a class="btn btn-default" href="' . $goback . '" role="button">Wyjdź</a>
      <a class="btn btn-default" href="?browse=' . $next . '" role="button">Następny</a>
</div>';

?>

person Nadia Krawczyk    schedule 02.03.2014    source источник
comment
Почему бы просто не преобразовать все изображения в один формат?   -  person Alex Howansky    schedule 02.03.2014
comment
потому что некоторые из них - гифки, некоторые - нет. Я должен оставить расширение как есть.   -  person Nadia Krawczyk    schedule 02.03.2014
comment
вы можете взглянуть на scandir   -  person Nouphal.M    schedule 02.03.2014


Ответы (2)


function get_next_file($file){
    $maxdigits = 2; // assuming the file always ends with two digits

    $dir = dirname($file) . DIRECTORY_SEPARATOR;
    $fname = pathinfo($file, PATHINFO_FILENAME);
    $name = substr($fname, 0, -$maxdigits);
    $digits = substr($fname, -$maxdigits) + 1;
    foreach(array('bmp', 'png', 'jpg', 'gif') as $ext){
        $test = $dir . $name . str_pad($digits, $maxdigits, '0', STR_PAD_LEFT) . '.' . $ext;
        if(file_exists($ext))return $ext;
    }
    return false; // no such file...
}

Полная функция будет выглядеть так, как показано выше (не тестировалось!). Вы бы назвали это так:

Предположим, у нас есть эти файлы:

test01.png
test02.gif
test05.bmp

Вы получите следующие результаты:

get_next_file('test01.png') => 'test02.gif'
get_next_file('test02.gif') => false        // 'coz the other file is not consecutive
get_next_file('test05.bmp') => false        // no other files to look for...
person Christian    schedule 02.03.2014

Если вы знаете имя текущего файла, вы можете искать файлы в каталоге, используя glob:

if (is_array(glob('05.*'))) { /* do some stuff */ }

В противном случае вы можете создать список расширений и использовать file_exists:

foreach (array('jpg', 'jpeg', 'png') as $ext)
    if (file_exists('05.'. $ext)) { /* do some stuff */ }
person u_mulder    schedule 02.03.2014