2011-12-20 1 views
2

ユーザがアップロードしたすべてのドキュメントをリストしたいページがあり、リストされている各アイテムからその拡張子を削除したい。globを使ってエコーするときにstr_replaceを使って拡張子を削除する

このリストには、無制限のファイルタイプが含まれている可能性があります。そのため、手動で拡張子を指定して置き換える方法は、時間がかかりすぎます。

またを.*にして、.の後に書いたものが置き換えられても動作しないようにしました。

は、ここで私が持っているものです:あなたは、私が削除したファイルの拡張子としてPDFやDBを指定終わり近くに見ることができますが、私はより一般的なアプローチを試してみたい、とすべてのファイル拡張子を削除

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

誰もこのアドバイスはできますか?

+0

なぜ 'explode' ''にimplodeする ''? (辺の場合:拡張後に拡張がないという意味は、1つの要素しかありません) おそらく最も効率的な方法ではありませんが、意味があり、正規表現は含まれません。 –

+0

こんにちは、ありがとう、私はこれと似たような何かをやっている人を見ましたが、私はそれに精通していないので、私の状況には適用できませんでした。それを読んで、私がそれを動作させることができるかどうかを確認します – Eds

答えて

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>"; 
} 
+3

コードの行を保存したい場合は 'basename()' ... –

+0

これは完璧と思われます。私は乗ります。どうもありがとう! – Eds

+0

仲間のスポット、ありがとう、絶対的な魅力を働かせて! – Eds

0

あなたは配列にすべての可能な拡張を入れて、それをループそれを置き換えることができます。次のようなものがあります。 $ ext = array(pdf、db、etc ...);

+0

"すべての可能な内線番号"のリストはどこですか?また、「このリストには無制限のファイルタイプが含まれている可能性があるので、手動で拡張子を指定して置き換えて使用する方法では、長すぎる。" – jprofitt

+0

アレイのアイデアは私の心を超えましたが、わずかに異なる目的のためです。@jprofittは、配列を使ってエクステンションを削除することは、私にとって恐ろしい手作業であると言っている点で正しいです。配列を使用して、指定したファイルタイプのみを表示する方法を調べ、潜在的にあなたの提案を使用できるようにします。 – Eds

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

リリース5.2(2013年3月5日)は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>"; 
} 
関連する問題