Muzes si vytvorit stream a postupne zapisovat do souboru treba po 20 MB.
$maxlength = 20 * 1000 * 1000; // 20 MB?
$offset = 0;
// otevrit si stream pro zapis do souboru
// otevrit si stream pro cteni ze souboru
if ($stream = fopen('http://www.example.com', 'r')) {
// ziskat 20MB z celkove velikosti souboru
$content = stream_get_contents($stream, $maxlength, $offset);
// TODO: zapsat do streamu zapisovaneho souboru
// TODO: flush streamu pro zapis, aby se uvolnila pamet
// TODO: zkontrolovat, jestli jeste zbyvaji dalsi data
// jestli $content.length != $maxlenght, tak uz tam dalsi content neni
fclose($stream);
}
PS: V PHP nedalam a nemam cas udelat fungujici priklad, takze prilozil alespon navod jak toho docilit. Nikdo jiny nevidel problem v tom, ze se do pameti nacita cely soubor...
https://www.php.net/manual/en/function.file-get-contents.php