chcę wysyłać do użytkownika plik który jest generowany podczas jego pobierania. Już tłumaczę o co chodzi z bazy danych są pobierane informację zazwyczaj około 100mb i wysyłane do użytkownika. Żeby nie generować masy plików chcę to wysyłać w locie próbowałem tak:
Kod
require('varibleStream.php');
stream_wrapper_register("test", "MyStream") or die("Failed to register protocol");
$fp = fopen("test://MyTestVariableInMemory", "r");
header("Pragma: no-cache");
header("Content-Type: application/force-download");
header("Expires: 0");
header("Content-Length: 104857600");
header("Content-Transfer-Encoding: binary");
@header('Content-Disposition: attachment; filename="test.txt"');
fpassthru($fp);
fclose($fp);
stream_wrapper_register("test", "MyStream") or die("Failed to register protocol");
$fp = fopen("test://MyTestVariableInMemory", "r");
header("Pragma: no-cache");
header("Content-Type: application/force-download");
header("Expires: 0");
header("Content-Length: 104857600");
header("Content-Transfer-Encoding: binary");
@header('Content-Disposition: attachment; filename="test.txt"');
fpassthru($fp);
fclose($fp);
ale problem jest taki, że skrypt czeka do wykonania funkcji:
Kod
public function stream_read($count) {
//....
while($r = mysql_fetch_array($q)) {
echo $r[0];
}
//...
}
//....
while($r = mysql_fetch_array($q)) {
echo $r[0];
}
//...
}
Nie wiem czy ogólnie dobrze kombinuję. Chodzi mi o to, że to co zostało pobrane częściowo z bazy ma być od razu wysyłane do użytkownika i kasowane z pamięci (podczas pobierania całego pliku). Nie proszę o gotowy skrypt, a jakieś wskazówki czym się zainteresować, żeby zrobić coś takiego.