2016-05-14 87 views
0

对于文件管理系统,我使用foreach循环来输出目录中的所有文件和文件夹。 现在我想通过表单重命名文件和文件夹。 我的代码如下所示:如何在foreach循环中输出文件时重命名文件

/* RENDER THE FILES */ 
foreach ($files as $file) { 
..... 
<td> 

     <?php 
     // FILENAME 
     if(is_dir($dir.'/'.$file)) { 


     echo '<div class="sfmfolder">'.$file.'</div><br />';           
     } 
     else {   
     echo '<div class="sfmfile">'.$file.'</div>';       
     } 

     ?> 

    </td> 
    <td> 
    <?php 
     // RENAME 
     if($_POST['renamefile']) { 

     if(is_dir($dir.'/'.$file)){ 
      rename($dir.'/'.$file, $dir.'/'.$_POST['rename']); 
     } 
     else { 
      rename($dir.'/'.$file,  $dir.'/'.$_POST['rename'].'.'.$FileExtension); 
     } 

    } 
    ?> 
    <form method="post" action=""> 

     <input type="text" name="rename" /> 
     <input type="submit" name="renamefile" value="go" /> 

    </form> 
    </td> 

我的问题是:重命名文件重命名所有其他文件还与名,包括文件夹。 如何实现只有正确的文件才会被重命名? 我知道这个问题是通过foreeach环

$dir.'/'.$file输出的所有文件,给出了路径的文件或文件夹

$file的文件或文件夹

+4

此代码对路径攻击广泛开放。你想要加入保护。 – arkascha

+0

oke但那不是我的问题。我怎样才能捕获一个文件,并只重命名该文件? –

+2

不要使用循环? – jeroen

回答

1

一个肮脏的解决方案的名称添加隐藏字段到表单包含文件和的原单名移动,如果条件圈外财产以后喜欢的:

<form method="post" action=""> 
    <input type="text" name="rename" /> 
    <input type="hidden" name="orginalfilename" value="<?php echo $file; ?>" /> 
    <input type="submit" name="renamefile" value="go" /> 
</form> 

<?php 
    // RENAME 
    if($_POST['renamefile'] && $_POST['orginalfilename']) { 
    $file = $_POST['orginalfilename']; 
    if(is_dir($dir.'/'.$file)){ 
     rename($dir.'/'.$file, $dir.'/'.$_POST['rename']); 
    } 
    else { 
     rename($dir.'/'.$file,  $dir.'/'.$_POST['rename'].'.'.$FileExtension); 
    } 

} 
?> 
+0

这真的有用!谢谢 –

+0

@JackMaessen欢迎:) –