You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.02 16:50:19