How to return only the filename, without the path

1

How do I return this code for just the file name?

With this current code it is returning me all the way from the ex file:

files / IES.pptx

I need it to only return the name or the name with extension Ex:

IES or IES.pptx

Follow the code.

<?php
// Recupera a lista de todos os arquivos:
$itens = glob("arquivos/*");

// Ordena os arquivos pela data de modificacão:
usort($itens, function ($a, $b) { return filemtime($a) < filemtime($b); });

// Pega apenas os cinco últimos modificados:
$cont = array_slice($itens, 0, 5);

foreach ($cont   as $arq )

echo  "<a href=  ".$arq." > ".$arq." </a><br>";
?>
    
asked by anonymous 13.04.2017 / 17:23

3 answers

2

A basename should only resolve:

<?php
// Recupera a lista de todos os arquivos:
$itens = glob("arquivos/*");

// Ordena os arquivos pela data de modificacão:
usort($itens, function ($a, $b) {
   return filemtime($a) < filemtime($b);
});

// Pega apenas os cinco últimos modificados:
$cont = array_slice($itens, 0, 5);

foreach ($cont as $arq) {
    $nome = basename($arq);
    echo '<a href="' . $arq . '"> '. $nome . '</a><br>';
}

Or (depends on what you want):

$nome = basename($arq);
echo '<a href="' . $nome . '"> '. $nome . '</a><br>';

If you want without the extension (if the files are all of the same format):

<?php
// Recupera a lista de todos os arquivos:
$itens = glob("arquivos/*");

// Ordena os arquivos pela data de modificacão:
usort($itens, function ($a, $b) {
   return filemtime($a) < filemtime($b);
});

// Pega apenas os cinco últimos modificados:
$cont = array_slice($itens, 0, 5);

foreach ($cont as $arq) {
    $nome = basename($arq, '.pptx');
    echo '<a href="' . $arq . '"> '. $nome . '</a><br>';
}

If you have varying extensions:

<?php
// Recupera a lista de todos os arquivos:
$itens = glob("arquivos/*");

// Ordena os arquivos pela data de modificacão:
usort($itens, function ($a, $b) {
   return filemtime($a) < filemtime($b);
});

// Pega apenas os cinco últimos modificados:
$cont = array_slice($itens, 0, 5);

foreach ($cont as $arq) {
    $nome = pathinfo($arq, PATHINFO_FILENAME);
    echo '<a href="' . $arq . '"> '. $nome . '</a><br>';
}
    
13.04.2017 / 17:35
0

To get the filename, from the full path:

 $this_page = basename($_SERVER['REQUEST_URI']); // caminho e nome do arquivo
 if (strpos($this_page, "?") !== false) $this_page = reset(explode("?", $this_page));
    
13.04.2017 / 17:31
0

You can combine strrchr () which returns the last part of a string after the delimiter (it enters together with return) and trim() to remove the / remaining.

$arr = array('public/html/p1/js/f.js', 'p2/main/file.txt', 'p3/readme.txt', 'pics/1.jpg');

foreach ($arr as $item) {
    echo trim(strrchr($item, '/'), '/') .'<br>';
}

Output:

f.js
file.txt
readme.txt
1.jpg

Another option is to use pathinfo () function, the second argument tells it to return only the file name. The folder, extension, and name without extension are other options.

foreach ($arr as $item) {
    echo  pathinfo($item, PATHINFO_BASENAME) .'<br>';
}
    
13.04.2017 / 17:30