*/
namespace ImageHeberg;
use ArrayObject;
use Imagick;
use PDO;
/**
* Bibliothèque d'outils pour la gestion du système
*/
abstract class HelperSysteme
{
/**
* Taille mémoire maximale autorisée
* @see http://php.net/manual/fr/function.ini-get.php
* @return int
*/
public static function getMemoireAllouee(): int
{
// Récupération de la valeur du php.ini
$valBrute = trim(ini_get('memory_limit'));
// memory_limit=0 / -1 est possible
if ($valBrute <= 0) {
// Arbitrairement limite à 2Go
$valBrute = '2G';
}
// Gestion de l'unité multiplicatrice...
$unite = strtolower(substr($valBrute, -1));
$monRetour = (int)substr($valBrute, 0, -1);
switch ($unite) {
case 'g':
$monRetour *= 1024;
// no break
case 'm':
$monRetour *= 1024;
// no break
case 'k':
$monRetour *= 1024;
// no break
}
return $monRetour;
}
/**
* Version de PHP
* @return string
*/
public static function getPhpVersion(): string
{
return PHP_VERSION . ' - ' . PHP_OS;
}
/**
* Version de Imagick
* @return string
*/
public static function getImagickVersion(): string
{
return Imagick::getVersion()['versionString'];
}
/**
* Version de MySQL
* @return string
*/
public static function getMysqlVersion(): string
{
// Exécution de la requête
return MaBDD::getInstance()->getAttribute(PDO::ATTR_SERVER_VERSION);
}
/**
* Headers HTTP status code
* @param string $url URL à tester
* @return string retour HTTP
*/
public static function getStatusHTTP(string $url): string
{
$classe = 'danger';
$fa = 'exclamation-circle';
// On regarde ce que ça donne
$resultat = get_headers($url);
// Est-ce le résultat attendu ?
if (stripos($resultat[0], 'Forbidden')) {
$classe = 'success';
$fa = 'check';
}
// Mise en forme du résultat
return ' ' . $resultat[0] . '';
}
/**
* Vérifie de manière récursive l'écriture dans un dossier
* @param string $folder Path du dossier parent
* @return ArrayObject
*/
public static function isRecursivelyWritable(string $folder): ArrayObject
{
// On évite le // dans le path... (estéthique)
if (str_ends_with($folder, '/')) {
$folder = substr($folder, 0, -1);
}
$monRetour = new ArrayObject();
if (is_writable($folder)) {
$monRetour->append(' ' . $folder . '');
} else {
$monRetour->append(' ' . $folder . '');
}
// Dossiers enfants
$objects = glob($folder . '/*', GLOB_ONLYDIR);
foreach ($objects as $object) {
// Je vérifie si les dossiers enfants sont écrivables
$sousRetour = self::isRecursivelyWritable($object);
// Gestion de l'itération...
foreach ($sousRetour as $unRetour) {
$monRetour->append($unRetour);
}
}
return $monRetour;
}
/**
* Volume des images
* @return float
*/
public static function getHDDUsage(): float
{
// Poids de l'ensemble des images
$req = 'SELECT SUM(im.size) AS images, (
SELECT SUM(th.size)
FROM thumbnails th
) AS miniatures
FROM images im';
// Exécution de la requête
$resultat = MaBDD::getInstance()->query($req);
// Récupération de la valeur
$value = $resultat->fetch();
return round(($value->images + $value->miniatures) / (1024 * 1024 * 1024));
}
}