87 lines
2.7 KiB
PHP
87 lines
2.7 KiB
PHP
|
<?php
|
||
|
namespace nur;
|
||
|
|
||
|
use nur\b\io\IOException;
|
||
|
|
||
|
/**
|
||
|
* Class os: outils pour interagir avec le système d'exploitation
|
||
|
*/
|
||
|
class os {
|
||
|
/**
|
||
|
* créer un répertoire avec un nom unique. ce répertoire doit être supprimé
|
||
|
* manuellement quand il n'est plus utilisé.
|
||
|
*
|
||
|
* @return string le chemin du répertoire
|
||
|
* @throws IOException si une erreur se produit (impossible de créer un
|
||
|
* répertoire unique après 2560 essais)
|
||
|
*/
|
||
|
static final function mktempdir(?string $prefix=null, ?string $basedir=null): string {
|
||
|
if ($basedir === null) $basedir = sys_get_temp_dir();
|
||
|
if ($prefix !== null) $prefix .= "-";
|
||
|
$max = 2560;
|
||
|
do {
|
||
|
$dir = "$basedir/$prefix".uniqid();
|
||
|
$r = @mkdir($dir);
|
||
|
$max--;
|
||
|
} while ($r === false && $max > 0);
|
||
|
if ($r === false) {
|
||
|
throw IOException::last_error("$dir: unable to create directory");
|
||
|
}
|
||
|
return $dir;
|
||
|
}
|
||
|
|
||
|
/**
|
||
|
* Supprimer un répertoire créé avec mktempdir
|
||
|
*
|
||
|
* un minimum de vérification est effectué qu'il s'agit bien d'un répertoire
|
||
|
* généré par mktempdir
|
||
|
*/
|
||
|
static final function rmtempdir(string $tmpdir, ?string $prefix=null, ?string $basedir=null): void {
|
||
|
if ($basedir === null) $basedir = sys_get_temp_dir();
|
||
|
if ($prefix !== null) $prefix .= "-";
|
||
|
// 13 '?' parce que c'est la taille d'une chaine générée par uniqid()
|
||
|
if (fnmatch("$basedir/$prefix?????????????", $tmpdir)) {
|
||
|
shell::exec(["rm", "-rf", $tmpdir]);
|
||
|
} else {
|
||
|
throw new IOException("$tmpdir: n'est pas un répertoire temporaire");
|
||
|
}
|
||
|
}
|
||
|
|
||
|
/**
|
||
|
* supprimer tous les répertoires temporaires qui ont été créés avec le
|
||
|
* suffixe spécifié dans le répertoire $basedir
|
||
|
*/
|
||
|
static final function cleantempdirs(string $prefix, ?string $basedir=null): void {
|
||
|
if ($basedir === null) $basedir = sys_get_temp_dir();
|
||
|
$prefix .= "-";
|
||
|
// 13 '?' parce que c'est la taille d'une chaine générée par uniqid()
|
||
|
$tmpdirs = glob("$basedir/$prefix?????????????", GLOB_ONLYDIR);
|
||
|
if ($tmpdirs) {
|
||
|
shell::exec(array_merge(["rm", "-rf"], $tmpdirs));
|
||
|
}
|
||
|
}
|
||
|
|
||
|
/** s'assurer que le répertoire $dir existe */
|
||
|
static final function mkdirs(string $dir): bool {
|
||
|
if (is_dir($dir)) return true;
|
||
|
return mkdir($dir, 0777, true);
|
||
|
}
|
||
|
|
||
|
/** créer le répertoire qui va contenir le fichier $file */
|
||
|
static final function mkdirof(string $file): bool {
|
||
|
if (file_exists($file)) return true;
|
||
|
$dir = path::dirname($file);
|
||
|
if (file_exists($dir)) return true;
|
||
|
return mkdir($dir, 0777, true);
|
||
|
}
|
||
|
|
||
|
/** retourner le répertoire $HOME */
|
||
|
static final function homedir(): string {
|
||
|
$homedir = getenv("HOME");
|
||
|
if ($homedir === false) {
|
||
|
$homedir = posix_getpwuid(posix_getuid())["dir"];
|
||
|
}
|
||
|
return path::abspath($homedir);
|
||
|
}
|
||
|
}
|