stream Download에서 Laravel6CSV에서 다운로드한 샘플

8406 단어 PHPLaravel
streamDownload를 사용하여 CSV를 다운로드하는 예입니다.컨트롤러만 쓰는 처리.
(간단한 샘플이라 많이 빠졌어요.)
controller
public function csvDownload()
{
    return response()->streamDownload(function () {
        $handle = fopen('php://output', 'w');
        $list = [[1,'hoge'], [2,'piyo'], [3, 'fuga']];
        foreach ($list as $row) {
            fputcsv($handle, $row);
        }
        fclose($handle);
    }, 'sample.csv');
}
공식 문서 = > https://laravel.com/docs/6.x/responses#file-downloads
다음 CSV를 다운로드하십시오.

끝.

보충


아래의 전화도 했지만 결과적으로 fpassthru로 output buffer에 건네주었기 때문에 아무런 변화가 없는 것 같습니다.하지만 아직 잘 모르겠어요.php://outptphp://memoryphp://temp의 차이를 전혀 모른다.공부가 필요해!
controller
return response()->streamDownload(function () {
    $handle = fopen('php://temp', 'w'); // temp に変更
    $list = [[1,'hoge'], [2,'piyo'], [3, 'fuga']];
    foreach ($list as $row) {
        fputcsv($handle, $row);
    }
    rewind($handle); // 追記
    fpassthru($handle); // 追記
    fclose($handle);
}, 'sample.csv');
cf. https://stackoverflow.com/questions/5946526/having-problems-reading-writing-the-php-temp-stream

보충


내용 유형은text/html입니다.하고 싶은 마음이 있어요.

보충


Windows라면 일본어가 엉망입니다.
var_dump
$handle = fopen('php://memory', 'w');
$list = [[1,'hoge'], [2,'piyo'], [3, 'fuga']];
foreach ($list as $row) {
    fputcsv($handle, $row);
}
rewind($handle);
// fpassthru($handle); // これをした後だと、stream_get_contents に入ってこない。
var_dump(stream_get_contents($handle));
fclose($handle);
이런 느낌으로 디버깅을 해요.문자 코드의 버전은 다음과 같습니다.
발췌하다
return response()->streamDownload(function () use ($header, $list) {
    $handle = fopen('php://temp', 'w');
    fputcsv($handle, $header);
    foreach ($list as $row) {
        fputcsv($handle, $row);
    }
    rewind($handle);
    echo mb_convert_encoding(stream_get_contents($handle), 'SJIS-win', 'UTF-8');
    fclose($handle);
}, $name);

좋은 웹페이지 즐겨찾기