21.10.2017 / 10:57 | |
Koenig Модератор форума Сейчас: Offline
Имя: Дмитрий Откуда: Калининград(Koenigsberg) Регистрация: 23.01.2011
| __________________
Магистр Мёда |
21.10.2017 / 13:07 | |
GreeNLine Пользователь Сейчас: Offline
Имя: Саша Регистрация: 02.02.2012
| Цитата Koenig: GreeNLine, ты угараешь? https://ru.wikipedia.org/wiki/ORMнет, не угараю. я не знал по правде. о дата мапперах я знал, об орм слышал, но не пользовался.. |
23.10.2017 / 11:46 | |
Koenig Модератор форума Сейчас: Offline
Имя: Дмитрий Откуда: Калининград(Koenigsberg) Регистрация: 23.01.2011
| GreeNLine, Орм можно организовать через два паттерна, active record, data mapper. Я через первый , так по проще, решил сделать
__________________
Магистр Мёда |
23.10.2017 / 13:06 | |
GreeNLine Пользователь Сейчас: Offline
Имя: Саша Регистрация: 02.02.2012
| Цитата Koenig: GreeNLine, Орм можно организовать через два паттерна, active record, data mapper. Я через первый , так по проще, решил сделатья на дата маппкр опирался, ну и на ебин с ява.
|
23.10.2017 / 20:20 | |
GreeNLine Пользователь Сейчас: Offline
Имя: Саша Регистрация: 02.02.2012
| Извиняюсь, возможно не в тему. Не хочу создавать кучу ненужных тем, раз пошла такая пьянка товарищи, занялся немного файловой системой, опять же, спасибо java. // File Открыть спойлер Закрыть спойлер <?php
namespace framework\file;
/**
* @author 3kZO
*/
class File
{
/** @var string */
private $file;
public function __construct($file) {
$this->file = $file;
}
public function exists() {
return file_exists($this->file);
}
public function isFile() {
return is_file($this->file);
}
public function isDirectory() {
return is_dir ($this->file);
}
public function getPath() {
return dirname($this->file);
}
public function getName() {
return basename($this->file);
}
public function getFileName() {
/** @var string */
$name = $this->getName();
if (false !== ($pos = strrpos($name, '.'))) {
return substr($name, 0, $pos);
}
}
public function getExtension() {
/** @var string */
$name = $this->getName();
if (false !== ($pos = strpos($name, '.'))) {
return substr($name, $pos+1);
}
}
public function canRead() {
return is_readable($this->file);
}
public function canWrite() {
return is_writable($this->file);
}
public function canExecute() {
return is_executable($this->file);
}
public function createNewFile() {
if (!$this->exists())
return @file_put_contents($this->file);
}
public function createNewDirectory() {
if (!$this->exists())
return @mkdir($this->file, 0700);
}
public function delete() {
if ($this->isFile()) {
@unlink($this->file);
} else {
if (false !== ($h = @opendir($this->file))) {
while(false !== ($entry = @readdir($h)))
{
if ($entry != '.'
&& $entry != '..')
{
$path = $this->file
. '/'
. $entry;
$file = new File($path);
$file->delete();
}
}
@closedir($h);
@rmdir($this->file);
}
}
return $this;
}
public function getAbsolutePath() {
return realpath($this->file);
}
public function getLastModified() {
return filemtime($thus->file);
}
public function setLastModified($time = false) {
if ($time)
touch($this->file, (int)$time);
else
touch($this->file);
return $this;
}
public function renameTo($new) {
return @rename($this->file, $new);
}
public function getSize() {
if ($this->isFile()) {
return filesize($this->file);
}
$size = 0;
if (false !== ($h = @opendir($this->file))) {
while(false !== ($entry = @readdir($h)))
{
if ($entry != '.'
&& $entry != '..')
{
$path = $this->file
. '/'
. $entry;
$file = new File($path);
$size += $file->getSize();
}
}
@closedir($h);
}
return $size;
}
public function setPermission($mode) {
@chmod($this->file, $mode);
return $this;
}
public function getPermission() {
return substr(sprintf('%o', fileperms($this->file)), -4);
}
public function getListFiles(FileFilterInterface $filter = null) {
if ($this->isDirectory()) {
$list = [];
if (false !== ($h = @opendir($this->file))) {
while(false !== ($entry = @readdir($h)))
{
if ($entry != '.'
&& $entry != '..')
{
$path = $this->file
. '/'
. $entry;
/** @var \framework\file\File */
$file = new File($path);
if (null === $filter ||
$filter->accept($file))
$list[] = $path;
if ($file->isDirectory()) {
foreach($file->getListFiles($filter) as $path) {
$list[] = $path;
}
}
}
}
@closedir($h);
}
return $list;
}
}
}
Не буду утверждать что данный класс есть решение всех проблем.. + Рекурсивное удаление. (@see delete) + Рекурсивный подсчёт занятого места. (@see getSize) + Установка/Получение прав доступа к файлу/директории. + Умный вывод всего содержимого с возможностью создавать свои фильтры. Открыть спойлер Закрыть спойлер $file = new \framework\file\File(ROOT . '/protected');
print_r($file->getListFiles(new \framework\file\Filters\DirectoryFilter()));
Открыть спойлер Закрыть спойлер Array
(
[0] => C:/xampp/htdocs/protected/app
[1] => C:/xampp/htdocs/protected/app/cache
[2] => C:/xampp/htdocs/protected/app/controllers
[3] => C:/xampp/htdocs/protected/app/entities
[4] => C:/xampp/htdocs/protected/app/models
[5] => C:/xampp/htdocs/protected/app/templates
[6] => C:/xampp/htdocs/protected/app/templates/errors
[7] => C:/xampp/htdocs/protected/app/templates/forum
[8] => C:/xampp/htdocs/protected/app/templates/index
[9] => C:/xampp/htdocs/protected/app/templates/user
[10] => C:/xampp/htdocs/protected/framework
[11] => C:/xampp/htdocs/protected/framework/cache
[12] => C:/xampp/htdocs/protected/framework/db
[13] => C:/xampp/htdocs/protected/framework/db/Driver
[14] => C:/xampp/htdocs/protected/framework/db/exceptions
[15] => C:/xampp/htdocs/protected/framework/exceptions
[16] => C:/xampp/htdocs/protected/framework/file
[17] => C:/xampp/htdocs/protected/framework/file/Filters
[18] => C:/xampp/htdocs/protected/framework/http
[19] => C:/xampp/htdocs/protected/framework/http/session
[20] => C:/xampp/htdocs/protected/framework/http/session/Flash
[21] => C:/xampp/htdocs/protected/framework/lang
[22] => C:/xampp/htdocs/protected/framework/libs
[23] => C:/xampp/htdocs/protected/framework/providers
[24] => C:/xampp/htdocs/protected/framework/routing
[25] => C:/xampp/htdocs/protected/framework/template
[26] => C:/xampp/htdocs/protected/framework/user
[27] => C:/xampp/htdocs/protected/framework/user/entities
[28] => C:/xampp/htdocs/protected/framework/user/models
[29] => C:/xampp/htdocs/protected/framework/vendor
[30] => C:/xampp/htdocs/protected/framework/vendor/bbcode
[31] => C:/xampp/htdocs/protected/framework/vendor/bbcode/src
[32] => C:/xampp/htdocs/protected/framework/vendor/bbcode/src/Buffer
[33] => C:/xampp/htdocs/protected/framework/vendor/bbcode/src/Parser
[34] => C:/xampp/htdocs/protected/framework/vendor/bbcode/src/Syntax
[35] => C:/xampp/htdocs/protected/framework/vendor/bbcode/src/Tokenizer
)
FileFilterInterface Открыть спойлер Закрыть спойлер <?php
namespace framework\file;
/**
* @author 3kZO
*/
interface FileFilterInterface
{
public function accept(File $file);
}
// Пример фильтра Открыть спойлер Закрыть спойлер <?php
namespace framework\file\Filters;
use framework\file\FileFilterInterface;
use framework\file\File;
/**
* @author 3kZO
*/
class DirectoryFilter implements FileFilterInterface
{
public function accept(File $file) {
return $file->isDirectory();
}
}
Смысл фильтра в том, чтобы он отсеивал все файлы и оставлял только директории. Таким образом можно отсеивать всё, что вам не нужно, а именно: по размеру файла, по расширению и т.п Возможно что-то упустил. Выслушаю вашу критику. Сильно не бить |
23.10.2017 / 23:17 | |
GreeNLine Пользователь Сейчас: Offline
Имя: Саша Регистрация: 02.02.2012
| |
24.10.2017 / 11:47 | |
Koenig Модератор форума Сейчас: Offline
Имя: Дмитрий Откуда: Калининград(Koenigsberg) Регистрация: 23.01.2011
| __________________
Магистр Мёда Изменено Koenig (24.10 / 11:53) (всего 1 раз) |
24.10.2017 / 11:55 | |
Koenig Модератор форума Сейчас: Offline
Имя: Дмитрий Откуда: Калининград(Koenigsberg) Регистрация: 23.01.2011
| GreeNLine, Твой класс сильно перегружен, тебе надо ещё глянуть итераторы директориий там же в spl
__________________
Магистр Мёда |
24.10.2017 / 12:05 | |
Koenig Модератор форума Сейчас: Offline
Имя: Дмитрий Откуда: Калининград(Koenigsberg) Регистрация: 23.01.2011
| GreeNLine, Я сто лет назад через spl файловый менеджер написал https://annimon.com/code/715Оттуда кусок __________________
Магистр Мёда |
24.10.2017 / 12:38 | |
GreeNLine Пользователь Сейчас: Offline
Имя: Саша Регистрация: 02.02.2012
| Цитата Koenig: GreeNLine, Я сто лет назад через spl файловый менеджер написал https://annimon.com/code/715 Оттуда кусокНу, мне кажется мой класс облегчённей в разы.. Пример, реализовал файловый кэш. Открыть спойлер Закрыть спойлер <?php
namespace framework\cache;
use framework\io\File;
use Exception;
use framework\exceptions\IOException;
/**
* @author 3kZO
*/
class Cache
{
/**
* @var string
*/
private $cacheDir;
public function __construct($cacheDir) {
try
{
/** @var \framework\io\File */
$file = new File($cacheDir);
if (!$file->isDirectory() ||
!$file->isReadable())
throw new IOException(/**/);
if (!$file->exists())
$this->createNewDirectory();
$this->cacheDir = $cacheDir;
} catch(IOException $e) {
throw $e;
}
}
public function getAbsolutePath($name) {
return $this->cacheDir . '/' . (string)$name . '.cache';
}
public function get($name) {
try
{
/** @var string */
$path = $this->getAbsolutePath($name);
/** @var \framework\io\File */
$file = new File($path);
if (!$file->exists() ||
!$file->isFile() ||
!$file->isReadable())
return null;
/** @var [] */
$data = @unserialize(@file_get_contents($path));
if (($file->getLastModified()+(int)@$data[0]) > time())
return null;
return @$data[1];
} catch(IOException $e) {
return null;
}
}
public function set($name, $content = false, $expire = false) {
try
{
/** @var string */
$path = $this->getAbsolutePath($name);
/** @var \framework\io\File */
$file = new File($path);
if (false === $this->get($name)) {
$file->createNewFile();
if (!@file_put_contents($path, @serialize([(int)$expire, $content])))
throw new IOException();
} else {
/** @var [] */
$data = @unserialize(@file_get_contents($path));
if (!@file_put_contents($path, @serialize([
($expire
? (int)$expire
: @$data[0]),
($content
? $content
: @$data[1])
])))
throw new IOException();
$file->touch();
}
} catch(IOException $e) {
throw $e;
}
return $this;
}
}
|