Редактирование: я попытался изменить PHP_EOL на «\ n», попытался создать файл на сервере с помощью fputcsv, а затем загрузить его пользователю и попытался создать файл csv, используя этот подход:Создание файла csv для загрузки в moodle
$callback = function() use ($grades)
{
$FH = fopen('php://output', 'w');
$csv_headers = "Identifier,Email addres,Status,Grade,Scale,Grade can be changed,Last modified (submission),Last modified (grade),Feedback comments";
fputcsv($FH,explode(',',$csv_headers));
foreach ($grades as $grade) {
$moodle_stud_id = $grade->moodle_stud_id;
$points = $grade->grade;
$csv_line = "Participant ".$moodle_stud_id.",,,".$points.",,Yes,,,,";
fputcsv($FH,explode(',',$csv_line));
}
fclose($FH);
};
return Response::stream($callback, 200, $headers);
все отдать тот же самый результат, файл обыкновение быть принят в Moodle, если я не открыть его на своем компьютере и сохранить его, какие-то идеи?
конца редактировать
Я использую веб-приложение с помощью рамки Laravel создать CSV-файл, который пользователь может скачать и использовать этот файл CAV, чтобы загрузить данные в другую систему - быть конкретным это CSV файл, содержащий оценки учащихся, которые будут загружены в moodle.
Если я загружаю файл из своей системы. и попробуйте загрузить его в moodle, moodle не узнает оценки, и говорит, что нет оценок для обновления
Но. если я загружу файл из своей системы, откройте его, сохраните его и закройте, а затем попытайтесь загрузить в moodle - тогда все отлично работает
любые идеи? это путь я создаю файл CSV:
$headers = array(
'Content-Type' => 'csv',
'Content-Disposition' => 'attachment; filename="grades.csv"',
);
$output = implode(",", array('Identifier', 'Email address', 'Status','Grade','Scale','Grade can be changed','Last modified (submission)','Last modified (grade)','Feedback comments'));
$output .= PHP_EOL;
foreach ($grades as $grade) {
$output .= implode(",", array("Participant ".$moodle_stud_id,'','',$grade,'','Yes','','','','')); // append each row
$output .= PHP_EOL;
}
return Response::make($output, 200, $headers);
Первое, что приходит в голову, это конец символов линии. независимо от того, что вы открываете и сохраняете, может быть преобразование '\ n' в' \ r \ n' или что-то подобное. просто догадка. –
do u означает PHP_EOL? –
Просто мысль, но значения, возможно, должны быть заключены в кавычки. Возможно, попробуйте '$ output = '"'. Implode ('","', array (...)). '"';' Также установить кодировку в utf8 ''Content-Encoding' => 'UTF-8' ; ' –