Skip to content

Instantly share code, notes, and snippets.

@dastanaron
Last active February 2, 2017 12:34
Show Gist options
  • Star 0 You must be signed in to star a gist
  • Fork 0 You must be signed in to fork a gist
  • Save dastanaron/e31f51eea4276ffd7ad6d5f40c1716c2 to your computer and use it in GitHub Desktop.
Save dastanaron/e31f51eea4276ffd7ad6d5f40c1716c2 to your computer and use it in GitHub Desktop.
ValidatorFiles
<?php
/*
* Класс ValidatorFiles предназначен для проверки файлов или папок на возможность создания, записи, удаления и возможности манипуляций с файлами
* Класс не поддерживает вызов статических методов, при вызове класса, необходимо передать переменные пути и флаг вывода массива
*
* |-----Свойства класса-------------------------------------------------|
* | protected $path - путь, над которым будет произведен анализ |
* | protected $showaccess - флаг вывода информации |
* |---------------------------------------------------------------------|
*
* |-----Методы класса---------------------------------------------------|
* | public ISPermissionWrite() - Описание метода ниже |
* | private getaccesspermission() - внутренний метод класса |
* | для сбора информации о владельце |
* |---------------------------------------------------------------------|
*
* Метод ISPermissionWrite() - проверяет возможность записи в файл, или создание файла в папке, взависимости от переданного, при вызове экземпляра класса пути
* Данный метод используем переменные переданные при вызове класса. Если при создании экземпляра класса передан второй параметр true, то функция возвратит массив
* с информацией о владельце файла или папки, переданном по умолчанию. Если второй параметр не передан или false, то метод будет возвращать true, в случае
* возможности записи, или false в обратном случае
*
*
* Пример кода:
* $validator = new ValidatorFiles('inc/', true);
* var_dump($validator->ISPermissionWrite()); //Выведет массив данных о владельце папки
*
*
*
*/
class ValidatorFiles {
protected $path;
protected $showaccess;
public function __construct($path='./', $showaccess=false) {
if(is_string($path) && is_bool($showaccess)) {
$this->path = $path;
$this->showaccess = $showaccess;
}
else {
print 'Ошибка: не верные типы передаваемых параметров';
}
}
public function ISPermissionWrite() {
if (is_dir($this->path)) {
$file = $this->path . '/test.test';
@file_put_contents($file, 'test');
if (file_exists($file)) {
unlink($file);
if ($this->showaccess) {
return $this->getaccesspermission();
}
else {
return true;
}
}
else {
if ($this->showaccess) {
return $this->getaccesspermission();
}
else {
return false;
}
}
}
else {
if(file_exists($this->path)) {
if ($this->showaccess) {
return $this->getaccesspermission();
}
else {
return is_writable($this->path);
}
}
}
}
private function getaccesspermission() {
$accessparam = array();
$accessparam['access_rule'] = substr(sprintf('%o', fileperms($this->path)), -4);
$accessparam['owner_uid'] = fileowner($this->path);
$accessparam['owner'] = posix_getpwuid ($accessparam['owner_uid']);
return $accessparam;
}
}
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment