【问题标题】:Copying folder to other folder with PHP使用PHP将文件夹复制到其他文件夹
【发布时间】:2016-04-25 15:38:17
【问题描述】:

我正在尝试将文件夹与所有文件一起移动到其他文件夹。这两个文件夹都在根目录中。尝试了很多方法,总是没有结果。 这是我最近的尝试:

$source = "template/"
$dest = "projects/"
function copyr($source, $dest){
    if (is_link($source)) {
        return symlink(readlink($source), $dest);
    }

    if (is_file($source)) {
        return copy($source, $dest);
    }
    if (!is_dir($dest)) {
        mkdir($dest);
    }
    $dir = dir($source);
    while (false !== $entry = $dir->read()) {
        // Skip pointers
        if ($entry == '.' || $entry == '..') {
            continue;
        }
        copyr("$source/$entry", "$dest/$entry");
    }
    $dir->close();
    return true;
}

需要专业的眼光告诉我,我哪里弄错了吗?

编辑:

对不起,错误的标签。 问题是——什么都没有发生。没有任何东西被复制。没有错误信息。根本没有任何反应。 文件结构:

【问题讨论】:

  • 请不要在每个版本的 PHP 中标记问题。除非您遇到特定版本的问题,否则 PHP 标记就足够了,在这种情况下,只需使用一个版本标记。
  • 您是否有权创建目标文件夹?你有任何错误吗?怎么了?例如,仅创建目录但它们是空的并且没有创建文件。或者甚至可能没有创建根目标文件夹?
  • 您是否尝试过绝对路径而不是 sourcedest 的相对路径?你也有目标文件夹的权限吗?

标签: php


【解决方案1】:

我建议尝试执行以下操作

  1. 如何运行脚本?您是在浏览器中打开页面还是在命令行中运行脚本?如果您在浏览器中打开页面,这可能是权限、路径(相对而非绝对)和未显示但记录的错误的问题。

  2. 使用绝对文件夹路径而不是相对路径。例如/var/www/project/template

realpath() 函数应用于所有路径并检查(输出)结果。如果路径错误(文件夹不存在、分隔符错误等),您将从函数中得到空结果。

如果您在 Windows 上运行脚本,请确保使用 DIRECTORY_SEPARATOR 而不是 /。我无法检查/ 现在是否可以在 Windows 上运行,但这可能是个问题。例如

copyr($source.DIRECTORY_SEPARATOR.$entry", $dest.DIRECTORY_SEPARATOR.$entry);
  1. 检查警告和错误。如果您没有权限,您应该收到这样的警告

PHP 警告:mkdir():权限被拒绝

如果警告和错误被禁用,您可能需要启用它们。例如,尝试在名称上犯一个明显的错误,然后检查您是否收到任何错误消息。

  1. 尝试使用其中一个答案中的经过测试的解决方案。比如xcopy函数。

  2. 尝试逐步添加调试消息或在调试器中运行您的脚本。检查发生了什么,执行了什么等。您可以在任何运算符附近添加调试输出,例如(只是一个想法):

    echo '创建目录'.$name.' ...'; mkdir($name); echo (is_dir($name) ? 'created' : 'failed').PHP_EOL;

【讨论】:

  • 我正在使用 xampp,这些文件在我的 htdocs 中,所以我相信所有人都拥有所需的所有权利。
  • 先尝试非常简单的事情。例如,尝试创建一个文件夹并检查错误消息。让事情尽可能简单,你会发现哪里出了问题。我猜这可能是路径和权限的问题。
  • 你是在 Windows 还是 Unix 上运行 xampp?
  • 没有错误。似乎路径无效。 Xampp 在 Windows 上
  • 仅供参考,如果您使用 Windows,则需要不同的文件夹分隔符 :) 我使用的是 Linux,所以我忘记了很多次。
猜你喜欢
  • 1970-01-01
  • 2021-05-17
  • 2016-02-28
  • 2012-08-17
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2019-05-05
相关资源
最近更新 更多