我的目录结构如下:
.
├── uploads
| ├── 1
| | ├── example.jpeg
| | └── example.jpeg
| ├── 2
| | └── example.jpeg
| ├── 3
| | ├── example.jpeg
| | ├── example.jpeg
| | └── example.jpeg
我希望重命名我的存储区uploads
中的所有目录(在我的示例中,这些目录分别称为1
,2
和3
)。我想根据它们的当前名称重命名所有这些目录。例如,我希望1
成为1asd
,2
变成2asd
,而3
变成3asd
。我一直在寻找类似的问题,并发现This one(虽然这个问题似乎实际上与其他问题有关)和this one,这与重命名文件有关。
我尝试过:
if ($handle = opendir('../path/to/uploads')) {
while (false !== ($fileName = readdir($handle))) {
$newName = $fileName.'asd';
rename($fileName, $newName);
}
closedir($handle);
}
这不起作用,因为所有$filename
始终都是.
。我的猜测是因为它与目录有关,而不是文件。我该如何定位目录?
side-note1 :我想重命名的目录包含我不想丢失/删除的文件。在我的示例中,它们都称为example.jpeg
。
side-note2 :我的uploads
目录的路径正确,我对此进行了测试。
答案 0 :(得分:1)
确保从正确的目录运行此文件,或相应地更改路径。
如果您的PHP
脚本位于uploads
的父目录下,则按原样工作
foreach (glob("uploads/[1|2|3]",GLOB_ONLYDIR) as $filename) {
rename($filename, $filename."asd");
}
在有多个目录的情况下,以上内容将更改为以下内容:
$directories = array_merge_recursive(glob("uploads/[0-9]*[0-9]",GLOB_ONLYDIR),glob("uploads/[0-9]",GLOB_ONLYDIR));
foreach ($directories as $directory) {
rename($directory, $directory."asd");
}
glob("uploads/[0-9]*[0-9]",GLOB_ONLYDIR)
匹配从一个数字到一个数字的所有内容。
glob("uploads/[0-9]",GLOB_ONLYDIR)
匹配名称具有单个数字的任何目录。
答案 1 :(得分:0)
您要检查以确保它是目录,并检查它是否不是当前目录.
或父目录..
:
if(is_dir($fileName) && $fileName!= "." && $fileName!= "..") {
$newName = $fileName.'asd';
rename($fileName, $newName);
}
此外,由于mcserep指出 $newName = $fileName.'asd');
中存在语法错误,请注意右括号。
答案 2 :(得分:0)
经过反复试验,我设法找到了解决方案:
$dir = '../path/to/uploads/';
if (is_dir($dir)) {
if ($dh = opendir($dir)) {
while (($filename = readdir($dh)) !== false) {
if($filename!= "." && $filename!= "..") {
rename($dir.$filename, $dir.$filename."asd");
}
}
closedir($dh);
}
}