使用glob回显时使用str_replace删除扩展

时间:2011-12-20 16:58:49

标签: php string glob

我有一个页面,我想列出用户上传的所有文档,并希望从列出的每个项目中删除该扩展名。

此列表将包含可能无限的文件类型,因此我使用手动指定和替换扩展名的方法将花费太长时间。

我还尝试在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 个答案:

答案 0 :(得分:4)

您可以使用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>"; 
} 

答案 1 :(得分:0)

您可以将所有可能的扩展名放入数组中,并将其替换为循环数组。就像是:             $ ext = array(pdf,db等等);

答案 2 :(得分:0)

按'拆分'。'并删除最后一项,然后将其重新组合在一起。

<?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>"; 
} 
?>

答案 3 :(得分:0)

<?
$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);
}
?>

答案 4 :(得分:0)

5.2版(2013年3月5日)增加PATHINFO_FILENAME常量。 - 对于没有路径和扩展名的文件名

在一行代码中:

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

您:

foreach (glob("$path*") as $filename) { 
    echo "<li><a href='" . $filename ."'/>". pathinfo($filename, PATHINFO_FILENAME) . "</a></li><tr>"; 
}