php使用其第一个字符获取带扩展名的文件名

时间:2014-03-02 16:24:17

标签: php filenames

嗯,这是我的第一个严肃的网络项目,那一刻我只是一个很大的谜。

该交易是使用其首字母获取上一个和下一个文件扩展名,例如:

有文件04.jpeg 05.gif 06.tiff我们正在阅读05.gif所以我们删除了扩展名

现在它的'05'所以我们加一个所以我们得到'06'以及如何获得文件扩展?!?!?!

详细信息:

问题是我需要修复我的图像浏览器,它有两种工作模式:

  1. 漫画浏览器

    [文件夹中的漫画如下:

    page00.extension

    page01.extension

    (...)

    page09.extension

    page10.extension

    page11.extension ]

  2. 单个文件浏览器

    [文件夹中的单个文件看起来像:

    01.extension

    02.extension

    03.extension

    (...)

    09.extension

    10.extension

    11.extension ]

  3. [扩展名可能jpg,jpeg,gif,png等]

    我使用$ _GET var。

    获取当前的$ extension和文件名

    这是一些代码 - 我正在使用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>';
    
    ?>
    

2 个答案:

答案 0 :(得分:2)

如果你知道当前文件的名称,那么你可以使用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 */ }

答案 1 :(得分: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...