2020-09-16 12:24:54 +08:00
|
|
|
<?php
|
|
|
|
|
|
|
|
class filesystem
|
|
|
|
{
|
|
|
|
private $path = null;
|
|
|
|
|
2020-10-21 20:10:44 +08:00
|
|
|
public function __construct()
|
2020-09-16 12:24:54 +08:00
|
|
|
{
|
2020-10-21 20:10:44 +08:00
|
|
|
if (func_num_args() > 0) {
|
|
|
|
$this->path = func_get_arg(0);
|
|
|
|
}
|
2020-09-16 12:24:54 +08:00
|
|
|
}
|
|
|
|
|
2020-10-21 20:10:44 +08:00
|
|
|
public function chmod()
|
2020-09-16 12:24:54 +08:00
|
|
|
{
|
2020-10-21 20:10:44 +08:00
|
|
|
if (!function_exists("chmod")) {
|
|
|
|
return false;
|
|
|
|
}
|
2020-09-16 12:24:54 +08:00
|
|
|
if (func_num_args() == 3) {
|
|
|
|
$path = $this->path;
|
|
|
|
$dirperms = func_get_arg(0);
|
|
|
|
$fileperms = func_get_arg(1);
|
|
|
|
$recursive = func_get_arg(2);
|
|
|
|
} elseif (func_num_args() == 4) {
|
|
|
|
$path = func_get_arg(0);
|
|
|
|
$dirperms = func_get_arg(1);
|
|
|
|
$fileperms = func_get_arg(2);
|
|
|
|
$recursive = func_get_arg(3);
|
|
|
|
} else {
|
|
|
|
return false;
|
|
|
|
}
|
2020-10-21 20:10:44 +08:00
|
|
|
if (!file_exists($path)) {
|
|
|
|
return false;
|
|
|
|
}
|
|
|
|
if (!is_dir($path)) {
|
|
|
|
return chmod($path, octdec($fileperms));
|
|
|
|
}
|
|
|
|
if (!$recursive || !($dh = opendir($path))) {
|
|
|
|
return chmod($path, octdec($dirperms));
|
|
|
|
}
|
2020-09-16 12:24:54 +08:00
|
|
|
while (($entry = readdir($dh)) !== false) {
|
|
|
|
if ($entry != "." && $entry != "..") {
|
|
|
|
$this->chmod($path . "/" . $entry, $dirperms, $fileperms, $recursive);
|
|
|
|
}
|
|
|
|
}
|
|
|
|
closedir($dh);
|
2020-10-21 20:10:44 +08:00
|
|
|
return chmod($path, octdec($dirperms));
|
2020-09-16 12:24:54 +08:00
|
|
|
}
|
|
|
|
|
2020-10-21 20:10:44 +08:00
|
|
|
public function chpath()
|
2020-09-16 12:24:54 +08:00
|
|
|
{
|
|
|
|
if (func_num_args() < 1) {
|
|
|
|
return false;
|
|
|
|
} else {
|
|
|
|
$this->path = func_get_arg(0);
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
2020-10-21 20:10:44 +08:00
|
|
|
public function cppath()
|
2020-09-16 12:24:54 +08:00
|
|
|
{
|
|
|
|
if (func_num_args() == 1) {
|
|
|
|
$path = $this->path;
|
|
|
|
$topath = func_get_arg(0);
|
|
|
|
} elseif (func_num_args() == 2) {
|
|
|
|
$path = func_get_arg(1);
|
2020-10-21 20:10:44 +08:00
|
|
|
$topath = func_get_arg(0);
|
|
|
|
;
|
2020-09-16 12:24:54 +08:00
|
|
|
} else {
|
|
|
|
return false;
|
|
|
|
}
|
|
|
|
if (!file_exists($path)) {
|
|
|
|
return false;
|
|
|
|
} elseif (!is_dir($path)) {
|
|
|
|
return copy($path, $topath);
|
|
|
|
} elseif (!mkdir($topath, 0755, true)) {
|
|
|
|
return false;
|
|
|
|
}
|
2020-10-21 20:10:44 +08:00
|
|
|
if (!($dh = opendir($path))) {
|
|
|
|
return false;
|
|
|
|
}
|
2020-09-16 12:24:54 +08:00
|
|
|
while (($entry = readdir($dh)) !== false) {
|
|
|
|
if ($entry != "." && $entry != "..") {
|
|
|
|
$this->cppath($topath . "/" . $entry, $path . "/" . $entry);
|
|
|
|
}
|
|
|
|
}
|
|
|
|
closedir($dh);
|
|
|
|
return true;
|
|
|
|
}
|
|
|
|
|
2020-10-21 20:10:44 +08:00
|
|
|
public function rmpath()
|
2020-09-16 12:24:54 +08:00
|
|
|
{
|
|
|
|
if (func_num_args() > 0) {
|
|
|
|
$path = func_get_arg(0);
|
|
|
|
} else {
|
|
|
|
$path = $this->path;
|
|
|
|
}
|
|
|
|
if (!file_exists($path) && !is_link($path)) {
|
|
|
|
return true;
|
|
|
|
} elseif (is_link($path)) {
|
|
|
|
return unlink($path);
|
|
|
|
} elseif (!is_dir($path)) {
|
|
|
|
return unlink($path);
|
|
|
|
}
|
2020-10-21 20:10:44 +08:00
|
|
|
if (!($dh = opendir($path))) {
|
|
|
|
return false;
|
|
|
|
}
|
2020-09-16 12:24:54 +08:00
|
|
|
while (($entry = readdir($dh)) !== false) {
|
|
|
|
if ($entry != "." && $entry != "..") {
|
|
|
|
$this->rmpath($path . "/" . $entry);
|
|
|
|
}
|
|
|
|
}
|
|
|
|
return rmdir($path);
|
|
|
|
}
|
|
|
|
|
2020-10-21 20:10:44 +08:00
|
|
|
public function getpath()
|
2020-09-16 12:24:54 +08:00
|
|
|
{
|
|
|
|
if (func_num_args() > 0) {
|
|
|
|
$path = func_get_arg(0);
|
|
|
|
} else {
|
|
|
|
$path = $this->path;
|
|
|
|
}
|
|
|
|
if (is_dir($path)) {
|
|
|
|
$fs = array(array(), array(), array());
|
2020-10-21 20:10:44 +08:00
|
|
|
if (!($dh = opendir($path))) {
|
|
|
|
return false;
|
|
|
|
}
|
2020-09-16 12:24:54 +08:00
|
|
|
while (($entry = readdir($dh)) !== false) {
|
|
|
|
if ($entry != "." && $entry != "..") {
|
|
|
|
if (is_dir($entry = ___realpath($path . "/" . $entry))) {
|
|
|
|
$fs[0][] = $entry;
|
|
|
|
} elseif (is_file($entry)) {
|
|
|
|
$fs[1][] = $entry;
|
|
|
|
} else {
|
|
|
|
if ($entry != "") {
|
|
|
|
$fs[2][] = $entry;
|
|
|
|
}
|
|
|
|
}
|
|
|
|
}
|
|
|
|
}
|
|
|
|
closedir($dh);
|
2020-10-21 20:10:44 +08:00
|
|
|
if ((count($fs, 1) - 3) < 1) {
|
|
|
|
return null;
|
|
|
|
}
|
|
|
|
if (count($fs[0]) > 0) {
|
|
|
|
usort($fs[0], "___sortcmp");
|
|
|
|
}
|
|
|
|
if (count($fs[1]) > 0) {
|
|
|
|
usort($fs[1], "___sortcmp");
|
|
|
|
}
|
|
|
|
if (count($fs[2]) > 0) {
|
|
|
|
usort($fs[2], "___sortcmp");
|
|
|
|
}
|
2020-09-16 12:24:54 +08:00
|
|
|
return $fs;
|
|
|
|
} elseif (file_exists($path)) {
|
|
|
|
if (!($fs = stat($path))) {
|
|
|
|
return false;
|
|
|
|
} else {
|
|
|
|
return $fs;
|
|
|
|
}
|
|
|
|
} else {
|
|
|
|
return false;
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
2020-10-21 20:10:44 +08:00
|
|
|
public function getfinfo()
|
2020-09-16 12:24:54 +08:00
|
|
|
{
|
2020-10-21 20:10:44 +08:00
|
|
|
if (!function_exists("finfo_open")) {
|
|
|
|
return false;
|
|
|
|
}
|
2020-09-16 12:24:54 +08:00
|
|
|
$finfo = finfo_open();
|
|
|
|
if (func_num_args() > 0) {
|
|
|
|
return finfo_file($finfo, func_get_arg(0));
|
|
|
|
}
|
|
|
|
return finfo_file($finfo, $this->path);
|
|
|
|
}
|
|
|
|
|
2020-10-21 20:10:44 +08:00
|
|
|
public function getperms()
|
2020-09-16 12:24:54 +08:00
|
|
|
{
|
2020-10-21 20:10:44 +08:00
|
|
|
if (!function_exists("fileperms")) {
|
|
|
|
return false;
|
|
|
|
}
|
2020-09-16 12:24:54 +08:00
|
|
|
if (func_num_args() > 0) {
|
|
|
|
$path = func_get_arg(0);
|
|
|
|
if (($perms = fileperms($path)) === false) {
|
|
|
|
return false;
|
|
|
|
} else {
|
|
|
|
return substr(sprintf("%o", $perms), -4);
|
|
|
|
}
|
|
|
|
}
|
|
|
|
if (($perms = fileperms($this->path)) === false) {
|
|
|
|
return false;
|
|
|
|
} else {
|
|
|
|
return substr(sprintf("%o", $perms), -4);
|
|
|
|
}
|
|
|
|
}
|
|
|
|
}
|
2020-10-21 20:18:22 +08:00
|
|
|
?>
|