30 lines
854 B
PHP
30 lines
854 B
PHP
<?php
|
|
namespace nulib\file\base;
|
|
|
|
/**
|
|
* Class TempStream: un flux qui peut être lu ou écrit, et qui reste en mémoire,
|
|
* jusqu'à ce que la taille des données atteint {@link self::MAX_MEMORY} et à
|
|
* ce moment-là un fichier temporaire est automatiquement créé.
|
|
*/
|
|
class TempStream extends Stream {
|
|
const MAX_MEMORY = 2 * 1024 * 1024;
|
|
|
|
function __construct(?int $maxMemory=null, bool $throwOnError=true) {
|
|
if ($maxMemory === null) $maxMemory = static::MAX_MEMORY;
|
|
$this->maxMemory = $maxMemory;
|
|
parent::__construct($this->tempFd(), true, $throwOnError);
|
|
}
|
|
|
|
/** @var int */
|
|
protected $maxMemory;
|
|
|
|
protected function tempFd() {
|
|
return fopen("php://temp/maxmemory:$this->maxMemory", "w+b");
|
|
}
|
|
|
|
function getResource() {
|
|
if ($this->fd === null) $this->fd = $this->tempFd();
|
|
return parent::getResource();
|
|
}
|
|
}
|