【发布时间】: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 语句是什么。您知道您可以使用
==、===、strcasecmp、strcmp 和其他各种方法比较两个字符串吗?