[英]rename all subdirectories of directory in php
我有這樣的目錄結構:
.
├── uploads
| ├── 1
| | ├── example.jpeg
| | └── example.jpeg
| ├── 2
| | └── example.jpeg
| ├── 3
| | ├── example.jpeg
| | ├── example.jpeg
| | └── example.jpeg
我要重命名在我firectory所有目錄uploads
(在我的例子,這些被稱為1
, 2
和3
)。 我想根據它們的當前名稱重命名所有這些目錄。 例如,我希望1
變為1asd
, 2
變為2asd
, 3
變為3asd
。 我一直在尋找類似的問題,並發現了這個問題(盡管這個問題看起來實際上與其他問題有關)和這個問題 (有關重命名文件)。 我試過了:
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
目錄的路徑正確,我對此進行了測試。
確保從正確的目錄運行此文件,或相應地更改路徑。
如果您的PHP
腳本位於uploads
的父目錄中, 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)
匹配從數字開始到結尾為1的所有內容。
glob("uploads/[0-9]",GLOB_ONLYDIR)
匹配名稱具有單個數字的任何目錄。
您要檢查以確保它是一個目錄,並檢查它是否不是當前目錄.
或父..
目錄:
if(is_dir($fileName) && $fileName!= "." && $fileName!= "..") {
$newName = $fileName.'asd';
rename($fileName, $newName);
}
另外,如mcserep 所述, $newName = $fileName.'asd');
有語法錯誤$newName = $fileName.'asd');
,請注意右括號。
經過反復試驗,我設法找到了解決方案:
$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);
}
}
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.