2017-06-14 1 views
0

を経由してファイルをダウンロードするためにPHPを強制私は現在、ユーザーのブラウザでファイルのダウンロードを作成しようとしているが、今のところそれを実現することができませんでした。ブラウザ

私はstackoverflow.com上の他の回答を見てきましたし、これまでの私の問題を解決したものを発見していません。次のように

私のプロセスは、次のとおりです。

私はヘッダーを設定、その後、ファイル名やファイルパスを作成します。

$date = new DateTime(); 
$currentDateTime = $date->format("Y-m-d H:i:s"); 
$filename = "{$name}_{$currentDateTime}.csv"; 
$filepath = $rootfull . "/{$filename}"; 

// Set headers 
header('Content-Type: application/csv'); 
header('Content-Disposition: attachment; filename="' . $filepath . '"'); 
header('Content-Length: ' . filesize($filepath)); 
header('Cache-Control: must-revalidate, post-check=0, pre-check=0'); 
header("Content-Transfer-Encoding: binary"); 
header('Pragma: no-cache'); 

私は、ファイルを作成し、それへの書き込みを開始:

// Write header 
fputcsv($output, $header); 
fputcsv($output, array()); // Empty line 

// Write column names 
$column_headers = array_keys(array_flip($columns)); 

foreach ($data as $row) 
{ 
    fputcsv($output, $row); 
} 

echo readfile($filepath); 
die(); 

ファイルは生成され、指定された場所に書き込まれます(この場合は/var/www/<project>/<filename>.csv)。何も起こっていないことをユーザに知らせることなく、ダウンロードダイアログは表示されません。誰もが自分のコードや私のプロセスで問題を発見できる場合

、それを指摘し、好ましくは、それを行うためのより良い/別の方法を提案してください、すべての任意のヘルプは、この時点では大歓迎です。

+1

あなたは*右のヘッダを送信する前に、ファイル*を作成しますか? – ficuscr

+2

ちょうど 'のReadFile($ file_url);あなたが戻ってユーザーにReadFile関数しようとする直前に、ヘッダを送信する前にファイルを作成する必要はありません@ficuscr'なし 'echo' – rtfm

+1

。 –

答えて

1

多分、ディスクにバッファリングするには、この書き込みのようなものを書いてしてもメリット(貧しいマンキャッシュ)の場合:

<?php 

header('Content-Type: text/csv; charset=utf-8'); 
header('Content-Disposition: attachment; filename="dump_' . date('Ymd') . '.csv"'); 
header("Pragma: no-cache"); 
header("Expires: 0"); 
$this->outputCSV($results); 
exit(); //-> 

public function outputCSV($data, $useKeysForHeaderRow = true) 
{ 
    if ($useKeysForHeaderRow) { 
     array_unshift($data, array_keys(reset($data))); 
    } 
    $outputBuffer = fopen("php://output", 'w'); 
    foreach($data as $v) { 
     fputcsv($outputBuffer, $v); 
    } 
    fclose($outputBuffer); 
} 
?> 
+0

返信いただきありがとうございますが、残念ながらこれは違いはありません。ファイルはまだブラウザにダウンロードされません。 – Skytiger

+0

奇妙な。それが使用中のコードからコピーされました。多分あなたのブラウザが問題です。 – ficuscr

+1

それは可能な限りですが、とにかく、ありがとうございます、うまくいけば、将来誰かを助ける:) – Skytiger