Posté le 08 Septembre 2007 à 17:55
Vous vous souvenez peut-être de l'article "Un partage de fichiers simple et efficace". La fonction était bien jolie, mais une classe, c'est plus la classe :-D.pSharing est une classe PHP qui vous permet d'intégrer très facilement un partage de fichier dans n'importe quelle page PHP. Cette classe est bien plus puissante et a bien plus de fonctionnalités que la fonction présenté dans l'article suscité (l'est marrant ce mot...).
Si vous voulez un exemple de ce que peut faire pSharing, vous pouvez aller voir mon partage de fichiers sur http://shared.p4bl0.net/.
Attention, cet article s'adresse aux personnes ayant déjà des connaissances en PHP, je ne vais pas tout détailler et je risque de passer assez vite sur certains points pouvant ne pas être évident pour un débutant :-)
J'ai donc écris ma première classe PHP. Jusqu'à présent j'avais déjà utilisé des classes PHP (xajax en l'occurence) mais je n'avais jamais écris moi même de classe PHP. C'est donc une nouvelle partie de la POO en PHP que j'ai apprise en l'écrivant.
Voyons maintenant quelles sont les fonctionnalités de pSharing avant de voir comment ça fonctionne à l'aide d'un exemple. Une fois ces deux choses faites nous verrons comment personnaliser ce partage de fichiers à l'aide de CSS (putain on dirait l'annonce du plan dans une intro de dissertation -_-').
Les fonctionnalités
Tout d'abord je tiens à vous préciser que cela marchera aussi bien chez Free qu'ailleurs. Au moment de l'instanciation de la classe, pSharing vérifie si la fonctionglob() est disponible. Si elle ne l'est pas alors les fonctions opendir(), readdir() et closedir() seront utilisées à sa place.Le code html généré par pSharing est valide XHTML 1.1.
J'ai pas mal cogité sur la meilleure façon de présenter les choses et je pense au final que le mieux est de vous présenter les méthodes de la classe en expliquant pour chacune d'elles ce qu'elle fait et comment on l'utilise.
Les exemples que je donnerais supposerons que $pSharing est une instance de la classe
pSharing. Pour les pointilleux faisons ça tout de suite : → Code : instanciation de la classe
1 2
require_once('pSharing.inc.php');
$pSharing = new pSharing();
La méthode addFolders() :
Cette méthode permet d'ajouter des dossiers de fichiers à partager. Ajouter un dossiers ajoute automatiquement tout son contenu et les sous-dossiers qu'il contient sur une infinité de niveau.Vous pouvez ajouter autant de dossiers que vous le souhaitez.
Cette méthode ne prend qu'un seul argument qui peut être soit le chemin relatif ou absolu du dossier que vous souhaitez partager, soit un array contenant une liste de chemins relatifs ou absolus de dossiers que vous souhaitez partager.
Exemples :
$pSharing->addFolders('.');$pSharing->addFolders('../foo/bar/');$pSharing->addFolders('/home/www/baz/qux');$pSharing->addFolders(array('../foo/', 'fum', '../../sahredFiles'));
addFolders() l'ajoute s'il n'y est pas :-)La méthode addSkipped() :
La classe pSharing permet de ne pas afficher certains fichiers et/ou dossiers. Cette méthode sert à définir lesquelles. Elle fonctionne sur le même principe que addFolders() : elle ne prend qu'un seul argument qui est soit le nom soit un array contenant une liste de noms de fichiers et/ou dossiers à ne pas afficher.Vous pouvez par exemple en servir si vous partagez un dossier de photos et que celui ci contient un dossier "thumbnails" (utilisé par un autre logiciel) qui contient des miniatures de chacune de vos photos. Ce n'est pas la peine de la partager : il n'a aucun intérêt.
Cette méthode peut aussi vous servir à ne pas afficher les fichiers index.html qui ne serve parfois qu'a interdire le listage d'un répertoire.
→ Cette méthode est sensible à la casse !
Exemples :
$pSharing->addSkipped('thumbnails');$pSharing->addSkipped('index.html');$pSharing->addSkipped(array('index.html', 'private', 'xajax'));
La méthode addSkippedExt() :
Cette méthode fait exactement la même chose que la précédente mais avec les extensions de fichiers. Vous pouvez donc choisir de ne pas afficher certains types de fichiers. À la différence de la précédente, elle n'est pas sensible à la casse, de cette manière ajouter 'jpg' permettra de ne pas afficher aussi bien les fichier en *.jpg qu'en *.JPG.Exemples :
$pSharing->addSkippedExt('txt');$pSharing->addSkippedExt(array('jpg', 'png', 'gif'));
La méthode setParam() :
Cette méthode sert à paramétrer (vous saviez vous que ce mot n'existe pas ? faudrait dire "définir les paramètres" par exemple... pffff c'est trop nul ^^) le partage de fichier.Elle s'utilise sous la forme
$pSharing->setParam('paramètre', valeur);. Je vais vous présenter les différents paramètres disponible de la manière suivante :- paramètre : valeur par défaut : liste, des, valeurs, possibles.
Description.
- ShowTopFolders : true : true, false.
Permet de définir si oui ou non il faut afficher le nom des "TopFolders" (les dossiers ajoutés avec la méthodeaddFolders()) ou directement leur contenu. Si vous ne partagez qu'un seul dossier il est plus pratique de mettre ce paramètre àfalse. - ShowExtensions : true : true, false.
Permet de définir si oui ou non il faut afficher les extensions des fichiers. - ShowFileSize : true : true, false.
Permet de définir si oui ou non il faut afficher la taille des fichiers. - FileSizeUnit : 'Kb' : 'Kb', 'Ko', 'Mb', 'Mo', 'Gb', 'Go'.
Permet de définir l'unité dans laquelle vous voulez que la taille des fichiers soit affichée (siShowFileSizeest àtrue). - _2space : false : true, false.
Quand ce paramètre vauttrue, les underscrores seront tranformé en espace dans le nom du fichier. En activant ce paramètre et en désactivant l'affichage des extensions de fichiers on peut obtenir des liens sympa genre "Nos photos de vacances" pour le fichier "Nos_photos_de_vacances.zip" par exemple :-). - ClosedFolderSign : + : ce que vous voulez.
Au cas où vous voudriez changer le + des dossiers fermés, par exemple en o ou (closed). - OpenedFolderSign : - : ce que vous voulez.
Au cas où vous voudriez changer le - des dossiers ouverts, par exemple en x ou (opened). - HideSystemFiles : false : true, false.
En activant cette option les fichiers .DS_Store, desktop.ini et thumbs.db ne seront pas affichés. Cela peut être utile si la fonctionglob()n'est pas disponible.
setParam().La méthode printJavaScript() :
Cette méthode sert à écrire le JavaScript nécessaire pour l'ouverture / fermeture des dossiers. Il faut l'appeler dans la section <head> de la page de la manière suivante : $pSharing->printJavaScript();.La méthode printCSS() :
Comme la précédente, cette méthode est à utiliser dans la section <head> de la page. Elle écrit le CSS minimum nécessaire au partage de fichier.Vous pourrez très simplement modifier la présentation, nous verrons comment dans la partie dédiée à cela.
la méthode share() :
Cette méthode sert à générer le code html qui affiche les dossiers et fichiers. Il suffit d'appeler la méthode à l'endroit dans votre page ou vous voulez que ça apparaisse. L'appel se fait comme ceci : $pSharing->share(); tout simplement :-)Un exemple d'utilisation de pSharing
Cet exemple va consisté en une simple page qui partagera le dossier dans lequel se trouve la page. On désactivera l'affichage des extensions et on choisira d'afficher la taille des fichiers en Ko.On va également cacher le fichier index.php qui si il était affiché serait un lien vers le page elle même et le fichier pSharing.inc.php qui est dans le dossier mais qu'il ne sert à rien d'afficher.
→ Code : exemple d'utilisation de pSharing
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
<?php
require_once('pSharing.inc.php');
$psh = new pSharing();
$psh->addFolders('.');
$psh->setParam('ShowExtensions', false);
$psh->setParam('ShowTopFolders', false);
$psh->setParam('FileSizeUnit', 'Ko');
$psh->addSkipped(array('index.php', 'pSharing.inc.php'));
?>
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
"http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html>
<head>
<title>Exemple simple de partage de fichier avec pSharing</title>
<?php
$psh->printJavaScript();
$psh->printCSS();
?>
</head>
<body>
<h1 id="header">Exemple simple de partage de fichier avec pSharing</h1>
<div id="partage">
<?php
$psh->share();
?>
</div>
</body>
</html>
Pimp my sharing (CSS inside) !
Un avantage du code HTML généré par pSharing est d'être très facilement utilisable avec CSS :- Chaque élément généré a la classe
pSharing. - Chaque nom de dossier est dans un
spanavec la classefolderName(en plus depSharing).
Les "TopFolders" ont en plus la classefolderTop. - Chaque signe d'ouverture/fermeture d'un dossier est dans un
spanavec la classeopenCloseSign(en plus depSharing, ça c'est à chaque fois, maintenant vous avez compris ^^). - Le contenu de chaque dossier est dans une
divavec la classefolderContent. - Chaque nom de fichier est dans un
spanavec la classefileName. - Chaque taille de fichier est dans un
spanavec le classefileSize.
Voilà quelque exemple de ce qu'il est possible de faire :
- Mettre les noms des dossiers en petites majuscules et en gras :
.folderName { font-variant: small-caps; font-weight: bold; } - Mettre tout le partage dans la police 'Trebuchet MS' :
.pSharing { font-family: 'Trebuchet MS', sans-serif; } - Mettre la taille des fichiers en italique :
.fileSize { font-style: italic; } - Mettre un bord rouge en pointillés au contenu des dossiers :
.folderContent { border: 1px dotted red; } - Enlever le soulignage des liens vers les fichiers :
.fileName a { text-decoration: none; } - Mettre les signes d'ouvertures/fermetures en police a espacement fixe pour que les noms de dossiers ne bouge pas (dans les polices "normal", le + est plus large que le -) :
.openCloseSign { font-family: monospace; }
Voilà, vous savez maintenant comment utiliser pSharing !
J'espère que ça pourra être utile à quelques personnes ou même plus :-p.
Si vous avez des remarques, des suggestions, des envies de fonctionnalités en plus... Les commentaires sont là pour ça ;-).
pSharing est sous licence Creative Commons 3.0 BY-SA et se télécharge sur mon dossier partagé ou directement ici : download pSharing.
cDrik :
un pti bouton "version imprimable" ? ;-)
Je m'en occupe tout de suite :-).