Гость
Форумы / PHP, Perl, Python [игнор отключен] [закрыт для гостей] / PHP universal delete file / 15 сообщений из 15, страница 1 из 1
26.06.2019, 22:46
    #39830910
shonli95
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
PHP universal delete file
Какие могут быть недостатки у кода ниже ?

Предоставление удаления файла передаётся через заранее включённый shell в файловую систему OS

Код: php
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
25.
26.
27.
28.
// universal delete file and dirs (Windows, Other os)
function DeleteFileString(string $file) {
	if(is_file($file = strOsSlesh($file))) {
		return unlink($file);
	} elseif(is_dir($file)) {
		return (DIRECTORY_SEPARATOR == '\\') ?
			`rd /S /q $file` // Windows delele all files
		:   `rm -rf  $file`; // Other os delele all files
	}
	return false;
}

function DeleteFile($file, string $Split = '|', Callable $RemoveCallBack = null) {
	if(is_string($file)) {
		if(strpos($file = trim($file), $Split) === false)
			return (!is_callable($RemoveCallBack) or $RemoveCallBack($file))
					? DeleteFileString($file) : true;
					
		$file = explode($Split, $file);
	}
	
	if(is_array($file)) {
		foreach($file as $Value)
			DeleteFile($Value, $Split, $RemoveCallBack);
		return true;
	}
	return false;
}




Плюсы в том, что работает на много обычных вариантов которые предоставлены в интернете
...
Рейтинг: 0 / 0
26.06.2019, 23:16
    #39830914
shonli95
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
PHP universal delete file
Код: sql
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
Array
(
    [php] => 7.3.4
    [0] => Array
        (
            [DeleteFileString] => 3.909654
            [IteratorDeleteDir] => 11.406819
        )

)




Код: php
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
25.
26.
27.
28.
29.
30.
31.
32.
33.
34.
35.
36.
37.
$dir1 = "\Delete1";
$dir2 = "/Delete2/";

function DeleteFileString($file) {
	if(is_file($file = $file)) {
		return unlink($file);
	} elseif(is_dir($file)) {
		return (DIRECTORY_SEPARATOR == '\\') ?
			`rd /S /q "$file"` // Windows delele all files
		:   `rm -rf  "$file"`; // Other os delele all files
	}
	return false;
}

function IteratorDeleteDir($dir) {
	if(is_dir($dir)) {
		foreach (new RecursiveIteratorIterator(
				 new RecursiveDirectoryIterator($dir, FilesystemIterator::SKIP_DOTS),
					 RecursiveIteratorIterator::CHILD_FIRST) as $file)
			$file->isDir() ?  rmdir($file) : unlink($file); 
		
		if(is_dir($dir))
			rmdir($dir);
	}
}

$Res = array();
$Res['DeleteFileString'] = microtime(true);
DeleteFileString($dir1);
$Res['DeleteFileString'] = sprintf('%f', microtime(true) - $Res['DeleteFileString']);


$Res['IteratorDeleteDir'] = microtime(true);
IteratorDeleteDir($dir2);
$Res['IteratorDeleteDir'] = sprintf('%f', microtime(true) - $Res['IteratorDeleteDir']);

Messages(['php' => phpversion(), $Res]);



Данная функция очень быстро удаляет файлы, по сравнению с итераторами
...
Рейтинг: 0 / 0
27.06.2019, 16:21
    #39831264
ScareCrow
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
PHP universal delete file
авторreturn (DIRECTORY_SEPARATOR == '\\') ?

авторvar_dump(PHP_OS);
...
Рейтинг: 0 / 0
27.06.2019, 19:12
    #39831357
Hett
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
PHP universal delete file
для начала бы PSR-2 почитать
...
Рейтинг: 0 / 0
27.06.2019, 19:12
    #39831358
Hett
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
PHP universal delete file
и про рекурсию
...
Рейтинг: 0 / 0
27.06.2019, 20:15
    #39831381
shonli95
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
PHP universal delete file
ScareCrow,

Безусловно это вариация с PHP_OS на первый взгляд может показаться и правильной, но совершенно неверной с точки зрения оптимизации. Ведь нам придётся сравнивать большую строку с вариацией из WINNT, Windows, Darwin, Linux и других возможных вариаций возврата

Что наводит на мысль, что константа DIRECTORY_SEPARATOR всегда возвращает на Windows слэш \ когда во всех других системах обратную.

PHP работает на системах линкус подобных, что включает файловую структуру управляющей подкомандой rm когда на винде RD или же её полное название RMDIR




Hettдля начала бы PSR-2 почитать

В наше время, существует очень много хороших редакторов которые позволяют настраивать синтаксис под пользователя - не придерживаясь предпочтений PSR общих.

При открытие в редакторе со стандартными настройками, и принудительном форматирование он выровняет код под ваш любимо задроченный PSR-2 а меня же совершенно очень сильно дезинформируют переносу { на след строку и много других глупых неурядиц , которые так и мозолят глаз не давая свободу воли - светлого ума



...

Щтё такое рекурсия ? Рекурсия это вызов функции самой - же себя. И больше ничего. О ней читать никогда не стоит, когда ты понимаешь базовую мысль самой рекурсии.


Да и смысл о ней говорит сейчас совершенно не стоит, когда вызов самой - же себя, не имеет никакой потенциально опасно узкой - горлышка бутылки
...
Рейтинг: 0 / 0
27.06.2019, 20:17
    #39831383
shonli95
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
PHP universal delete file
Код: php
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
25.
26.
27.
28.
29.
30.
31.
32.
33.
34.
35.
36.
37.
38.
39.
40.
41.
42.
43.
44.
45.
46.
47.
48.
49.
50.
51.
52.
53.
54.
55.
56.
57.
58.
59.
60.
61.
62.
63.
64.
65.
66.
67.
68.
69.
70.
71.
72.
73.
74.
75.
76.
77.
78.
79.
80.
81.
82.
83.
84.
85.
86.
87.
88.
89.
90.
91.
92.
93.
94.
<?

$dir1 = "Delete1";
$dir2 = "Delete2/";
$dir3 = "Delete3/";
$dir4 = "Delete4/";
$dir5 = "Delete5/";
 
 
function DeleteFileString($file) {
    if(is_file($file = $file)) {
        return unlink($file);
    } elseif(is_dir($file)) {
        return (DIRECTORY_SEPARATOR == '\\') ?
            `rd /S /q "$file"` // Windows delele all files
        :   `rm -rf  "$file"`; // Other os delele all files
    }
    return false;
}
 
function IteratorDeleteDir($dir) {
    if(is_dir($dir)) {
        foreach (new RecursiveIteratorIterator(
                 new RecursiveDirectoryIterator($dir, FilesystemIterator::SKIP_DOTS),
                     RecursiveIteratorIterator::CHILD_FIRST) as $file)
            $file->isDir() ?  rmdir($file) : unlink($file); 
        
        if(is_dir($dir))
            rmdir($dir);
    }
}
 
function scandirDelete($dir) {
    if(!is_dir($dir)) return false;
    $files = array_diff(scandir($dir), array('.','..'));
    foreach ($files as $file) {
        $a = "$dir/$file";
        is_dir($a) ? scandirDelete($a) : unlink($a);
    }
    return rmdir($dir);
} 
 
function globDelete($dir) {
    if(!is_dir($dir)) return false;
    foreach (glob("$dir\\*", GLOB_MARK) as $file)
        is_dir($file) ? globDelete($file) : unlink($file);
    return rmdir($dir);
} 
 
 
function opendirDelete($dir) {
    if (is_dir($dir)) {
        if ($dh = opendir($dir)) {
            $dirDelete = [];
            while (($file = readdir($dh)) !== false) {
                 if ($file != "." && $file != "..") {
                    $file = $dir . '/' . $file;
                    is_dir($file) ? opendirDelete($file) : unlink($file);
                    
                 }
            }
            closedir($dh);
        }
        return rmdir($dir);
    }
    return false;
}
 
$Res = array();
$Res['DeleteFileString'] = microtime(true);
DeleteFileString($dir1);
$Res['DeleteFileString'] = sprintf('%f', microtime(true) - $Res['DeleteFileString']);
 
 
$Res['IteratorDeleteDir'] = microtime(true);
IteratorDeleteDir($dir2);
$Res['IteratorDeleteDir'] = sprintf('%f', microtime(true) - $Res['IteratorDeleteDir']);
 
 
 
$Res['scandirDelete'] = microtime(true);
scandirDelete($dir3);
$Res['scandirDelete'] = sprintf('%f', microtime(true) - $Res['scandirDelete']);
 
 
$Res['globDelete'] = microtime(true);
globDelete($dir4);
$Res['globDelete'] = sprintf('%f', microtime(true) - $Res['globDelete']);
 
$Res['opendirDelete'] = microtime(true);
opendirDelete($dir5);
$Res['opendirDelete'] = sprintf('%f', microtime(true) - $Res['opendirDelete']);
 
pre(['php' => phpversion(), $Res]);




[php] => 7.3.4
[DeleteFileString] => 5.343348
[IteratorDeleteDir] => 11.705709
[scandirDelete] => 11.533627
[globDelete] => 13.708378
[opendirDelete] => 11.481467
...
Рейтинг: 0 / 0
27.06.2019, 20:30
    #39831386
Дегтярев Евгений
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
PHP universal delete file
авторБезусловно это вариация с PHP_OS на первый взгляд может показаться и правильной, но совершенно неверной с точки зрения оптимизации. Ведь нам придётся сравнивать большую строку с вариацией из WINNT, Windows, Darwin, Linux и других возможных вариаций возврата
гуру оптимизации
...
Рейтинг: 0 / 0
27.06.2019, 20:35
    #39831391
shonli95
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
PHP universal delete file
Дегтярев Евгений,

Назовите пожалуйста хотя бы одну причину, почему мой вариант неверен? И каковы причины, приводящийся к неисправности кода

Или это всего лишь эстетическая часть Алёши ? Что бы сделать (strtoupper(substr(PHP_OS, 0, 3)) === 'WIN')
...
Рейтинг: 0 / 0
27.06.2019, 20:45
    #39831395
shonli95
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
PHP universal delete file
shonli95Что наводит на мысль, что константа DIRECTORY_SEPARATOR всегда возвращает на Windows слэш \ когда во всех других системах обратную.


Из офф доки
...
Рейтинг: 0 / 0
28.06.2019, 13:53
    #39831647
Hett
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
PHP universal delete file
shonli95
В наше время, существует очень много хороших редакторов которые позволяют настраивать синтаксис под пользователя - не придерживаясь предпочтений PSR общих.



Осталось только настроить тех бедолаг, что после вас будут эту лапшу разгребать.
...
Рейтинг: 0 / 0
28.06.2019, 13:56
    #39831649
Hett
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
PHP universal delete file
Я не дочитал мысль до конца:

авторПри открытие в редакторе со стандартными настройками, и принудительном форматирование он выровняет код под ваш любимо задроченный PSR-2 а меня же совершенно очень сильно дезинформируют переносу { на след строку и много других глупых неурядиц , которые так и мозолят глаз не давая свободу воли - светлого ума


1. Редактор не сможет исправить все моменты. Например он не будет имена переменных приводить в нужный кейс и еще много чего.
2. После того как программист отформатирует, вы то как будете с кодом работать с глупыми неурядицами из PSR-2 ?
...
Рейтинг: 0 / 0
28.06.2019, 17:12
    #39831732
Дегтярев Евгений
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
PHP universal delete file
Hett,

автору некогда отвлекаться на это
тоже своего рода "оптимизация"
...
Рейтинг: 0 / 0
28.06.2019, 19:22
    #39831787
sxq
sxq
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
PHP universal delete file
Объясните, зачем нужно большое быстродействие для массового удаления файлов?
у вас часто такое встречается, когда часто нужно удалять так много, что подождать лишнюю секунду нельзя?
...
Рейтинг: 0 / 0
01.07.2019, 12:25
    #39832213
ScareCrow
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
PHP universal delete file
авторБезусловно это вариация с PHP_OS на первый взгляд может показаться и правильной, но совершенно неверной с точки зрения оптимизации

а массив?
...
Рейтинг: 0 / 0
Форумы / PHP, Perl, Python [игнор отключен] [закрыт для гостей] / PHP universal delete file / 15 сообщений из 15, страница 1 из 1
Целевая тема:
Создать новую тему:
Автор:
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]