Hoa central
Generic.php
Go to the documentation of this file.
1 <?php
2 
37 namespace Hoa\File;
38 
39 use Hoa\Stream;
40 
49 abstract class Generic
50  extends Stream
51  implements Stream\IStream\Pathable,
54 {
60  protected $_mode = null;
61 
62 
63 
69  public function getBasename()
70  {
71  return basename($this->getStreamName());
72  }
73 
79  public function getDirname()
80  {
81  return dirname($this->getStreamName());
82  }
83 
89  public function getSize()
90  {
91  if (false === $this->getStatistic()) {
92  return false;
93  }
94 
95  return filesize($this->getStreamName());
96  }
97 
103  public function getStatistic()
104  {
105  return fstat($this->getStream());
106  }
107 
113  public function getATime()
114  {
115  return fileatime($this->getStreamName());
116  }
117 
123  public function getCTime()
124  {
125  return filectime($this->getStreamName());
126  }
127 
133  public function getMTime()
134  {
135  return filemtime($this->getStreamName());
136  }
137 
143  public function getGroup()
144  {
145  return filegroup($this->getStreamName());
146  }
147 
153  public function getOwner()
154  {
155  return fileowner($this->getStreamName());
156  }
157 
163  public function getPermissions()
164  {
165  return fileperms($this->getStreamName());
166  }
167 
182  public function getReadablePermissions()
183  {
184  $p = $this->getPermissions();
185 
186  if (($p & 0xC000) == 0xC000) {
187  $out = 's';
188  } elseif (($p & 0xA000) == 0xA000) {
189  $out = 'l';
190  } elseif (($p & 0x8000) == 0x8000) {
191  $out = '-';
192  } elseif (($p & 0x6000) == 0x6000) {
193  $out = 'b';
194  } elseif (($p & 0x4000) == 0x4000) {
195  $out = 'd';
196  } elseif (($p & 0x2000) == 0x2000) {
197  $out = 'c';
198  } elseif (($p & 0x1000) == 0x1000) {
199  $out = 'p';
200  } else {
201  $out = 'u';
202  }
203 
204  $out .=
205  (($p & 0x0100) ? 'r' : '-') .
206  (($p & 0x0080) ? 'w' : '-') .
207  (($p & 0x0040) ?
208  (($p & 0x0800) ? 's' : 'x') :
209  (($p & 0x0800) ? 'S' : '-')) .
210  (($p & 0x0020) ? 'r' : '-') .
211  (($p & 0x0010) ? 'w' : '-') .
212  (($p & 0x0008) ?
213  (($p & 0x0400) ? 's' : 'x') :
214  (($p & 0x0400) ? 'S' : '-')) .
215  (($p & 0x0004) ? 'r' : '-') .
216  (($p & 0x0002) ? 'w' : '-') .
217  (($p & 0x0001) ?
218  (($p & 0x0200) ? 't' : 'x') :
219  (($p & 0x0200) ? 'T' : '-'));
220 
221  return $out;
222  }
223 
229  public function isReadable()
230  {
231  return is_readable($this->getStreamName());
232  }
233 
239  public function isWritable()
240  {
241  return is_writable($this->getStreamName());
242  }
243 
249  public function isExecutable()
250  {
251  return is_executable($this->getStreamName());
252  }
253 
259  public function clearStatisticCache()
260  {
261  clearstatcache(true, $this->getStreamName());
262 
263  return;
264  }
265 
271  public static function clearAllStatisticCaches()
272  {
273  clearstatcache();
274 
275  return;
276  }
277 
286  public function touch($time = -1, $atime = -1)
287  {
288  if ($time == -1) {
289  $time = time();
290  }
291 
292  if ($atime == -1) {
293  $atime = $time;
294  }
295 
296  return touch($this->getStreamName(), $time, $atime);
297  }
298 
309  public function copy($to, $force = Stream\IStream\Touchable::DO_NOT_OVERWRITE)
310  {
311  $from = $this->getStreamName();
312 
313  if ($force === Stream\IStream\Touchable::DO_NOT_OVERWRITE &&
314  true === file_exists($to)) {
315  return true;
316  }
317 
318  if (null === $this->getStreamContext()) {
319  return @copy($from, $to);
320  }
321 
322  return @copy($from, $to, $this->getStreamContext()->getContext());
323  }
324 
338  public function move(
339  $name,
340  $force = Stream\IStream\Touchable::DO_NOT_OVERWRITE,
341  $mkdir = Stream\IStream\Touchable::DO_NOT_MAKE_DIRECTORY
342  ) {
343  $from = $this->getStreamName();
344 
345  if ($force === Stream\IStream\Touchable::DO_NOT_OVERWRITE &&
346  true === file_exists($name)) {
347  return false;
348  }
349 
350  if (Stream\IStream\Touchable::MAKE_DIRECTORY === $mkdir) {
352  dirname($name),
354  );
355  }
356 
357  if (null === $this->getStreamContext()) {
358  return @rename($from, $name);
359  }
360 
361  return @rename($from, $name, $this->getStreamContext()->getContext());
362  }
363 
369  public function delete()
370  {
371  if (null === $this->getStreamContext()) {
372  return @unlink($this->getStreamName());
373  }
374 
375  return @unlink(
376  $this->getStreamName(),
377  $this->getStreamContext()->getContext()
378  );
379  }
380 
387  public function changeGroup($group)
388  {
389  return chgrp($this->getStreamName(), $group);
390  }
391 
398  public function changeMode($mode)
399  {
400  return chmod($this->getStreamName(), $mode);
401  }
402 
409  public function changeOwner($user)
410  {
411  return chown($this->getStreamName(), $user);
412  }
413 
421  public static function umask($umask = null)
422  {
423  if (null === $umask) {
424  return umask();
425  }
426 
427  return umask($umask);
428  }
429 
435  public function isFile()
436  {
437  return is_file($this->getStreamName());
438  }
439 
445  public function isLink()
446  {
447  return is_link($this->getStreamName());
448  }
449 
455  public function isDirectory()
456  {
457  return is_dir($this->getStreamName());
458  }
459 
465  public function isSocket()
466  {
467  return filetype($this->getStreamName()) == 'socket';
468  }
469 
475  public function isFIFOPipe()
476  {
477  return filetype($this->getStreamName()) == 'fifo';
478  }
479 
485  public function isCharacterSpecial()
486  {
487  return filetype($this->getStreamName()) == 'char';
488  }
489 
495  public function isBlockSpecial()
496  {
497  return filetype($this->getStreamName()) == 'block';
498  }
499 
505  public function isUnknown()
506  {
507  return filetype($this->getStreamName()) == 'unknown';
508  }
509 
517  protected function setMode($mode)
518  {
519  $old = $this->_mode;
520  $this->_mode = $mode;
521 
522  return $old;
523  }
524 
530  public function getMode()
531  {
532  return $this->_mode;
533  }
534 
540  public function getINode()
541  {
542  return fileinode($this->getStreamName());
543  }
544 
550  public static function isCaseSensitive()
551  {
552  return !(
553  file_exists(mb_strtolower(__FILE__)) &&
554  file_exists(mb_strtoupper(__FILE__))
555  );
556  }
557 
563  public function getRealPath()
564  {
565  if (false === $out = realpath($this->getStreamName())) {
566  return $this->getStreamName();
567  }
568 
569  return $out;
570  }
571 
577  public function getExtension()
578  {
579  return pathinfo(
580  $this->getStreamName(),
581  PATHINFO_EXTENSION
582  );
583  }
584 
590  public function getFilename()
591  {
592  $file = basename($this->getStreamName());
593 
594  if (defined('PATHINFO_FILENAME')) {
595  return pathinfo($file, PATHINFO_FILENAME);
596  }
597 
598  if (strstr($file, '.')) {
599  return substr($file, 0, strrpos($file, '.'));
600  }
601 
602  return $file;
603  }
604 }
copy($to, $force=Stream\IStream\Touchable::DO_NOT_OVERWRITE)
Definition: Generic.php:309
changeMode($mode)
Definition: Generic.php:398
const MODE_CREATE_RECURSIVE
Definition: Directory.php:72
changeGroup($group)
Definition: Generic.php:387
getReadablePermissions()
Definition: Generic.php:182
static umask($umask=null)
Definition: Generic.php:421
static clearAllStatisticCaches()
Definition: Generic.php:271
setMode($mode)
Definition: Generic.php:517
static isCaseSensitive()
Definition: Generic.php:550
move($name, $force=Stream\IStream\Touchable::DO_NOT_OVERWRITE, $mkdir=Stream\IStream\Touchable::DO_NOT_MAKE_DIRECTORY)
Definition: Generic.php:338
static create($name, $mode=self::MODE_CREATE_RECURSIVE, $context=null)
Definition: Directory.php:221
touch($time=-1, $atime=-1)
Definition: Generic.php:286
changeOwner($user)
Definition: Generic.php:409