Удалить расширение используя str_replace при отображении с помощью glob - PullRequest
2 голосов
/ 20 декабря 2011

У меня есть страница, на которой я хочу перечислить все документы, загруженные пользователем, и хочу удалить расширение для каждого элемента в списке.

Этот список будет содержать потенциально неограниченные типы файлов, поэтому метод, который я использовал для ручного указания и замены расширения ничем, займет слишком много времени.

Я также пытался сделать str_replace на .*, чтобы что-то после . было заменено, но, похоже, это не сработало.

Вот что у меня есть:

<?php 
$chkdir = is_dir("/secure/user uploads/".$_SESSION['SESS_MEMBER_ID']."");
$path = "$chkdir/";
foreach (glob("$path*") as $filename) { 
$result = str_replace("$path","", $filename); 
$result = str_replace(".pdf","", $result); 
$result = str_replace(".db","", $result); 
echo "<li><a href='" . $filename ."'/>". $result . "</a></li><tr>"; 
} 
?>

В конце вы можете видеть, что я указал PDF и DB в качестве расширений для удаления, но я хочу попробовать более общий подход и удалить все расширения файлов.

Может кто-нибудь посоветовать с этим?

Ответы [ 5 ]

4 голосов
/ 20 декабря 2011

Вы можете использовать pathinfo () .

Из примера руководства PHP:

$path_parts = pathinfo('/www/htdocs/inc/lib.inc.php');
echo $path_parts['filename']; // lib.inc

Применимо к вашей ситуации:

foreach (glob("$path*") as $filename) { 
  $path_parts = pathinfo($filename); 
  $result = $path_parts['filename']; 
  echo "<li><a href='" . $filename ."'/>". $result . "</a></li><tr>"; 
} 
0 голосов
/ 24 января 2016

Выпуск 5.2 (5 марта 2013 г.) добавлена ​​PATHINFO_FILENAME константа.- для имени файла без пути и расширения

В 1 строке кода:

$filename = pathinfo("$path", PATHINFO_FILENAME);

Ваш:

foreach (glob("$path*") as $filename) { 
    echo "<li><a href='" . $filename ."'/>". pathinfo($filename, PATHINFO_FILENAME) . "</a></li><tr>"; 
} 
0 голосов
/ 20 декабря 2011
<?
$path = "./"; 
foreach (glob("$path*") as $filename) {  
$result = str_replace("$path","", $filename);  
$result = strip_ext($result, "php", "js");  
echo "<li><a href='" . $filename ."'/>". $result . "</a></li><tr>";  
}  


function strip_ext($file) {
    $args = func_get_args();

    for ($i = 1; $i < count($args); $i++) {
        $ext = $args[$i];

        $ext_pos = strrpos($file, '.' . $ext);

        //The extension must exist and be at the end of the file name.
        if ($ext_pos != false && $ext_pos + strlen($ext) == strlen($file) - 1) {
            return(substr($file, 0, $ext_pos));
        }
    }

    return($file);
}
?>
0 голосов
/ 20 декабря 2011

Разделить на '.' и удалите последний элемент, затем сложите его вместе.

<?php 
$chkdir = is_dir("/secure/user uploads/".$_SESSION['SESS_MEMBER_ID']."");
$path = "$chkdir/";
foreach (glob("$path*") as $filename) { 
$result = str_replace("$path","", $filename);
$t = explode('.',$result);
if(count($t) > 1) array_pop($t);
$result = implode('.',$t);
echo "<li><a href='" . $filename ."'/>". $result . "</a></li><tr>"; 
} 
?>
0 голосов
/ 20 декабря 2011

Вы можете поместить все возможные расширения в массив и заменить его, зацикливаясь на нем.что-то вроде: $ ext = array (pdf, db, etc ...);

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...