Keyboard shortcuts

Press or to navigate between chapters

Press S or / to search in the book

Press ? to show this help

Press Esc to hide this help

php://memory And Maxmemory

By Alexandre Daubois

<?php

// build something entirely in memory...
$fp = fopen('php://memory', 'r+');
fputcsv($fp, ['name', 'email', 'role']);
fputcsv($fp, ['Alex', 'alex@example.com', 'CTO']);
fputcsv($fp, ['Jane', 'jane@example.com', 'Dev']);

rewind($fp);
$csv = stream_get_contents($fp);
fclose($fp);

// send as download
header('Content-Type: text/csv');
echo $csv;

// php://temp, same but spills to disk over 2MB... or more!
$fp = fopen('php://temp/maxmemory:8388608', 'r+');
// 8MB in RAM, then auto-swaps to a temp file

// no gc, no unlink(), no /tmp pollution
// the stream disappears when $fp is closed

php://memory is a stream that lives in RAM.

php://temp starts in RAM, spills to disk after 2MB (configurable, see below!).

No tmpfile(). No temp directory. No cleanup.

Perfect for building files in memory before sending in PHP!

Did you know the maxmemory trick?

See Also

PHP Features

Last updated: 10 September 2026