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 }
发表评论 取消回复