0

我正在使用带有substrstrrpos的strrchr PHP 函数来查找具有完整路径的字符串中的文件名,例如:

/images/onepiece.jpg 返回 onepiece.jpg

但现在我需要一个函数来查找不是最后一个“/”,而是最后一个: /images/anime/onepiece.jpg返回anime/ onepiece.jpg或/anime/onepiece.jpg 和strrchr - 1一样不行,呵呵 :),我怎样才能做到这一点?

[已解决] 正如@middaparka 和@Shakti Singh 所说,使用 PHP pathinfo(),我改变了从 MySQL 数据库获取图像字符串的方式。现在它可以有子文件夹,这是我最初的意图。

<?php
/*
 * pathinfo() parameters:
 * PATHINFO_DIRNAME = 1
 * PATHINFO_BASENAME = 2
 * PATHINFO_EXTENSION = 4
 * PATHINFO_FILENAME = 8
 * */
    $slash = '/';
    $mainpath = 'store/image/';
    $thumbspath = 'cache/';
    $path = $imgsrow->photo; //gets the string containing the partial path and the name of the file from the database
    $dirname = pathinfo($path, 1); //gets the partial directory string
    $basename = pathinfo($path, 2); //gets the name of the file with the extension
    $extension = pathinfo($path, 4); //gets the extension of the file
    $filename = pathinfo($path, 8); //gets the name of the file
    $dims = '-100x100.'; //string of size of the file to append to the file name
    $image = $mainpath . $path; //mainpath + path is the full string for the original/full size file
    $thumbs = $mainpath . $thumbspath . $dirname . $slash . $filename . $dims . $extension; //string to point to the thumb image generated from the full size file
?>
    <img src="<?= $thumbs; ?>" width="100" height="100" alt="<?= $row->description; ?>" />
    <br />
    <img src="<?= $image; ?>" width="500" height="500" alt="<?= $row->description; ?>" />
4

4 回答 4

1

我建议使用explode将路径分成几个部分:

$segments = explode('/', $path);

然后您可以使用$segments[count($segments)-1]获取最后一个路径段。

对于最后两个部分,您可以使用array_slicewithimplode将它们重新组合在一起:

$lastTwoSegments = implode('/', array_slice($segments, -2));
于 2011-03-20T17:46:24.570 回答
1

老实说,使用pathinfodirname函数来分解目录路径会容易得多。

例如:

$filename = pathinfo('/images/onepiece.jpg', PATHINFO_BASENAME);
$directory = dirname('/images/onepiece.jpg');

您可能必须混合使用这些来获得您所追求的,但它们至少是操作系统“安全的”(即:将同时处理 Linux/Linux 和 Windows 路径样式)。

就您遇到的具体问题而言,您应该可以使用以下跨平台解决方案来获得您所需要的:

<?php
    $sourcePath = '/images/anime/onepiece.jpg';

    $filename = pathinfo($sourcePath, PATHINFO_BASENAME);
    $directories = explode(DIRECTORY_SEPARATOR, pathinfo($sourcePath, PATHINFO_DIRNAME));

    echo $directories[count($directories) -1] . DIRECTORY_SEPARATOR . $filename;
?>
于 2011-03-20T17:01:35.330 回答
0

你需要使用pathinfo函数

pathinfo ($path, PATHINFO_FILENAME );
于 2011-03-20T17:01:11.247 回答
0

伙计,只需制作一个临时字符串来保存您要查找的字符串。找到最后一个匹配项,用 x 之类的东西替换它,然后找到新的最后一个匹配项,即倒数第二个匹配项。

于 2011-03-20T17:18:08.323 回答