浮叶蓝空的博客
分享学习心得,记录学习笔记
文章:
84
访问:
526036
登录
关于
首页
今天是:
2025年09月09日 星期二
类别
PHP(39)
其他笔记(20)
Java(1)
C++(17)
mysql(2)
JavaScript(4)
近期文章
Linux下Cmake引用第三方静态库示例
Linux下使用Cmake构建静态库示例
Ubuntu设置自动挂载硬盘,挂载U盘
压力测试工具Apache JMeter基本使用
使用PHP脚本借助FFmpeg一键合并视频
Shell中的>、1>、2>、2>&1、&>详解
PHP开启多进程实现异步非阻塞并行执行任务
博主推荐
PHP实现文件下载接口
Qt读写注册表,C++读写注册表
PHP动态修改配置文件,存储为文件
MySql常用语法
Powershell远程连接
PHP从字符串中获取需要的内容部分
封装PHP的HTTP请求
用PHP将目录中的全部文件并拷贝至指定位置
fuyelk
2021年10月07日
5018
## 记一个PHP写的提取文件的笔记,以便以后直接复制使用 ### 实现功能: 命令行形式调用该PHP文件,给一个原文件目录和目标目录,自动将原目录内全部文件拷贝到指定位置 ## 完整代码如下 ```php <?php /** * 将指定目录内全部文件拷贝至另一个位置 * 参数: * --form 原目录 * --to 目标位置 */ /** * 解析命令行参数 * @return array ['file'=>'example.php','param1'=>'value1'...] * @author fuyelk <fuyelk@fuyelk.com> * @date 2021/10/07 13:21 */ function parse_argv() { global $argv; $ret['file'] = $argv[0]; $params = []; while (next($argv)) { // 获取当前指令 $item = current($argv); // 当前指令为参数名 if (preg_match("/^-{1}|-{2}/", $item)) { $name = (0 === strpos($item, '--')) ? $name = mb_substr($item, 2) : $name = mb_substr($item, 1); // 没有下一个指令,则当前参数值为空字符 if (false === next($argv)) { $params[$name] = ''; break; } // 下一个指令为参数名,则当前参数值为空字符 if (preg_match("/^-{1}|-{2}/", current($argv))) { $params[$name] = ''; prev($argv); continue; } // 下个指令为参数值,则取值 $params[$name] = current($argv); continue; } $params[] = $item; } return $ret + $params; } /** * 递归获取指定路径下的所有文件路径 * @param string $path 绝对路径 * @param int $removeBaseDirLen [移除初始路径长度] * @return array * @author fuyelk <fuyelk@fuyelk.com> * @date 2021/06/28 19:51 */ function show_files_path($path = '', $removeBaseDirLen = -1) { $list = []; if (-1 == $removeBaseDirLen) { $removeBaseDirLen = mb_strlen($path); } if (is_dir($path) && ($handle = opendir($path))) { if (DIRECTORY_SEPARATOR !== $path{-1}) { $path .= DIRECTORY_SEPARATOR; } while (false !== ($file = readdir($handle))) { if ('.' !== $file && '..' !== $file) { if (is_dir($path . $file)) { $list = array_merge($list, show_files_path($path . $file, $removeBaseDirLen)); } else { $list[] = str_replace('\\', '/', mb_substr($path, $removeBaseDirLen) . $file); } } } closedir($handle); } return $list; } // 解析参数 $action = parse_argv(); if (!isset($action['from']) || !isset($action['to']) || isset($action['help']) || isset($action['h'])) { echo "Options:\n"; echo " --from 来源 \n"; echo " --to 目标 \n"; exit; } // 获取拷贝来源 $from = str_replace('\\', '/', $action['from']); if (mb_strlen($from) > 1 && '/' == mb_substr($from, -1)) { $from = mb_substr($from, 0, -1); // 移除最后面的'/' } // 获取拷贝目标 $to = str_replace('\\', '/', $action['to']); if (mb_strlen($to) > 1 && '/' == mb_substr($to, -1)) { $to = mb_substr($to, 0, -1); // 移除最后面的'/' } if (!is_dir($to)) mkdir($to,'0755',true); // 分析源文件并执行拷贝 $files = show_files_path($from, 0); foreach ($files as $item) { $file_name = str_replace([$from . '/', '/'], ['', '_'], $item); copy($item, $to . '/' . $file_name); } print_r([ 'from' => $from, 'to' => $to, 'files' => $files ]); ``` ## 使用示例: ```shell php .\file.php --from "D:\test\学习资料" --to "D:\allfiles" ``` ## 运行结果 [](https://www.milinger.com/a246.html "PHP拷贝文件运行结果") [](https://www.milinger.com/a246.html "文件提取结果")
上一篇:
为WSL2做端口映射
下一篇:
PHP开启多进程实现异步非阻塞并行执行任务
0人点赞
登录后评论
友情链接
doywb
2018-2025 Copyright© 米灵尔 浮叶蓝空
豫ICP备15007436号-1
豫公网安备 41152302000146号