PHP

[PHP] Calculer la taille d’un dossier

Nouveau snippet aujourd’hui que j’ai été amené à utiliser dans un projet PHP personnel. Ce petit bout de code va vous permettre de calculer la taille d’un dossier, de vous l’arrondir et de vous ressortir la bonne unité entre K, M, G, P et T.

function getFolderSize($path){
	$size = 0;
	foreach(new RecursiveIteratorIterator(new RecursiveDirectoryIterator($path)) as $file){
		$size += $file->getSize();
	}
 
	$factor = (int)(log($size, 1000));
	$units = ['B', 'K', 'M', 'G', 'T', 'P'];
	$size = sprintf("%.2f", $size / pow(1000, $factor)) . $units[$factor];
 
	return $size;
}

À noter que PHP 5.5 peut vous permettre d’éviter d’avoir à traiter un tableau pour la variable $units. La fonction devient alors :

function getFolderSize($path){
	$size = 0;
	foreach(new RecursiveIteratorIterator(new RecursiveDirectoryIterator($path)) as $file){
		$size += $file->getSize();
	}
 
	$factor = (int)(log($size, 1000));
	$units = 'BKMGTP';
	$size = sprintf("%.2f", $size / pow(1000, $factor)) . @$units[$factor];
 
	return $size;
}

Et vous pouvez aussi ajouter un paramètre afin de préciser très facilement le nombre de chiffres après la virgule :

function getFolderSize($path, $decimals = 2){
	$size = 0;
	foreach(new RecursiveIteratorIterator(new RecursiveDirectoryIterator($path)) as $file){
		$size += $file->getSize();
	}
 
	$factor = (int)(log($size, 1000));
	$units = 'BKMGTP';
	$size = sprintf("%.{$decimals]f", $size / pow(1000, $factor)) . @$units[$factor];
 
	return $size;
}

De rien 😉

Aide : la documentation PHP sur la fonction filesize()

Cet article vous a plu ? Partagez-le sur les réseaux sociaux !

Twitter Facebook Google Plus email

La distribution de contenu avec Nginx et X-Accel

C’est la problématique du jour : comment distribuer du contenu à des utilisateurs tout en ayant la possibilité de limiter la bande passante au cas par cas, en fonction de leur niveau d’abonnement ?

Source : nginx.org

Source : nginx.org

Et oui souvenez-vous : mon projet de fin d’année (qui consiste en une solution dropbox-like) doit proposer différents niveaux d’abonnement aux clients, comprenant différents niveaux de stockage et de bande passante. J’ai mis du temps à chercher une solution pour limiter la bande passante des utilisateurs à la volée car j’avais plusieurs contraintes :

  • Les développeurs refusaient d’implémenter cette fonctionnalité côté code, ce que je comprends tout à fait. Cela n’aurait pas été très propre…
  • Les différents tutoriels proposés sur le web indiquent généralement comment brider la bande passante par IP, or cela ne me suffit pas.
  • Il faut aussi s’assurer que l’utilisateur ne puisse pas modifier sa bande passante. Ce qui impose d’éviter tout mécanisme côté client (au revoir cookies…).

Et après plusieurs mois d’acharnement, c’est finalement Nginx qui m’apporte la solution !

(suite…)

Cet article vous a plu ? Partagez-le sur les réseaux sociaux !

Twitter Facebook Google Plus email

[PHP] Redimensionner des images automatiquement

Wallpaper PHP - Code while awake
Ce matin c’est un snippet PHP que je vous propose : une petite fonction qui permet de jouer avec les dimensions d’une image. Cette fonction bien pratique me sert beaucoup dans l’un de mes projets, voici ce qu’elle sait faire :

  • Redimensionnement d’images en conservant les proportions (calcul de la largeur en fonction de la hauteur ou de la hauteur en fonction de la largeur),
  • Renommage et déplacement de l’image où vous voulez,
  • Formats acceptés : JPEG, GIF et PNG,
  • Utilisation au choix de la librairie GD ou d’ImageMagick,
  • Conversion automatique en JPEG,
  • Enfin, si aucun redimensionnement n’est demandé, la fonction permet aussi de convertir une image GIF ou PNG en JPEG.

(suite…)

Cet article vous a plu ? Partagez-le sur les réseaux sociaux !

Twitter Facebook Google Plus email

[PHP] Convertir un PDF en .JPG avec Image Magic

Image Magic est une extension PHP normalement native qui permet de réaliser un grand nombre d’opération parfois très avancées sur des images.

Créations d’effets visuels (reflets), parcours d’images dans un dossier, redimensionnements, création de GIF animés… Les possibilités sont vraiment très variées. Nous allons voir comment cette extension peut nous permettre de convertir un .pdf en .jpg de manière simple et efficace, en à peine 10 lignes.

Explications

Tout d’abord assurez-vous que l’extension est bien installée sur votre serveur.

On commence par créer deux variables (le code est explicite) :

$pdf_file = './pdf/demo.pdf';
$save_to = './jpg/demo.jpg';

On exécute maintenant le commande Imagemagick convert.

exec('convert "'.$pdf_file.'" -colorspace RGB -resize 800 "'.$save_to.'"', $output, $return_var);

Enfin un petit test pour vérifier que tout c’est bien passé :

if($return_var == 0) {
     print "Conversion OK";
}
else print "Conversion failed.<br />".$output;

La fonction complète :

$pdf_file = './pdf/demo.pdf';
$save_to = './jpg/demo.jpg';
 
exec('convert "'.$pdf_file.'" -colorspace RGB -resize 800 "'.$save_to.'"', $output, $return_var);
 
if($return_var == 0) {
     print "Conversion OK";
}
else print "Conversion failed.<br />".$output;

Si vous souhaitez plus d’information sur la commande convert, ou bien sur ImageMagick. J’espère que ce petit snippet vous servira !

Source : snipplr.com

Cet article vous a plu ? Partagez-le sur les réseaux sociaux !

Twitter Facebook Google Plus email