37 lines
		
	
	
		
			816 B
		
	
	
	
		
			PHP
		
	
	
	
	
	
			
		
		
	
	
			37 lines
		
	
	
		
			816 B
		
	
	
	
		
			PHP
		
	
	
	
	
	
| <?php
 | |
| namespace nur\b\io;
 | |
| 
 | |
| use nur\base;
 | |
| 
 | |
| class FileReader extends StreamReader {
 | |
|   const DEFAULT_MODE = "rb";
 | |
| 
 | |
|   /** @throws IOException */
 | |
|   function __construct($input, string $mode=self::DEFAULT_MODE) {
 | |
|     $close = false;
 | |
|     $file = null;
 | |
|     if (base::z($input)) {
 | |
|       $fd = STDIN;
 | |
|     } elseif (is_resource($input)) {
 | |
|       $fd = $input;
 | |
|     } elseif (is_string($input)) {
 | |
|       $fd = IOException::ensure_not_false(@fopen($input, $mode), "open");
 | |
|       $close = true;
 | |
|       $file = $input;
 | |
|     }
 | |
|     parent::__construct($fd, $close);
 | |
|     $this->file = $file;
 | |
|   }
 | |
| 
 | |
|   protected $file;
 | |
| 
 | |
|   function getContents(bool $close=true): string {
 | |
|     if ($this->file === null) return parent::getContents();
 | |
|     try {
 | |
|       return file_get_contents($this->file);
 | |
|     } finally {
 | |
|       $this->close($close);
 | |
|     }
 | |
|   }
 | |
| }
 |