Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/oop/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
循环并重命名php中的所有子文件夹_Php_Directory_Subdirectory - Fatal编程技术网

循环并重命名php中的所有子文件夹

循环并重命名php中的所有子文件夹,php,directory,subdirectory,Php,Directory,Subdirectory,我很难找到任何关于循环遍历文件夹中所有子文件夹并使用PHP重命名它们的信息。我正在重命名它们,这样子文件夹的数量就不会达到任何限制 目前,我的用户文件夹结构如下: images/logos/1216/logo.jpg images/logos/11437/logo.jpg images/logos/234438/logo.jpg images/users/1/1216/logos/logo.jpg images/users/11/11437/logos/logo.jpg images/user

我很难找到任何关于循环遍历文件夹中所有子文件夹并使用PHP重命名它们的信息。我正在重命名它们,这样子文件夹的数量就不会达到任何限制

目前,我的用户文件夹结构如下:

images/logos/1216/logo.jpg
images/logos/11437/logo.jpg
images/logos/234438/logo.jpg
images/users/1/1216/logos/logo.jpg
images/users/11/11437/logos/logo.jpg
images/users/234/234438/logos/logo.jpg
因此,我想循环浏览“徽标”中的所有文件夹,并按如下方式重命名它们:

images/logos/1216/logo.jpg
images/logos/11437/logo.jpg
images/logos/234438/logo.jpg
images/users/1/1216/logos/logo.jpg
images/users/11/11437/logos/logo.jpg
images/users/234/234438/logos/logo.jpg
要计算新的子文件夹名称,我将使用现有的用户id(即11437除以1000)


实际问题是如何循环遍历所有子文件夹,以及重命名文件夹结构的最佳方法。

如果我对第一行代码的理解正确,您应该获得与第二行类似的数组外观。首先测试并备份您的文件

这应该列出所有用户ID或目录,并在其中循环。
如果复制成功(true),它将取消旧文件的链接,否则将返回错误消息

这是未经测试的代码

/$arr=array_filter(glob('images/logos/*'),'is_dir');
$arr=数组(“图像/徽标/1216”、“图像/徽标/11437”、“图像/徽标/234438”);
//var_转储($arr);
foreach($arr作为$dir){
$UID=str_replace(“图像/徽标/”、“”、$dir);
$newpath=“images/users/”.floor($UID/1000)。“/”$UID./logos/logo.jpg”;
$oldpath=$dir.“/logo.jpg”;
如果(复制($oldpath,$newpath)){
取消链接($oldpath);
}否则{
echo“文件“$oldpath”出现错误。“
\n”; $error=true; } } 如果(!$error)取消链接(“图像/徽标”);
编辑;只是注意到我最近用Excel太多了。将&更改为。

编辑2;现在在我自己的页面上测试了代码,glob似乎返回了路径。包含获取用户ID的代码。

这不是真正的重命名问题,因为您正在创建一个完全不同的结构。我想你应该复制文件,然后删除原始文件。所有文件都称为logo.jpg吗?是的,所有文件都称为logo.jpg。我知道这是一个完全不同的结构,我只是想知道是否可以重命名该结构,或者像你说的那样,最好遍历所有子文件夹,对于每个子文件夹,将文件复制到新的目录结构,然后删除所有现有的子文件夹?请看下面我的答案。请注意,我刚刚用两行代码编辑了它
$error
感谢上面的代码,我遇到的问题是logo文件夹中有数千个子文件夹,我需要一个方法来循环遍历logo文件夹中的所有子文件夹,而不是提供数组。@Mark yes。。。foreach确实循环通过它们。谢谢,我现在看到注释掉的代码来获取所有子目录,thanks@Mark它有用吗?我看到你问了10个问题,没有一个得到认可的答案,你甚至没有对其中任何一个投过赞成票。也许在将近一年半之后,现在是时候参加这次巡演,了解它是如何运作的,并获得知情的徽章了?嗨,Andreas,代码成功了,谢谢你的帮助。我唯一需要添加的是在copy语句之前调用mkdir,因为新文件夹不存在,因此无法将文件复制到新文件夹。