<?php namespace nur\b\io; use nur\base; /** * Class FileWriter: écriture dans un fichier ou un flux */ class FileWriter extends StreamWriter { const DEFAULT_MODE = "a+b"; /** @throws IOException */ function __construct($output, string $mode=self::DEFAULT_MODE) { $close = false; $file = null; if (base::z($output)) { $fd = STDOUT; } elseif (is_resource($output)) { $fd = $output; } elseif (is_string($output)) { $fd = IOException::ensure_not_false(@fopen($output, $mode), "open"); $close = true; $file = $output; } parent::__construct($fd, $close); $this->file = $file; } protected $file; function putContents(string $contents): void { if ($this->file === null) { parent::putContents($contents); } else { try { file_put_contents($this->file, $contents); } finally { $this->close(); } } } }