如何使用 PHP 复制文件

快速解决方案

我们可以使用PHP的功能将文件从源路径快速复制到目标路径。copy()

假设我们有一个,并希望复制该文件并将其重命名为:source_file.txtdest_file.txt

copy('/source/source_file.txt', '/dest/dest_file.txt');

该文件将被复制并重命名为 。source_file.txtdest_file.txt

在某些情况下,命令在Windows操作系统上会失败,或者由于安全目的在某些主机上被禁用。我们可以使用其他方法复制使用PHP的文件,这将在下面描述。copy()

如何使用 PHP 复制文件

本指南中提到的使用PHP复制文件的方法有三种,即流行的函数,使用,以及逐个执行命令。copy() fwrite() shell_exec()

使用 copy() 函数复制 PHP 中的文件

这是使用PHP复制文件的最流行的方法。该函数将返回一个值,指示复制过程是否成功:boolean

// $copyResult 返回true还是false
$copyResult = copy('/source/source_file.txt', '/dest/dest_file.txt');

确保目标文件夹存在

请确保目标文件夹首先存在,否则复制命令将失败。我们可以首先使用函数以递归方式创建目标文件夹,以避免不存在目标路径:mkdir()

// 目标文件夹和文件
$destFolder = '/dest/folder/';
$destFile = $destFolder . 'dest_file.txt';

// 首先创建目标文件夹。Chmod权限可以根据您的情况进行调整。
mkdir(dirname($destFolder), 0777, true);

// 复制
$copyResult = copy('/source/source_file.txt', $destFile);

使用 fwrite() 函数复制 PHP 中的文件

出于安全目的,一些虚拟主机禁用了功能。在 Windows 操作系统中,该函数有时无法处理大文件。这时,PHP 的文件流功能就派上了用场。copy()

以下是使用 PHP 文件流功能复制文件的完整脚本。这包括许多函数 ,如 、,用于处理文件流和读取文件内容。fopen() fwrite() fclose() file_get_contents()

// 定义源文件和目标文件
$sourceFile = '/source/source_file.txt';
$destFile = '/dest/dest_file.txt';

// 获取要使用流打开的文件内容
// ** 注意:如果file_get_contents()被禁用,请参阅下面的注意事项
$fileContent = @file_get_contents($sourceFile);

// 将目标文件设置为带写入模式的handlen流
$destFileStream = fopen($destFile, 'w');

// 将源文件内容写入目标文件路径
fwrite($destFileStream, $fileContent);

// 写入后关闭流
fclose($destFileStream);

注意:由于安全原因,许多虚拟主机已被禁用。在这种情况下,我们可以使用 和 函数来获取文件内容:file_get_contents() fopen() stream_get_contents()

// 以读取模式打开源代码文件进行读取
$sourceFileStream = fopen($sourceFile, 'r');

// 从流中获取文件内容并关闭流
$fileContent = stream_get_contents($sourceFileStream);
fclose($sourceFileStream);

使用shell_exec()函数复制PHP中的文件

使用PHP复制文件和目录的另一种不受欢迎的方法是使用shell命令。使用此方法将使PHP在shell中执行命令以复制文件和目录。

例如,在 Linux shell 中,以下命令将用于递归复制文件和目录:

cp -r -a /source_dir/* /dest_dir/*

...这将以递归方式将所有文件和目录从 复制到。/source_dir/ /dest_dir/

我们可以使用 PHP 通过 shell 命令执行相同的复制作业:

$copyJob = shell_exec("cp -r -a /source_dir/* /dest_dir/*");

重要提示:虽然此方法有效,但启用功能会带来潜在的安全风险。实际上,大多数虚拟主机都禁用了此功能,并且不能与PHP一起使用。shell_exec()

复制远程 URL/文件

该函数还可以将远程文件复制为 URL:copy()

copy('http://example.com/file.txt', './file.txt');

递归复制文件和目录

以下脚本将以递归方式复制文件和目录,并在需要时创建目标目录。

function recursive_copy($source, $dest) {

    // 使用目录处理程序的开放源码目录
    $sourceDir = opendir($source);

    // 在目标上创建目录,忽略错误消息
    @mkdir($dest);

    // 使用readdir()循环遍历源目录文件
    while(( $file = readdir($sourceDir)) ) {

        // 如果$file实际上是一个文件(不是当前/以前的目录),则继续
        if (( $file != '.' ) && ( $file != '..' )) {

            // 附加$source和$file,查看它是否是一个目录
            if ( is_dir($source . '/' . $file) ) {
                
                // 它是一个目录:再次循环该函数
                recursive_copy($source .'/'. $file, $dest .'/'. $file);
            }
            else {
                // 它是一个文件:继续复制该文件
                copy($source .'/'. $file, $dest .'/'. $file);
            }
        }
    }
    // 关闭目录 handle
    closedir($dir);
}
文章链接:https://www.haah.net/archives/8380.html
文章标题:如何使用 PHP 复制文件
文章版权:辉哥博客 (https://www.haah.net) 所发布的内容,部分为原创文章,转载请注明来源,网络转载文章如有侵权请联系我们!
本文最后更新发布于2022年09月05日 18时57分41秒,某些文章具有时效性,若有错误或已失效,请在下方留言或联系辉哥:m@haah.net

给TA买糖
共{{data.count}}人
人已买糖
0 条回复 A文章作者 M管理员
每日一言:你为了你的正义,我为了我的正义。
    暂无讨论,说说你的看法吧
日夜切换
个人中心
购物车
优惠劵
今日签到
有新私信 私信列表
搜索
我是底线可爱胖!冲鸭~