Laravel中无法合并head.arff与data.csv生成unseen.arff求助
问题原因及解决方案
你的代码核心问题是Process类的命令参数格式错误:Process构造函数需要传入命令与参数的拆分数组,而非将整个命令拼接成单个字符串传入。系统会把你传入的完整字符串当作一个独立命令去查找,自然找不到对应指令,导致执行失败。
修正方案(分系统处理)
1. Windows系统下的修正
Windows的copy命令需用/b参数处理二进制文件(避免ARFF文件格式损坏),同时拆分命令与参数:
$path = public_path('doc/'); $fp = fopen($path.'data.csv', 'w'); fputcsv($fp, $data); fclose($fp); // 拆分命令与参数,确保Process正确解析 $process = new Process([ 'cmd.exe', '/c', 'copy', '/b', $path.'head.arff', '+', $path.'data.csv', $path.'unseen.arff' ]); $process->run(); if (!$process->isSuccessful()) { throw new ProcessFailedException($process); } echo $process->getOutput();
2. Linux/macOS系统下的修正
这类系统使用cat命令合并文件,同样拆分参数:
$path = public_path('doc/'); $fp = fopen($path.'data.csv', 'w'); fputcsv($fp, $data); fclose($fp); $process = new Process([ 'cat', $path.'head.arff', $path.'data.csv' ]); // 将合并结果直接写入目标文件 $process->setOutput($path.'unseen.arff'); $process->run(); if (!$process->isSuccessful()) { throw new ProcessFailedException($process); } echo $process->getOutput();
额外检查项
- 确认
public_path('doc/')目录存在且具备读写权限,可提前用File::ensureDirectoryExists($path)创建目录 - 检查
head.arff源文件是否存在,避免因文件缺失导致合并失败
内容的提问来源于stack exchange,提问作者y.pornwisa
相关产品推荐
相关产品推荐

