【问题标题】:how to rename a file when ouputted in foreach loop在foreach循环中输出时如何重命名文件
【发布时间】:2016-09-10 20:56:13
【问题描述】:

对于文件管理系统,我使用 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 是文件或文件夹的名称

【问题讨论】:

  • 这段代码很容易受到路径攻击。您想针对这种情况添加保护。
  • ok 但这不是我的问题。如何捕获一个文件并仅重命名该文件?
  • 您似乎知道 if 语句是什么。您知道您可以使用=====strcasecmpstrcmp 和其他各种方法比较两个字符串吗?

标签: php rename


【解决方案1】:

一个肮脏的解决方案是在您的表单中添加一个隐藏字段,其中包含文件的原始名称并将 if 条件移出循环类似:

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

}
?>

【讨论】:

    猜你喜欢
    • 2012-09-04
    • 2013-01-08
    • 2014-10-05
    • 2021-10-23
    • 1970-01-01
    • 1970-01-01
    • 2014-06-26
    • 2010-12-29
    • 2019-02-09
    相关资源
    最近更新 更多