美文网首页
thinkPHP框架下,在Linux服务器上进行文件复制操作

thinkPHP框架下,在Linux服务器上进行文件复制操作

作者: Noah___________ | 来源:发表于2020-01-20 11:27 被阅读0次

背景

由于之前系统设计的缺陷,导致用户在进行类似文件上传保存时,后台判定逻辑过于复杂,所以要进行这一类功能小范围的重构。

目标

保证原有功能的可用,以及优化服务端处理速度。

过程

  • 根据前端传过来的数据,从数据库查询到要复制的源文件路径(部分,需要拼接)

  • 拼接出完整路径

  • 确认目标目录是否存在,并进行相应操作

  • 复制文件

  • 校验文件是否复制成功

  • 修改文件权限

  • 存储新的数据到数据库


代码示例


-- snip --

// 导入DB类
use think\Db;

-- snip --

// 定义用户名(理论上应该是根据请求的用户,来查询用户名)
$username = "noah";

// 获取请求复制的文件ID
$id = input('post.id');

// 从数据库查询源文件位置
$fileInfo = Db::query("SELECT name, type, path FROM file_table WHERE id = $id");

// 定义源文件位置
$sourceFilePath = ROOT_PATH . $fileInfo[0]["path"];

// 定义存储部分路径字段
$savePath = "/upload/user/" . $username . "/file/";
// 定义目标目录
$targetFolderPath = ROOT_PATH . $savePath;
// 定义目标文件名称
$targetFileName = $fileInfo[0]["name"] . "_copy.";
// 定义目标文件
$targetFilePath = $targetFolderPath . $targetFileName . $fileInfo[0]["type"];

// 判断目标目录否存在
if (!file_exists($targetFolderPath)) {
    echo "开始新建目标目录...\n";

    // 新建目标目录
    if (mkdir($targetFolderPath, 0755, true)) {
        echo "目标文件夹新建成功!\n";
        // 复制文件主体到用户目录下
        if (copy($sourceFilePath, $targetFilePath)) {
            echo "源文件复制成功!\n";
            // 改变目标文件权限
            if (chmod($targetFilePath, 0755)) {
                echo "目标文件权限更新成功!\n";
            }
        } else {
            echo "源文件复制失败!\n";
        }
    } else {
        echo "目标文件夹新建失败!\n";
    }

} else {
    echo "目标目录存在!\n";
    // 复制文件主体到用户目录下
    if (copy($sourceFilePath, $targetFilePath)) {
        echo "复制源文件成功!\n";
        // 改变目标文件权限
        if (chmod($targetFilePath, 0755)) {
            echo "目标文件权限更新成功!\n";
        }
    } else {
        echo "源文件复制失败!\n";
    }
}

// 将复制结果插入到数据库中
Db::execute("INSERT INTO file_table(name, type, path) VALUES('" . $targetFileName . "', '" . $fileInfo[0]["type"] . "', '" . $savePath . "')");


*注:

  • 文章并没有使用thinkPHP的ORM,原因是一方面是用的比较少,另一方面是感觉用起来很奇怪;

  • ROOT_PATH 为thinkPHP的完整目录根路径;

  • 必须是PHP5+版本;

参考(必看):

感谢:

相关文章

  • thinkPHP框架下,在Linux服务器上进行文件复制操作

    背景 由于之前系统设计的缺陷,导致用户在进行类似文件上传保存时,后台判定逻辑过于复杂,所以要进行这一类功能小范围的...

  • Mac上终端连接Linux

    连接 复制文件 从本机向Linux服务器复制文件 让python运行在后台 在终端使用 ssh 连接到 Linux...

  • LINUX查看文件总行数和指定行

    问题说明 在Linux服务器运维或操作过程中时常需要统计文件行数和查看指定行 相关命令 查看文件指定行 查看文件总...

  • 每天一个Linux命令之rcp

    rcp命令使在两台Linux主机之间的文件复制操作更简单。通过适当的配置,在两台Linux主机之间复制文件而无需输...

  • ssh & scp远程登陆与复制文件

    在使用linux时,经常要在两个linux之间复制文件,或者远程登陆,在linux下该如何操作?下面是个简单...

  • 学习小组Day2笔记--Drku

    服务器基本操作 Linux初始学习就是自如的从一个文件夹到另一个文件夹,如何查看这个文件夹的内容,如何粘贴、复制 ...

  • 工作中常用linux命令

    工作中常用linux命令 一、linux常用操作: mkdir:创建文件夹cp:复制文件或目录mv:移动文件或目录...

  • 实用linux命令

    拷包到其他机器 linux下面将某个文件发送到另外一台linux机器 从远程服务器复制到本地服务器:从远程复制到本...

  • 文件操作

    一、文件操作-读 二、文件操作-写 三、复制文件 四、合并文件 合并文件-结果 五、readline按行读取文件、...

  • Linux命令_文件目录管理

    Linux中一切皆是文件,文件有各种操作:创建、修改、复制、剪切、重命名、删除等。Linux系统中常用的与文件相关...

网友评论

      本文标题:thinkPHP框架下,在Linux服务器上进行文件复制操作

      本文链接:https://www.haomeiwen.com/subject/rphjzctx.html