public function climage()
{
$ids = Db::name('attachment')->where(['siteid' => 71])->column('id');
$res = Db::name('attachment_data')->where(['id' => ['IN', $ids]])->select();
// 目标根目录(当前项目中的 sxhkxy 文件夹)
$targetRootDir = '**********/';
// 源目录(原目录的路径)
$path = '*************/';
// 支持的图片扩展名
$imageTypes = ['jpg', 'jpeg', 'png', 'gif', 'bmp', 'webp'];
// 模拟的二维数组,包含 fileext 和 attachment
$data = [
['fileext' => 'jpg', 'attachment' => '202108/70fa593473ab7ca.jpg'],
['fileext' => 'jpg', 'attachment' => 'ueditor/image/202108/16303821465fca2e.jpg'],
['fileext' => 'doc', 'attachment' => 'ueditor/file/202110/16354670150e0539.doc'],
// 更多的数据...
];
$data=$res;
// 遍历二维数组,处理每个文件
foreach ($data as $item) {
// 获取扩展名和附件路径
$fileext = strtolower($item['fileext']);
$attachment = $item['attachment'];
// 判断文件扩展名是否是图片类型
if (in_array($fileext, $imageTypes)) {
// 构建原图片的完整路径
$sourceFile = $path . $attachment;
// 确认源文件是否存在
if (file_exists($sourceFile)) {
// 提取文件名和文件夹路径
$fileDir = dirname($attachment); // 获取文件夹路径
// var_export($fileDir);
// die;
$fileName = basename($attachment); // 获取文件名
// 在目标根目录下创建相应的文件夹路径
$targetDir = $targetRootDir . $fileDir;
// 如果目标文件夹不存在,创建它
if (!is_dir($targetDir)) {
mkdir($targetDir, 0777, true); // 递归创建目录
}
// 构建目标文件的完整路径
$targetFile = $targetDir . '/' . $fileName;
// 复制图片到目标目录
if (copy($sourceFile, $targetFile)) {
echo "文件 '{$attachment}' 成功复制到 '{$targetFile}'\n";
} else {
echo "文件 '{$attachment}' 复制失败!\n";
}
} else {
echo "源文件 '{$sourceFile}' 不存在!\n";
}
} else {
echo "文件 '{$attachment}' 不是有效的图片格式,跳过...\n";
}
}
die;
//备选方案,批量处理大数据的
set_time_limit(0); // 防止超时
$batchSize = 100; // 每批次处理100个文件
$data = [
// 示例数据
['fileext' => 'jpg', 'attachment' => 'ueditor/image/202108/1630382158169288.jpg'],
['fileext' => 'png', 'attachment' => 'ueditor/image/202109/1630482158169289.png'],
// 更多的数据...
];
$totalCount = count($data);
$batches = array_chunk($data, $batchSize); // 将数据分批次处理
foreach ($batches as $batch) {
foreach ($batch as $item) {
// 处理每个文件的逻辑
// ...
// 模拟复制操作
echo "处理文件:{$item['attachment']}\n";
}
// 每处理完一个批次后清理内存
ob_flush();
flush();
}
echo "处理完成!";
//end
}
发表评论 取消回复