如何将一个目录移动到另一个目录?

16

我有两个文件夹

  1. myappdemo.com/VueGuides/services/iclean

  2. myappdemo.com/VueGuides/services/pics

我需要使用PHP将iclean文件夹移动到pics文件夹中。


这是一个偶发性的问题吗?还是作为 Web 应用程序的一部分会经常出现?如果您只是在寻找一个用 PHP 编写的文件管理器,您可以使用:http://pfn.sourceforge.net/ - nwaltham
4个回答

42

使用 rename() 函数。请注意,如果在Web服务器上运行,则Web服务器用户必须有写入目标目录的权限。

rename("oldpath", "newpath");

// in your case, assuming the script calling rename() 
// resides in the directory above 'myappdemo.com'
rename("myappdemo.com/VueGuides/services/iclean", "myappdemo.com/VueGuides/services/pics/iclean");

// Or use full absolute paths
rename("/path/myappdemo.com/VueGuides/services/iclean", "/path/myappdemo.com/VueGuides/services/pics/iclean");

嗨,我放置了代码后出现警告:在/home/myappdemo/myappdemo.com/VueGuides/services/getZip.php的第55行中,重命名(www.myappdemo.com/VueGuides/services/iclean,www.myappdemo.com/VueGuides/services/pics) [function.rename]:没有这样的文件或目录。 - Ajay
1
@user816891 显然你使用了错误的路径名。你的路径是/home/myappdemo/myappdemo.com/...,而你指定了www.myappdemo.com/...。你需要使用确切正确的文件路径。那是一个文件路径,不是URL路径... - Michael Berkowski
上面的例子不是将目录“iclean”重命名为“pics”(完全替换“pics”目录)吗?任务是将“iclean”移动到“pics”内部,所以应该是rename("myappdemo.com/VueGuides/services/iclean", "myappdemo.com/VueGuides/services/pics/iclean");吧? - mikkelbreum
@mwb 是的,本应该这样。在 Unix 命令行上,mv 命令会将其放置到已经存在的目标目录中。PHP 的 rename() 函数确实会替换掉它,但如果目标目录不为空,则会失败。 - Michael Berkowski

2

2
如果您担心SEO问题,我建议您在.htaccess文件中使用301重定向。具体操作如下:

将以下代码添加到您的.htaccess文件中:

RewriteRule ^/VueGuides/services/iclean  http://myappdemo.com/VueGuides/services/pics  [NS,R=301,L]

1
在我的情况下,我需要一种不同的解决方案,因为我正在将子文件夹内容移动到父文件夹中。由于路径相同,rename 在这种情况下无法工作。
(适用于基于 Linux 的机器): exec('mv '.$this->useFolder.'/'.$sub_folder.'/*'.' '.$this->useFolder); 这个使用内置的 mv 函数通过 exec 实现。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接