Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/php/285.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 - Fatal编程技术网

如何使用PHP批量移动文件和目录

如何使用PHP批量移动文件和目录,php,Php,我有一个有很多文件和目录的网站。目录有好几个层次。问题是它们在错误的目录中。它们位于/www/upload/site/中,所有内容都应移动到/www/。是否有一个简短的脚本将所有内容向上移动到两个目录 谢谢。您不需要脚本。获得一个好的ftp程序,比如or(需要firefox),你只需选择all,然后将www/upload/中的所有文件夹和文件拖到www/upload,ftp程序就会为你移动它们。正如其他回答者所说,PHP并不是最优雅的解决方案,只需下载一个FTP程序就可以轻松地移动文件。但是,如

我有一个有很多文件和目录的网站。目录有好几个层次。问题是它们在错误的目录中。它们位于
/www/upload/site/
中,所有内容都应移动到
/www/
。是否有一个简短的脚本将所有内容向上移动到两个目录


谢谢。

您不需要脚本。获得一个好的ftp程序,比如or(需要firefox),你只需选择all,然后将
www/upload/
中的所有文件夹和文件拖到
www/upload
,ftp程序就会为你移动它们。

正如其他回答者所说,PHP并不是最优雅的解决方案,只需下载一个FTP程序就可以轻松地移动文件。但是,如果您确实希望使用PHP实现此功能,您可以编写如下代码:

$dir=opendir('/www/upload/site/');

while ($file = readdir($dir)) {
    if ($file == '.' || $file == '..') continue; // skip references to self

    rename('/www/upload/site/'.$file, '/www/'.$file);
}

closedir($dir);
<?php
    exec('mv /www/upload/site/* /www');
?>
这一过程效率低下,因为使用or等更简单的方法在您的案例中不起作用。重命名将要求您“重命名为”的目录为空,而当您从其中移动时,它不是空的,copy无法复制完整的目录。因此,我们只剩下流程或循环遍历每个文件,并在每个项目上使用PHP的重命名函数手动将其移动到新位置


因此,虽然这个过程肯定不是PHP所必需的,但完全有可能做到这一点,而且掌握一些诀窍总是很有用的。有关使用文件/目录的更多信息,值得一读。

我不知道服务器是如何设置的,但这可能不起作用,因为运行php脚本的用户可能没有权限移动您上载的文件(除非它们也是使用php脚本上载的…)

您当然可以尝试以下方法:

$dir=opendir('/www/upload/site/');

while ($file = readdir($dir)) {
    if ($file == '.' || $file == '..') continue; // skip references to self

    rename('/www/upload/site/'.$file, '/www/'.$file);
}

closedir($dir);
<?php
    exec('mv /www/upload/site/* /www');
?>


但是我会非常小心的。

它必须是一个PHP脚本吗?你的FTP客户端应该能够做到这一点,或者你可以用一个shell来实现。问题是该站点位于Godaddy上,由于某些网络问题,我无法直接访问控制面板,也不能使用FTP。我唯一的访问权限是通过VPN,它不允许我上传文件。事实上,我在一个朋友的帮助下把这些文件放在那里,但它们最后放错了目录。我可以使用控制面板的
新文件
制作一个小脚本来运行VPN。一提到GoDaddy这个名字我就恶心。FTP选项不可用,正如我在上面的评论中解释的那样。谢谢,但我认为这在碎片托管上不起作用。有很多共享托管解决方案,您可以访问shell,但我不知道戈达迪。你试过了吗?一个匿名用户试图在编辑中发表以下评论:为我工作,但重命名路径中任何位置都有空格的目录。