@@ 30-611 (lines=582) @@ | ||
27 | use \RecursiveIteratorIterator; |
|
28 | use \DateTime; |
|
29 | ||
30 | trait TraitForSharedMethods |
|
31 | { |
|
32 | ||
33 | /** |
|
34 | * |
|
35 | * {@inheritDoc} |
|
36 | * |
|
37 | */ |
|
38 | protected function setCwd($path = false, $validate_dir_name = false) |
|
39 | { |
|
40 | if (empty($path)) |
|
41 | $current_working_directory = $this->getCwd(); |
|
42 | else |
|
43 | $current_working_directory = $this->makeAbsolute($path); |
|
44 | ||
45 | if (! empty($validate_dir_name) && (basename($current_working_directory) !== $validate_dir_name)) |
|
46 | return false; |
|
47 | ||
48 | if (! is_dir($current_working_directory) || ! is_readable($current_working_directory) || |
|
49 | ! chdir($current_working_directory)) { |
|
50 | $this->alert(200, false, $current_working_directory); |
|
51 | return false; |
|
52 | } |
|
53 | $this->cwd = $current_working_directory; |
|
54 | return true; |
|
55 | } |
|
56 | ||
57 | /** |
|
58 | * |
|
59 | * {@inheritDoc} |
|
60 | * |
|
61 | */ |
|
62 | public function getCwd() |
|
63 | { |
|
64 | if (empty($this->cwd)) |
|
65 | $this->cwd = getcwd(); |
|
66 | ||
67 | return $this->cwd; |
|
68 | } |
|
69 | ||
70 | /** |
|
71 | * |
|
72 | * {@inheritDoc} |
|
73 | * |
|
74 | */ |
|
75 | public function getSize($convert = false, $filename = false) |
|
76 | { |
|
77 | $filename = ! empty($filename) ? $this->makeAbsolute($filename) : false; |
|
78 | $bytestotal = empty($filename) ? ((method_exists(get_parent_class($this), 'getSize')) ? parent::getSize() : false) : filesize( |
|
79 | $filename); |
|
80 | ||
81 | if (! $this->isDir($filename) && empty($convert)) |
|
82 | return $bytestotal; |
|
83 | ||
84 | $suffixes = array( |
|
85 | 'B', |
|
86 | 'kB', |
|
87 | 'MB', |
|
88 | 'GB', |
|
89 | 'TB', |
|
90 | 'PB', |
|
91 | 'EB', |
|
92 | 'ZB', |
|
93 | 'YB' |
|
94 | ); |
|
95 | if ($this->isDir($filename)) { |
|
96 | $path = ((method_exists(get_class($this), 'getPathname')) ? $this->getPathname() : $filename); |
|
97 | if ($path === '/home/nitrotrigger/tmp/libhowi-filesystem/log/phpunit_test.log') |
|
98 | die('ss'); |
|
99 | ||
100 | foreach (new RecursiveIteratorIterator( |
|
101 | new RecursiveDirectoryIterator($path, RecursiveDirectoryIterator::SKIP_DOTS)) as $object) { |
|
102 | $bytestotal += $object->getSize(); |
|
103 | } |
|
104 | if (! $convert) |
|
105 | return $bytestotal; |
|
106 | } |
|
107 | $base = log($bytestotal, 1024); |
|
108 | ||
109 | $result = [ |
|
110 | 0, |
|
111 | 'B' |
|
112 | ]; |
|
113 | if ($bytestotal > 0) { |
|
114 | ||
115 | $result = array( |
|
116 | round(pow(1024, $base - floor($base)), 2), |
|
117 | $suffixes[floor($base)] |
|
118 | ); |
|
119 | } |
|
120 | return ! empty($convert) ? $result : $result[0]; |
|
121 | } |
|
122 | ||
123 | /** |
|
124 | * |
|
125 | * {@inheritDoc} |
|
126 | * |
|
127 | */ |
|
128 | public function getATime($timeformat = false, $pathname = false) |
|
129 | { |
|
130 | $atime = empty($pathname) ? parent::getATime() : fileatime($this->makeAbsolute($pathname)); |
|
131 | if (! empty($timeformat) && is_int($atime)) { |
|
132 | switch ($timeformat) { |
|
133 | case 'ago': |
|
134 | $atime = $this->ct_ago($atime, 'y,m,d,h,i,s', false, true); |
|
135 | break; |
|
136 | case 'ago.single': |
|
137 | $atime = $this->ct_ago($atime, 'y,m,d,h,i,s', false, true, true); |
|
138 | break; |
|
139 | default: |
|
140 | $atime = date($timeformat, $atime); |
|
141 | break; |
|
142 | } |
|
143 | } |
|
144 | return $atime; |
|
145 | } |
|
146 | ||
147 | /** |
|
148 | * |
|
149 | * {@inheritDoc} |
|
150 | * |
|
151 | */ |
|
152 | public function getCTime($timeformat = false, $pathname = false) |
|
153 | { |
|
154 | $ctime = empty($pathname) ? parent::getCTime() : filectime($this->makeAbsolute($pathname)); |
|
155 | if (! empty($timeformat) && is_int($ctime)) { |
|
156 | switch ($timeformat) { |
|
157 | case 'ago': |
|
158 | $ctime = $this->ct_ago($ctime, 'y,m,d,h,i,s', false, true); |
|
159 | break; |
|
160 | case 'ago.single': |
|
161 | $ctime = $this->ct_ago($ctime, 'y,m,d,h,i,s', false, true, true); |
|
162 | break; |
|
163 | default: |
|
164 | $ctime = date($timeformat, $ctime); |
|
165 | break; |
|
166 | } |
|
167 | } |
|
168 | return $ctime; |
|
169 | } |
|
170 | ||
171 | /** |
|
172 | * |
|
173 | * {@inheritDoc} |
|
174 | * |
|
175 | */ |
|
176 | public function getMTime($timeformat = false, $pathname = false) |
|
177 | { |
|
178 | $mtime = empty($pathname) ? parent::getMTime() : filemtime($this->makeAbsolute($pathname)); |
|
179 | if (! empty($timeformat) && is_int($mtime)) { |
|
180 | switch ($timeformat) { |
|
181 | case 'ago': |
|
182 | $mtime = $this->ct_ago($mtime, 'y,m,d,h,i,s', false, true); |
|
183 | break; |
|
184 | case 'ago.single': |
|
185 | $mtime = $this->ct_ago($mtime, 'y,m,d,h,i,s', false, true, true); |
|
186 | break; |
|
187 | default: |
|
188 | $mtime = date($timeformat, $mtime); |
|
189 | break; |
|
190 | } |
|
191 | } |
|
192 | return $mtime; |
|
193 | } |
|
194 | ||
195 | /** |
|
196 | * |
|
197 | * {@inheritDoc} |
|
198 | * |
|
199 | */ |
|
200 | public function ct_ago($timestamp, $date_format = 'y,m,d,h,i,s', $sfx = true, $ommit_zero = true, $ago_single = true, $clocale = []) |
|
201 | { |
|
202 | $locale = array_merge( |
|
203 | array( |
|
204 | 'y' => array( |
|
205 | 'y', |
|
206 | 'year', |
|
207 | 'years' |
|
208 | ), |
|
209 | 'm' => array( |
|
210 | 'm', |
|
211 | 'month', |
|
212 | 'months' |
|
213 | ), |
|
214 | 'd' => $d = array( |
|
215 | 'd', |
|
216 | 'day', |
|
217 | 'days' |
|
218 | ), |
|
219 | 'h' => array( |
|
220 | 'h', |
|
221 | 'hour', |
|
222 | 'hours' |
|
223 | ), |
|
224 | 'i' => array( |
|
225 | 'm', |
|
226 | 'minute', |
|
227 | 'minutes' |
|
228 | ), |
|
229 | 's' => array( |
|
230 | 's', |
|
231 | 'second', |
|
232 | 'seconds' |
|
233 | ), |
|
234 | 'days' => $d, |
|
235 | 'ago' => 'ago', |
|
236 | 'now' => 'just now' |
|
237 | ), $clocale); |
|
238 | ||
239 | $date = new DateTime(); |
|
240 | $date->setTimestamp($timestamp); |
|
241 | ||
242 | $interval = $date->diff(new DateTime('now')); |
|
243 | ||
244 | for ($df = strtok($date_format, ','); $df !== false; $df = strtok(",")) { |
|
245 | $lkey = ($df !== 'a') ? strtolower($df) : 'days'; |
|
246 | ||
247 | if ($ommit_zero && $interval->$lkey === 0) |
|
248 | continue; |
|
249 | ||
250 | $fparam = $df . (empty($sfx) ? $locale[$lkey][0] : ' ' . |
|
251 | (($interval->$lkey === 1) ? $locale[$lkey][1] : $locale[$lkey][2])); |
|
252 | ||
253 | if (! empty($ago_single) && ! empty($dfs)) |
|
254 | break; |
|
255 | else |
|
256 | $dfs = ! empty($dfs) ? $dfs . "%$fparam " : "%$fparam "; |
|
257 | } |
|
258 | if (empty($dfs)) |
|
259 | $ret = $locale['now']; |
|
260 | else |
|
261 | $ret = $interval->format($dfs) . $locale['ago']; |
|
262 | return $ret; |
|
263 | } |
|
264 | ||
265 | /** |
|
266 | * |
|
267 | * {@inheritDoc} |
|
268 | * |
|
269 | */ |
|
270 | public function openFile($open_mode = "r", $use_include_path = false, $context = null) |
|
271 | { |
|
272 | if (! method_exists(get_parent_class($this), 'openFile')) |
|
273 | return false; |
|
274 | ||
275 | return ! $this->isDir() ? (! empty($context) ? parent::openFile($open_mode, $use_include_path, |
|
276 | $context) : parent::openFile($open_mode, $use_include_path)) : false; |
|
277 | } |
|
278 | ||
279 | /** |
|
280 | * |
|
281 | * {@inheritDoc} |
|
282 | * |
|
283 | */ |
|
284 | public function setFileClass($class_name = "\HOWI3\libhowi\Filesystem\php5\Objects\FileObject") |
|
285 | { |
|
286 | if (! method_exists(get_parent_class($this), 'setFileClass')) |
|
287 | return false; |
|
288 | ||
289 | if (is_subclass_of($class_name, 'SplFileObject') || $class_name === 'SplFileObject') { |
|
290 | parent::setFileClass($class_name); |
|
291 | return true; |
|
292 | } |
|
293 | return false; |
|
294 | } |
|
295 | ||
296 | /** |
|
297 | * |
|
298 | * {@inheritDoc} |
|
299 | * |
|
300 | */ |
|
301 | public function setInfoClass($class_name = "\HOWI3\libhowi\Filesystem\php5\Objects\InfoObject") |
|
302 | { |
|
303 | if (! method_exists(get_parent_class($this), 'setInfoClass')) |
|
304 | return false; |
|
305 | ||
306 | if (is_subclass_of($class_name, 'SplFileInfo') || $class_name === 'SplFileInfo') { |
|
307 | parent::setInfoClass($class_name); |
|
308 | return true; |
|
309 | } |
|
310 | return false; |
|
311 | } |
|
312 | ||
313 | /** |
|
314 | * |
|
315 | * {@inheritDoc} |
|
316 | * |
|
317 | */ |
|
318 | public function getOwnerName($filename = false) |
|
319 | { |
|
320 | $userID = empty($filename) && method_exists(get_parent_class($this), 'getOwner') ? parent::getOwner() : (! empty( |
|
321 | $filename) ? fileowner($this->makeAbsolute($filename)) : false); |
|
322 | $user = ! empty($userID) ? posix_getpwuid($userID) : false; |
|
323 | return is_array($user) && array_key_exists('name', $user) ? $user['name'] : false; |
|
324 | } |
|
325 | ||
326 | /** |
|
327 | * |
|
328 | * {@inheritDoc} |
|
329 | * |
|
330 | */ |
|
331 | public function getGroupName($filename = false) |
|
332 | { |
|
333 | $groupID = empty($filename) ? ((method_exists(get_parent_class($this), 'getGroup')) ? parent::getGroup() : false) : filegroup( |
|
334 | $this->makeAbsolute($filename)); |
|
335 | $group = ! empty($groupID) ? posix_getgrgid($groupID) : false; |
|
336 | return ! empty($group) && array_key_exists('name', $group) ? $group['name'] : false; |
|
337 | } |
|
338 | ||
339 | /** |
|
340 | * |
|
341 | * {@inheritDoc} |
|
342 | * |
|
343 | */ |
|
344 | public function getRealpath($filename = false) |
|
345 | { |
|
346 | return ! empty($filename) ? realpath($this->makeAbsolute($filename)) : ((method_exists( |
|
347 | get_parent_class($this), 'getRealpath')) ? parent::getRealpath() : false); |
|
348 | } |
|
349 | ||
350 | /** |
|
351 | * |
|
352 | * {@inheritDoc} |
|
353 | * |
|
354 | */ |
|
355 | public function getPathInfo($filename = false, $flags = false, |
|
356 | $class_name = '\HOWI3\libhowi\Filesystem\php5\Objects\InfoObject') |
|
357 | { |
|
358 | return ! empty($filename) ? empty($flags) ? pathinfo($this->makeAbsolute($filename)) : pathinfo( |
|
359 | $this->makeAbsolute($filename), $flags) : (method_exists(get_parent_class($this), 'getPathInfo') ? parent::getPathInfo( |
|
360 | $class_name) : false); |
|
361 | } |
|
362 | ||
363 | /** |
|
364 | * |
|
365 | * {@inheritDoc} |
|
366 | * |
|
367 | */ |
|
368 | public function getPath() |
|
369 | { |
|
370 | return method_exists(get_parent_class($this), 'getPath') ? parent::getPath() : (property_exists($this, |
|
371 | 'path') ? $this->path : dirname($this->getPathname())); |
|
372 | } |
|
373 | ||
374 | /** |
|
375 | * |
|
376 | * {@inheritDoc} |
|
377 | * |
|
378 | */ |
|
379 | public function getPathname() |
|
380 | { |
|
381 | return method_exists(get_parent_class($this), 'getPathname') ? parent::getPathname() : $this->getCwd(); |
|
382 | } |
|
383 | ||
384 | /** |
|
385 | * |
|
386 | * {@inheritDoc} |
|
387 | * |
|
388 | */ |
|
389 | public function getGroup($filename = false) |
|
390 | { |
|
391 | return empty($filename) ? ((method_exists(get_parent_class($this), 'getGroup')) ? parent::getGroup() : false) : filegroup( |
|
392 | $this->makeAbsolute($filename)); |
|
393 | } |
|
394 | ||
395 | /** |
|
396 | * |
|
397 | * {@inheritDoc} |
|
398 | * |
|
399 | */ |
|
400 | public function getOwner($filename = false) |
|
401 | { |
|
402 | return empty($filename) ? ((method_exists(get_parent_class($this), 'getOwner')) ? parent::getOwner() : false) : fileowner( |
|
403 | $this->makeAbsolute($filename)); |
|
404 | } |
|
405 | ||
406 | /** |
|
407 | * |
|
408 | * {@inheritDoc} |
|
409 | * |
|
410 | */ |
|
411 | public function getInode($filename = false) |
|
412 | { |
|
413 | return empty($filename) ? ((method_exists(get_parent_class($this), 'getInode')) ? parent::getInode() : false) : fileinode( |
|
414 | $this->makeAbsolute($filename)); |
|
415 | } |
|
416 | ||
417 | /** |
|
418 | * |
|
419 | * {@inheritDoc} |
|
420 | * |
|
421 | */ |
|
422 | public function getBasename($suffix = false, $pathname = false) |
|
423 | { |
|
424 | $pathname = ! empty($pathname) ? $pathname : ($this->isDot() ? $this->getPath() : false); |
|
425 | $suffix = ! empty($suffix) ? $suffix : ''; |
|
426 | return ! empty($pathname) || ! method_exists(get_parent_class($this), 'getBasename') ? basename( |
|
427 | $pathname, $suffix) : parent::getBasename($suffix); |
|
428 | } |
|
429 | ||
430 | /** |
|
431 | * |
|
432 | * {@inheritDoc} |
|
433 | * |
|
434 | */ |
|
435 | public function getPerms($filename = false) |
|
436 | { |
|
437 | $perms = empty($filename) ? ((method_exists(get_parent_class($this), 'getPerms')) ? parent::getPerms() : false) : fileperms( |
|
438 | $this->makeAbsolute($filename)); |
|
439 | return ! empty($perms) ? (int) ltrim(substr(sprintf('%o', $perms), - 4), '0') : false; |
|
440 | } |
|
441 | ||
442 | /** |
|
443 | * |
|
444 | * {@inheritDoc} |
|
445 | * |
|
446 | */ |
|
447 | public function getType($filename = false) |
|
448 | { |
|
449 | return ! empty($filename) ? filetype($this->makeAbsolute($filename)) : ((method_exists( |
|
450 | get_parent_class($this), 'getType')) ? parent::getType() : false); |
|
451 | } |
|
452 | ||
453 | /** |
|
454 | * |
|
455 | * {@inheritDoc} |
|
456 | * |
|
457 | */ |
|
458 | public function isDot() |
|
459 | { |
|
460 | return ((method_exists(get_parent_class($this), 'isDot')) ? parent::isDot() : false); |
|
461 | } |
|
462 | ||
463 | /** |
|
464 | * |
|
465 | * {@inheritDoc} |
|
466 | * |
|
467 | */ |
|
468 | public function isAbsolute($path = false) |
|
469 | { |
|
470 | return ((strspn($path, DIRECTORY_SEPARATOR, 0, 1) + (ctype_alnum($path) ? 0 : 1) + |
|
471 | (strpos($path, ':') === false) + (strpos($path, "/../") === false ? 1 : 0) + |
|
472 | (filter_var($path, FILTER_VALIDATE_URL) === false ? 1 : 0) === 5) ? true : false); |
|
473 | } |
|
474 | ||
475 | /** |
|
476 | * |
|
477 | * {@inheritDoc} |
|
478 | * |
|
479 | */ |
|
480 | public function isRelative($path = false) |
|
481 | { |
|
482 | // ^(?=.*?(.))((?!(^\/)).)*$ |
|
483 | return (preg_match('/^[^\/].*$/', $path) === 1) ? true : false; |
|
484 | } |
|
485 | ||
486 | /** |
|
487 | * |
|
488 | * {@inheritDoc} |
|
489 | * |
|
490 | */ |
|
491 | public function isWritable($path = false) |
|
492 | { |
|
493 | return empty($path) ? ((method_exists(get_parent_class($this), 'isWritable')) ? parent::isWritable() : false) : is_writable( |
|
494 | $this->makeAbsolute($path)); |
|
495 | } |
|
496 | ||
497 | /** |
|
498 | * |
|
499 | * {@inheritDoc} |
|
500 | * |
|
501 | */ |
|
502 | public function isReadable($path = false) |
|
503 | { |
|
504 | return empty($path) ? ((method_exists(get_parent_class($this), 'isReadable')) ? parent::isReadable() : false) : is_readable( |
|
505 | $this->makeAbsolute($path)); |
|
506 | } |
|
507 | ||
508 | /** |
|
509 | * |
|
510 | * {@inheritDoc} |
|
511 | * |
|
512 | */ |
|
513 | public function isDir($filename = false) |
|
514 | { |
|
515 | return empty($filename) ? ((method_exists(get_parent_class($this), 'isDir')) ? parent::isDir() : false) : is_dir( |
|
516 | $this->makeAbsolute($filename)); |
|
517 | } |
|
518 | ||
519 | /** |
|
520 | * |
|
521 | * {@inheritDoc} |
|
522 | * |
|
523 | */ |
|
524 | public function isExecutable($filename = false) |
|
525 | { |
|
526 | return ! empty($filename) ? is_executable($this->makeAbsolute($filename)) : ((method_exists( |
|
527 | get_parent_class($this), 'isExecutable')) ? parent::isExecutable() : false); |
|
528 | } |
|
529 | ||
530 | /** |
|
531 | * |
|
532 | * {@inheritDoc} |
|
533 | * |
|
534 | */ |
|
535 | public function isFile($filename = false) |
|
536 | { |
|
537 | return ! empty($filename) ? is_file($this->makeAbsolute($filename)) : ((method_exists( |
|
538 | get_parent_class($this), 'isFile')) ? parent::isFile() : false); |
|
539 | } |
|
540 | ||
541 | /** |
|
542 | * |
|
543 | * {@inheritDoc} |
|
544 | * |
|
545 | */ |
|
546 | public function isLink($filename = false) |
|
547 | { |
|
548 | return ! empty($filename) ? is_link($this->makeAbsolute($filename)) : ((method_exists( |
|
549 | get_parent_class($this), 'isLink')) ? parent::isLink() : false); |
|
550 | } |
|
551 | ||
552 | /** |
|
553 | * |
|
554 | * {@inheritDoc} |
|
555 | * |
|
556 | */ |
|
557 | public function makeAbsolute($path = false) |
|
558 | { |
|
559 | if (! empty($path) && $this->isAbsolute($path)) |
|
560 | $absolute_path = $path; |
|
561 | elseif (! empty($path) && $this->isRelative($path)) { |
|
562 | ||
563 | if (preg_match('/^(~\/)/', $path) === 1) { |
|
564 | $absolute_path = getenv("HOME") . substr($path, 1); |
|
565 | } elseif (preg_match('/^(.\/|..\/)/', $path) === 1) { |
|
566 | $absolute_path = realpath($path); |
|
567 | } else |
|
568 | $absolute_path = $this->getCwd() . ($path !== '.' ? DIRECTORY_SEPARATOR . $path : ''); |
|
569 | } else { |
|
570 | $absolute_path = $path; |
|
571 | } |
|
572 | return $absolute_path; |
|
573 | } |
|
574 | ||
575 | /** |
|
576 | * |
|
577 | * {@inheritDoc} |
|
578 | * |
|
579 | */ |
|
580 | public function exists($pathname = false) |
|
581 | { |
|
582 | if (empty($pathname)) |
|
583 | return false; |
|
584 | ||
585 | $pathname = $this->makeAbsolute($pathname); |
|
586 | ||
587 | return ! empty($pathname) ? file_exists($pathname) : false; |
|
588 | } |
|
589 | ||
590 | /** |
|
591 | * |
|
592 | * {@inheritDoc} |
|
593 | * |
|
594 | */ |
|
595 | public function getFilename($filename = false) |
|
596 | { |
|
597 | return ! empty($filename) ? basename($this->makeAbsolute($filename)) : ((method_exists( |
|
598 | get_parent_class($this), 'getFilename')) ? parent::getFilename() : false); |
|
599 | } |
|
600 | ||
601 | /** |
|
602 | * |
|
603 | * {@inheritDoc} |
|
604 | * |
|
605 | */ |
|
606 | public function getExtension($filename = false) |
|
607 | { |
|
608 | return ! empty($filename) ? pathinfo($this->makeAbsolute($filename), PATHINFO_EXTENSION) : ((method_exists( |
|
609 | get_parent_class($this), 'getExtension')) ? parent::getExtension() : false); |
|
610 | } |
|
611 | } |
|
612 |
@@ 30-611 (lines=582) @@ | ||
27 | use \RecursiveIteratorIterator; |
|
28 | use \DateTime; |
|
29 | ||
30 | trait TraitForSharedMethods |
|
31 | { |
|
32 | ||
33 | /** |
|
34 | * |
|
35 | * {@inheritDoc} |
|
36 | * |
|
37 | */ |
|
38 | protected function setCwd($path = false, $validate_dir_name = false) |
|
39 | { |
|
40 | if (empty($path)) |
|
41 | $current_working_directory = $this->getCwd(); |
|
42 | else |
|
43 | $current_working_directory = $this->makeAbsolute($path); |
|
44 | ||
45 | if (! empty($validate_dir_name) && (basename($current_working_directory) !== $validate_dir_name)) |
|
46 | return false; |
|
47 | ||
48 | if (! is_dir($current_working_directory) || ! is_readable($current_working_directory) || |
|
49 | ! chdir($current_working_directory)) { |
|
50 | $this->alert(200, false, $current_working_directory); |
|
51 | return false; |
|
52 | } |
|
53 | $this->cwd = $current_working_directory; |
|
54 | return true; |
|
55 | } |
|
56 | ||
57 | /** |
|
58 | * |
|
59 | * {@inheritDoc} |
|
60 | * |
|
61 | */ |
|
62 | public function getCwd() |
|
63 | { |
|
64 | if (empty($this->cwd)) |
|
65 | $this->cwd = getcwd(); |
|
66 | ||
67 | return $this->cwd; |
|
68 | } |
|
69 | ||
70 | /** |
|
71 | * |
|
72 | * {@inheritDoc} |
|
73 | * |
|
74 | */ |
|
75 | public function getSize($convert = false, $filename = false) |
|
76 | { |
|
77 | $filename = ! empty($filename) ? $this->makeAbsolute($filename) : false; |
|
78 | $bytestotal = empty($filename) ? ((method_exists(get_parent_class($this), 'getSize')) ? parent::getSize() : false) : filesize( |
|
79 | $filename); |
|
80 | ||
81 | if (! $this->isDir($filename) && empty($convert)) |
|
82 | return $bytestotal; |
|
83 | ||
84 | $suffixes = array( |
|
85 | 'B', |
|
86 | 'kB', |
|
87 | 'MB', |
|
88 | 'GB', |
|
89 | 'TB', |
|
90 | 'PB', |
|
91 | 'EB', |
|
92 | 'ZB', |
|
93 | 'YB' |
|
94 | ); |
|
95 | if ($this->isDir($filename)) { |
|
96 | $path = ((method_exists(get_class($this), 'getPathname')) ? $this->getPathname() : $filename); |
|
97 | if ($path === '/home/nitrotrigger/tmp/libhowi-filesystem/log/phpunit_test.log') |
|
98 | die('ss'); |
|
99 | ||
100 | foreach (new RecursiveIteratorIterator( |
|
101 | new RecursiveDirectoryIterator($path, RecursiveDirectoryIterator::SKIP_DOTS)) as $object) { |
|
102 | $bytestotal += $object->getSize(); |
|
103 | } |
|
104 | if (! $convert) |
|
105 | return $bytestotal; |
|
106 | } |
|
107 | $base = log($bytestotal, 1024); |
|
108 | ||
109 | $result = [ |
|
110 | 0, |
|
111 | 'B' |
|
112 | ]; |
|
113 | if ($bytestotal > 0) { |
|
114 | ||
115 | $result = array( |
|
116 | round(pow(1024, $base - floor($base)), 2), |
|
117 | $suffixes[floor($base)] |
|
118 | ); |
|
119 | } |
|
120 | return ! empty($convert) ? $result : $result[0]; |
|
121 | } |
|
122 | ||
123 | /** |
|
124 | * |
|
125 | * {@inheritDoc} |
|
126 | * |
|
127 | */ |
|
128 | public function getATime($timeformat = false, $pathname = false) |
|
129 | { |
|
130 | $atime = empty($pathname) ? parent::getATime() : fileatime($this->makeAbsolute($pathname)); |
|
131 | if (! empty($timeformat) && is_int($atime)) { |
|
132 | switch ($timeformat) { |
|
133 | case 'ago': |
|
134 | $atime = $this->ct_ago($atime, 'y,m,d,h,i,s', false, true); |
|
135 | break; |
|
136 | case 'ago.single': |
|
137 | $atime = $this->ct_ago($atime, 'y,m,d,h,i,s', false, true, true); |
|
138 | break; |
|
139 | default: |
|
140 | $atime = date($timeformat, $atime); |
|
141 | break; |
|
142 | } |
|
143 | } |
|
144 | return $atime; |
|
145 | } |
|
146 | ||
147 | /** |
|
148 | * |
|
149 | * {@inheritDoc} |
|
150 | * |
|
151 | */ |
|
152 | public function getCTime($timeformat = false, $pathname = false) |
|
153 | { |
|
154 | $ctime = empty($pathname) ? parent::getCTime() : filectime($this->makeAbsolute($pathname)); |
|
155 | if (! empty($timeformat) && is_int($ctime)) { |
|
156 | switch ($timeformat) { |
|
157 | case 'ago': |
|
158 | $ctime = $this->ct_ago($ctime, 'y,m,d,h,i,s', false, true); |
|
159 | break; |
|
160 | case 'ago.single': |
|
161 | $ctime = $this->ct_ago($ctime, 'y,m,d,h,i,s', false, true, true); |
|
162 | break; |
|
163 | default: |
|
164 | $ctime = date($timeformat, $ctime); |
|
165 | break; |
|
166 | } |
|
167 | } |
|
168 | return $ctime; |
|
169 | } |
|
170 | ||
171 | /** |
|
172 | * |
|
173 | * {@inheritDoc} |
|
174 | * |
|
175 | */ |
|
176 | public function getMTime($timeformat = false, $pathname = false) |
|
177 | { |
|
178 | $mtime = empty($pathname) ? parent::getMTime() : filemtime($this->makeAbsolute($pathname)); |
|
179 | if (! empty($timeformat) && is_int($mtime)) { |
|
180 | switch ($timeformat) { |
|
181 | case 'ago': |
|
182 | $mtime = $this->ct_ago($mtime, 'y,m,d,h,i,s', false, true); |
|
183 | break; |
|
184 | case 'ago.single': |
|
185 | $mtime = $this->ct_ago($mtime, 'y,m,d,h,i,s', false, true, true); |
|
186 | break; |
|
187 | default: |
|
188 | $mtime = date($timeformat, $mtime); |
|
189 | break; |
|
190 | } |
|
191 | } |
|
192 | return $mtime; |
|
193 | } |
|
194 | ||
195 | /** |
|
196 | * |
|
197 | * {@inheritDoc} |
|
198 | * |
|
199 | */ |
|
200 | public function ct_ago($timestamp, $date_format = 'y,m,d,h,i,s', $sfx = true, $ommit_zero = true, $ago_single = true, $clocale = []) |
|
201 | { |
|
202 | $locale = array_merge( |
|
203 | array( |
|
204 | 'y' => array( |
|
205 | 'y', |
|
206 | 'year', |
|
207 | 'years' |
|
208 | ), |
|
209 | 'm' => array( |
|
210 | 'm', |
|
211 | 'month', |
|
212 | 'months' |
|
213 | ), |
|
214 | 'd' => $d = array( |
|
215 | 'd', |
|
216 | 'day', |
|
217 | 'days' |
|
218 | ), |
|
219 | 'h' => array( |
|
220 | 'h', |
|
221 | 'hour', |
|
222 | 'hours' |
|
223 | ), |
|
224 | 'i' => array( |
|
225 | 'm', |
|
226 | 'minute', |
|
227 | 'minutes' |
|
228 | ), |
|
229 | 's' => array( |
|
230 | 's', |
|
231 | 'second', |
|
232 | 'seconds' |
|
233 | ), |
|
234 | 'days' => $d, |
|
235 | 'ago' => 'ago', |
|
236 | 'now' => 'just now' |
|
237 | ), $clocale); |
|
238 | ||
239 | $date = new DateTime(); |
|
240 | $date->setTimestamp($timestamp); |
|
241 | ||
242 | $interval = $date->diff(new DateTime('now')); |
|
243 | ||
244 | for ($df = strtok($date_format, ','); $df !== false; $df = strtok(",")) { |
|
245 | $lkey = ($df !== 'a') ? strtolower($df) : 'days'; |
|
246 | ||
247 | if ($ommit_zero && $interval->$lkey === 0) |
|
248 | continue; |
|
249 | ||
250 | $fparam = $df . (empty($sfx) ? $locale[$lkey][0] : ' ' . |
|
251 | (($interval->$lkey === 1) ? $locale[$lkey][1] : $locale[$lkey][2])); |
|
252 | ||
253 | if (! empty($ago_single) && ! empty($dfs)) |
|
254 | break; |
|
255 | else |
|
256 | $dfs = ! empty($dfs) ? $dfs . "%$fparam " : "%$fparam "; |
|
257 | } |
|
258 | if (empty($dfs)) |
|
259 | $ret = $locale['now']; |
|
260 | else |
|
261 | $ret = $interval->format($dfs) . $locale['ago']; |
|
262 | return $ret; |
|
263 | } |
|
264 | ||
265 | /** |
|
266 | * |
|
267 | * {@inheritDoc} |
|
268 | * |
|
269 | */ |
|
270 | public function openFile($open_mode = "r", $use_include_path = false, $context = null) |
|
271 | { |
|
272 | if (! method_exists(get_parent_class($this), 'openFile')) |
|
273 | return false; |
|
274 | ||
275 | return ! $this->isDir() ? (! empty($context) ? parent::openFile($open_mode, $use_include_path, |
|
276 | $context) : parent::openFile($open_mode, $use_include_path)) : false; |
|
277 | } |
|
278 | ||
279 | /** |
|
280 | * |
|
281 | * {@inheritDoc} |
|
282 | * |
|
283 | */ |
|
284 | public function setFileClass($class_name = "\HOWI3\libhowi\Filesystem\php7\Objects\FileObject") |
|
285 | { |
|
286 | if (! method_exists(get_parent_class($this), 'setFileClass')) |
|
287 | return false; |
|
288 | ||
289 | if (is_subclass_of($class_name, 'SplFileObject') || $class_name === 'SplFileObject') { |
|
290 | parent::setFileClass($class_name); |
|
291 | return true; |
|
292 | } |
|
293 | return false; |
|
294 | } |
|
295 | ||
296 | /** |
|
297 | * |
|
298 | * {@inheritDoc} |
|
299 | * |
|
300 | */ |
|
301 | public function setInfoClass($class_name = "\HOWI3\libhowi\Filesystem\php7\Objects\InfoObject") |
|
302 | { |
|
303 | if (! method_exists(get_parent_class($this), 'setInfoClass')) |
|
304 | return false; |
|
305 | ||
306 | if (is_subclass_of($class_name, 'SplFileInfo') || $class_name === 'SplFileInfo') { |
|
307 | parent::setInfoClass($class_name); |
|
308 | return true; |
|
309 | } |
|
310 | return false; |
|
311 | } |
|
312 | ||
313 | /** |
|
314 | * |
|
315 | * {@inheritDoc} |
|
316 | * |
|
317 | */ |
|
318 | public function getOwnerName($filename = false) |
|
319 | { |
|
320 | $userID = empty($filename) && method_exists(get_parent_class($this), 'getOwner') ? parent::getOwner() : (! empty( |
|
321 | $filename) ? fileowner($this->makeAbsolute($filename)) : false); |
|
322 | $user = ! empty($userID) ? posix_getpwuid($userID) : false; |
|
323 | return is_array($user) && array_key_exists('name', $user) ? $user['name'] : false; |
|
324 | } |
|
325 | ||
326 | /** |
|
327 | * |
|
328 | * {@inheritDoc} |
|
329 | * |
|
330 | */ |
|
331 | public function getGroupName($filename = false) |
|
332 | { |
|
333 | $groupID = empty($filename) ? ((method_exists(get_parent_class($this), 'getGroup')) ? parent::getGroup() : false) : filegroup( |
|
334 | $this->makeAbsolute($filename)); |
|
335 | $group = ! empty($groupID) ? posix_getgrgid($groupID) : false; |
|
336 | return ! empty($group) && array_key_exists('name', $group) ? $group['name'] : false; |
|
337 | } |
|
338 | ||
339 | /** |
|
340 | * |
|
341 | * {@inheritDoc} |
|
342 | * |
|
343 | */ |
|
344 | public function getRealpath($filename = false) |
|
345 | { |
|
346 | return ! empty($filename) ? realpath($this->makeAbsolute($filename)) : ((method_exists( |
|
347 | get_parent_class($this), 'getRealpath')) ? parent::getRealpath() : false); |
|
348 | } |
|
349 | ||
350 | /** |
|
351 | * |
|
352 | * {@inheritDoc} |
|
353 | * |
|
354 | */ |
|
355 | public function getPathInfo($filename = false, $flags = false, |
|
356 | $class_name = '\HOWI3\libhowi\Filesystem\php7\Objects\InfoObject') |
|
357 | { |
|
358 | return ! empty($filename) ? empty($flags) ? pathinfo($this->makeAbsolute($filename)) : pathinfo( |
|
359 | $this->makeAbsolute($filename), $flags) : (method_exists(get_parent_class($this), 'getPathInfo') ? parent::getPathInfo( |
|
360 | $class_name) : false); |
|
361 | } |
|
362 | ||
363 | /** |
|
364 | * |
|
365 | * {@inheritDoc} |
|
366 | * |
|
367 | */ |
|
368 | public function getPath() |
|
369 | { |
|
370 | return method_exists(get_parent_class($this), 'getPath') ? parent::getPath() : (property_exists($this, |
|
371 | 'path') ? $this->path : dirname($this->getPathname())); |
|
372 | } |
|
373 | ||
374 | /** |
|
375 | * |
|
376 | * {@inheritDoc} |
|
377 | * |
|
378 | */ |
|
379 | public function getPathname() |
|
380 | { |
|
381 | return method_exists(get_parent_class($this), 'getPathname') ? parent::getPathname() : $this->getCwd(); |
|
382 | } |
|
383 | ||
384 | /** |
|
385 | * |
|
386 | * {@inheritDoc} |
|
387 | * |
|
388 | */ |
|
389 | public function getGroup($filename = false) |
|
390 | { |
|
391 | return empty($filename) ? ((method_exists(get_parent_class($this), 'getGroup')) ? parent::getGroup() : false) : filegroup( |
|
392 | $this->makeAbsolute($filename)); |
|
393 | } |
|
394 | ||
395 | /** |
|
396 | * |
|
397 | * {@inheritDoc} |
|
398 | * |
|
399 | */ |
|
400 | public function getOwner($filename = false) |
|
401 | { |
|
402 | return empty($filename) ? ((method_exists(get_parent_class($this), 'getOwner')) ? parent::getOwner() : false) : fileowner( |
|
403 | $this->makeAbsolute($filename)); |
|
404 | } |
|
405 | ||
406 | /** |
|
407 | * |
|
408 | * {@inheritDoc} |
|
409 | * |
|
410 | */ |
|
411 | public function getInode($filename = false) |
|
412 | { |
|
413 | return empty($filename) ? ((method_exists(get_parent_class($this), 'getInode')) ? parent::getInode() : false) : fileinode( |
|
414 | $this->makeAbsolute($filename)); |
|
415 | } |
|
416 | ||
417 | /** |
|
418 | * |
|
419 | * {@inheritDoc} |
|
420 | * |
|
421 | */ |
|
422 | public function getBasename($suffix = false, $pathname = false) |
|
423 | { |
|
424 | $pathname = ! empty($pathname) ? $pathname : ($this->isDot() ? $this->getPath() : false); |
|
425 | $suffix = ! empty($suffix) ? $suffix : ''; |
|
426 | return ! empty($pathname) || ! method_exists(get_parent_class($this), 'getBasename') ? basename( |
|
427 | $pathname, $suffix) : parent::getBasename($suffix); |
|
428 | } |
|
429 | ||
430 | /** |
|
431 | * |
|
432 | * {@inheritDoc} |
|
433 | * |
|
434 | */ |
|
435 | public function getPerms($filename = false) |
|
436 | { |
|
437 | $perms = empty($filename) ? ((method_exists(get_parent_class($this), 'getPerms')) ? parent::getPerms() : false) : fileperms( |
|
438 | $this->makeAbsolute($filename)); |
|
439 | return ! empty($perms) ? (int) ltrim(substr(sprintf('%o', $perms), - 4), '0') : false; |
|
440 | } |
|
441 | ||
442 | /** |
|
443 | * |
|
444 | * {@inheritDoc} |
|
445 | * |
|
446 | */ |
|
447 | public function getType($filename = false) |
|
448 | { |
|
449 | return ! empty($filename) ? filetype($this->makeAbsolute($filename)) : ((method_exists( |
|
450 | get_parent_class($this), 'getType')) ? parent::getType() : false); |
|
451 | } |
|
452 | ||
453 | /** |
|
454 | * |
|
455 | * {@inheritDoc} |
|
456 | * |
|
457 | */ |
|
458 | public function isDot() |
|
459 | { |
|
460 | return ((method_exists(get_parent_class($this), 'isDot')) ? parent::isDot() : false); |
|
461 | } |
|
462 | ||
463 | /** |
|
464 | * |
|
465 | * {@inheritDoc} |
|
466 | * |
|
467 | */ |
|
468 | public function isAbsolute($path = false) |
|
469 | { |
|
470 | return ((strspn($path, DIRECTORY_SEPARATOR, 0, 1) + (ctype_alnum($path) ? 0 : 1) + |
|
471 | (strpos($path, ':') === false) + (strpos($path, "/../") === false ? 1 : 0) + |
|
472 | (filter_var($path, FILTER_VALIDATE_URL) === false ? 1 : 0) === 5) ? true : false); |
|
473 | } |
|
474 | ||
475 | /** |
|
476 | * |
|
477 | * {@inheritDoc} |
|
478 | * |
|
479 | */ |
|
480 | public function isRelative($path = false) |
|
481 | { |
|
482 | // ^(?=.*?(.))((?!(^\/)).)*$ |
|
483 | return (preg_match('/^[^\/].*$/', $path) === 1) ? true : false; |
|
484 | } |
|
485 | ||
486 | /** |
|
487 | * |
|
488 | * {@inheritDoc} |
|
489 | * |
|
490 | */ |
|
491 | public function isWritable($path = false) |
|
492 | { |
|
493 | return empty($path) ? ((method_exists(get_parent_class($this), 'isWritable')) ? parent::isWritable() : false) : is_writable( |
|
494 | $this->makeAbsolute($path)); |
|
495 | } |
|
496 | ||
497 | /** |
|
498 | * |
|
499 | * {@inheritDoc} |
|
500 | * |
|
501 | */ |
|
502 | public function isReadable($path = false) |
|
503 | { |
|
504 | return empty($path) ? ((method_exists(get_parent_class($this), 'isReadable')) ? parent::isReadable() : false) : is_readable( |
|
505 | $this->makeAbsolute($path)); |
|
506 | } |
|
507 | ||
508 | /** |
|
509 | * |
|
510 | * {@inheritDoc} |
|
511 | * |
|
512 | */ |
|
513 | public function isDir($filename = false) |
|
514 | { |
|
515 | return empty($filename) ? ((method_exists(get_parent_class($this), 'isDir')) ? parent::isDir() : false) : is_dir( |
|
516 | $this->makeAbsolute($filename)); |
|
517 | } |
|
518 | ||
519 | /** |
|
520 | * |
|
521 | * {@inheritDoc} |
|
522 | * |
|
523 | */ |
|
524 | public function isExecutable($filename = false) |
|
525 | { |
|
526 | return ! empty($filename) ? is_executable($this->makeAbsolute($filename)) : ((method_exists( |
|
527 | get_parent_class($this), 'isExecutable')) ? parent::isExecutable() : false); |
|
528 | } |
|
529 | ||
530 | /** |
|
531 | * |
|
532 | * {@inheritDoc} |
|
533 | * |
|
534 | */ |
|
535 | public function isFile($filename = false) |
|
536 | { |
|
537 | return ! empty($filename) ? is_file($this->makeAbsolute($filename)) : ((method_exists( |
|
538 | get_parent_class($this), 'isFile')) ? parent::isFile() : false); |
|
539 | } |
|
540 | ||
541 | /** |
|
542 | * |
|
543 | * {@inheritDoc} |
|
544 | * |
|
545 | */ |
|
546 | public function isLink($filename = false) |
|
547 | { |
|
548 | return ! empty($filename) ? is_link($this->makeAbsolute($filename)) : ((method_exists( |
|
549 | get_parent_class($this), 'isLink')) ? parent::isLink() : false); |
|
550 | } |
|
551 | ||
552 | /** |
|
553 | * |
|
554 | * {@inheritDoc} |
|
555 | * |
|
556 | */ |
|
557 | public function makeAbsolute($path = false) |
|
558 | { |
|
559 | if (! empty($path) && $this->isAbsolute($path)) |
|
560 | $absolute_path = $path; |
|
561 | elseif (! empty($path) && $this->isRelative($path)) { |
|
562 | ||
563 | if (preg_match('/^(~\/)/', $path) === 1) { |
|
564 | $absolute_path = getenv("HOME") . substr($path, 1); |
|
565 | } elseif (preg_match('/^(.\/|..\/)/', $path) === 1) { |
|
566 | $absolute_path = realpath($path); |
|
567 | } else |
|
568 | $absolute_path = $this->getCwd() . ($path !== '.' ? DIRECTORY_SEPARATOR . $path : ''); |
|
569 | } else { |
|
570 | $absolute_path = $path; |
|
571 | } |
|
572 | return $absolute_path; |
|
573 | } |
|
574 | ||
575 | /** |
|
576 | * |
|
577 | * {@inheritDoc} |
|
578 | * |
|
579 | */ |
|
580 | public function exists($pathname = false) |
|
581 | { |
|
582 | if (empty($pathname)) |
|
583 | return false; |
|
584 | ||
585 | $pathname = $this->makeAbsolute($pathname); |
|
586 | ||
587 | return ! empty($pathname) ? file_exists($pathname) : false; |
|
588 | } |
|
589 | ||
590 | /** |
|
591 | * |
|
592 | * {@inheritDoc} |
|
593 | * |
|
594 | */ |
|
595 | public function getFilename($filename = false) |
|
596 | { |
|
597 | return ! empty($filename) ? basename($this->makeAbsolute($filename)) : ((method_exists( |
|
598 | get_parent_class($this), 'getFilename')) ? parent::getFilename() : false); |
|
599 | } |
|
600 | ||
601 | /** |
|
602 | * |
|
603 | * {@inheritDoc} |
|
604 | * |
|
605 | */ |
|
606 | public function getExtension($filename = false) |
|
607 | { |
|
608 | return ! empty($filename) ? pathinfo($this->makeAbsolute($filename), PATHINFO_EXTENSION) : ((method_exists( |
|
609 | get_parent_class($this), 'getExtension')) ? parent::getExtension() : false); |
|
610 | } |
|
611 | } |
|
612 |