在 PHP 中复制目录,使用系统与不简单的递归 PHP 代码


Copy directories in PHP, using system vs not simple recursive PHP code

我看到在PHP中没有内置的复制目录的方法。我看到使用 php 将目录的全部内容复制到另一个目录,但我找不到system('cp -R src dest')的任何问题。

使用上述system调用是否有问题?我认为唯一的"问题"是它会在几分之一秒内创建一个额外的进程。右?

我要澄清一下,在这种情况下,我不开发一个必须独立于平台的现成产品,也不是srcdest来自用户输入,它们是 100% 干净的。我看到的唯一问题(如下所述)是错误处理。

  • 假设 src 和 dest 不是硬编码的,你必须小心地针对 shell 注入转义输入
  • 这可能不跨平台兼容
  • 错误处理将变得更加困难,因为您可能必须解析 shell 输出/stderr

编辑:

当假设 src 和 dest 是干净的并且跨平台兼容性不会成为问题时,那么仍然存在的唯一问题是错误处理 - php copy() 将在失败时显式返回 false(例如不正确的文件系统权限),并且可以转换为自定义递归函数。

Mayble Laravel文件系统将为您提供帮助 - 它被广泛使用,应该经过良好的测试:https://github.com/laravel/framework/blob/master/src/Illuminate/Filesystem/Filesystem.php

要了解如何获取 shell 命令的 stderr,请参阅:https://stackoverflow.com/a/2320835/294696