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

Предоставление удаления файла передаётся через заранее включённый 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
PHP universal delete file
    #39830914
shonli95
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Код: 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
PHP universal delete file
    #39831264
Фотография ScareCrow
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
авторreturn (DIRECTORY_SEPARATOR == '\\') ?

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

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

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

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




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

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

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



...

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


Да и смысл о ней говорит сейчас совершенно не стоит, когда вызов самой - же себя, не имеет никакой потенциально опасно узкой - горлышка бутылки
...
Рейтинг: 0 / 0
PHP universal delete file
    #39831383
shonli95
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Код: 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
PHP universal delete file
    #39831386
Фотография Дегтярев Евгений
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
авторБезусловно это вариация с PHP_OS на первый взгляд может показаться и правильной, но совершенно неверной с точки зрения оптимизации. Ведь нам придётся сравнивать большую строку с вариацией из WINNT, Windows, Darwin, Linux и других возможных вариаций возврата
гуру оптимизации
...
Рейтинг: 0 / 0
PHP universal delete file
    #39831391
shonli95
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Дегтярев Евгений,

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

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


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



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

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


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

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

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


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