Drupal : PECL Upload Progress bar

Vous avez un serveur Web en Drupal, et ce message apparaît dans votre tableau de bord :

Vous avez une idée ? Trouvez gratuitement des développeurs sur Codeur.com !

Recevez des devis (gratuit)

C’est juste un avertissement : votre serveur est capable d’afficher une barre de progression lors du téléchargement de fichier (upload), mais cela n’est pas activé. Pour cela, il faut ajouter un module PECL « uploadprogress ».

Comment obtenir cette superbe barre de progression sur votre site ?

Bien que j’ai rencontré ce message dans des installations Drupal, ce module n’est absolument pas lié à Drupal !

Bien d’autres CMS ou programmes que Drupal devraient pouvoir profiter de ce module PECL « uploadprogress » 😉

Voyons comment activer cette fonctionnalité intéressante 😉

Les instructions, bien que prévues pour un serveur Debian ou Ubuntu, sont très facilement adaptables sous toutes distributions Linux ou même probablement BSD. Les principales différences sont votre gestionnaire de paquets et le fait d’utiliser « sudo » ou pas.

Pour le moment, je n’ai pas cette extension sur mon serveur Drupal.

Voici ce que cela donne lors de l’upload d’un fichier.

Le champ « image », que j’upload, est créé avec CCK, Filefield et Imagefield, mais ce n’est pas le but de ce billet.

Aucun moyen pour l’utilisateur de savoir s’il est à 95 %, 50 % ou 3% de son upload…

Installons ce module PECL « uploadprogress »

PECL, « PHP Extension Community Library », est un dépôt regroupant des programmes et extensions PHP.

Une de ces extensions est le module « uploadprogress » qui ajoute à PHP la possibilité d’afficher une barre de progression lorsque vous uploadez (de votre PC vers le serveur) un fichier.

La gestion et la distribution de paquet PECL est gérée par … PEAR, « PHP Extension and Application Repository ».

Cela semble complexe, mais point n’est besoin de connaitre et comprendre PEAR et PECL en détail 😉

En résumé :

Pour la barre de progression, il faut le module PECL « uploadprogress », et pour l’installer il faut PECL, et donc PEAR sur votre serveur Web / PHP.

logo PEAR © The PHP Group

Si vous n’avez pas encore PEAR, commencez par l’installer.

Un module PHP contenu PEAR est certainement prévu dans votre distribution.

Je l’installe ici sous Ubuntu 8.04. Cela devrait être pratiquement identique pour les autres distributions :

$ sudo aptitude install php-pear
Lecture des listes de paquets... Fait
Construction de l'arbre des dépendances
Lecture des informations d'état... Fait
Lecture de l'information d'état étendu
Initialisation de l'état des paquets... Fait
Construction de la base de données des étiquettes... Fait
Les NOUVEAUX paquets suivants vont être automatiquement installés :
php5-cli

Les NOUVEAUX paquets suivants vont être installés :
php-pear php5-cli
0 paquets mis à jour, 2 nouvellement installés, 0 à enlever
et 0 non mis à jour.
Il est nécessaire de télécharger 2836ko d'archives.
Après dépaquetage, 8102ko seront utilisés.
Voulez-vous continuer ? [Y/n/?] Y
Écriture de l'information d'état étendu... Fait
Prendre :1 http://be.archive.ubuntu.com hardy-updates/main php5-cli
   5.2.4-2ubuntu5.12 [2481kB]
Prendre :2 http://be.archive.ubuntu.com hardy-updates/main php-pear
   5.2.4-2ubuntu5.12 [355kB]
2836ko téléchargés en 2s (1020ko/s)
Sélection du paquet php5-cli précédemment désélectionné.
...
Paramétrage de php5-cli (5.2.4-2ubuntu5.12) ...

Creating config file /etc/php5/cli/php.ini with new version
Paramétrage de php-pear (5.2.4-2ubuntu5.12) ...
Lecture des listes de paquets... Fait
Construction de l'arbre des dépendances
Lecture des informations d'état... Fait
Lecture de l'information d'état étendu
Initialisation de l'état des paquets... Fait
Écriture de l'information d'état étendu... Fait
Construction de la base de données des étiquettes... Fait

Maintenant que PEAR est installé, PECL l’est aussi.

logo PECL © The PHP Group

Il suffit d’installer le module « uploadprogress ».

$ sudo pecl install uploadprogress
downloading uploadprogress-1.0.1.tgz ...
Starting to download uploadprogress-1.0.1.tgz (8,536 bytes)
.....done: 8,536 bytes
4 source files, building
running: phpize
sh: phpize: not found
ERROR: `phpize' failed

La commande est simple, mais se termine mal 🙁

Après une petite recherche, « phpize » se trouve dans le package « php5-dev », que j’installe :

$ sudo aptitude install php5-dev
Lecture des listes de paquets... Fait
Construction de l'arbre des dépendances
Lecture des informations d'état... Fait
Lecture de l'information d'état étendu
Initialisation de l'état des paquets... Fait
Construction de la base de données des étiquettes... Fait
Les NOUVEAUX paquets suivants vont être automatiquement installés :
autoconf automake automake1.4 autotools-dev gcc gcc-4.2 libc6-dev libgomp1
libltdl3-dev libssl-dev libtool linux-libc-dev m4 shtool zlib1g-dev
Les NOUVEAUX paquets suivants vont être installés :
autoconf automake automake1.4 autotools-dev gcc gcc-4.2 libc6-dev libgomp1
libltdl3-dev libssl-dev libtool linux-libc-dev m4 php5-dev shtool
zlib1g-dev
0 paquets mis à jour, 16 nouvellement installés,
 0 à enlever et 0 non mis à jour.
Il est nécessaire de télécharger 9522ko d'archives.
 Après dépaquetage, 35,9Mo seront utilisés.
Voulez-vous continuer ? [Y/n/?] Y
...

PHP5-dev nécessite en effet les outils de développement Linux, et installe donc automatiquement plusieurs autres packages.

Je relance l’installation de « uploadprogress » :

$ sudo pecl install uploadprogress
downloading uploadprogress-1.0.1.tgz ...
Starting to download uploadprogress-1.0.1.tgz (8,536 bytes)
.....done: 8,536 bytes
4 source files, building
running: phpize
Configuring for:
PHP Api Version:         20041225
Zend Module Api No:      20060613
Zend Extension Api No:   220060519
building in /var/tmp/pear-build-root/uploadprogress-1.0.1
running: /tmp/pear/cache/uploadprogress-1.0.1/configure
checking for grep that handles long lines and -e... /bin/grep
checking for egrep... /bin/grep -E
...
checking whether to build static libraries... no
configure: creating libtool
appending configuration tag "CXX" to libtool
appending configuration tag "F77" to libtool
configure: creating ./config.status
config.status: creating config.h
running: make
sh: make: not found
ERROR: `make' failed

Cette fois, il manque l’utilitaire « make », qui est effectivement nécessaire, car l’installation va compiler le module « uploadprogress ».

Le make pour PHP se trouve dans le paquet « build-essential » :

$ sudo aptitude install build-essential
Lecture des listes de paquets... Fait
Construction de l'arbre des dépendances
Lecture des informations d'état... Fait
Lecture de l'information d'état étendu
Initialisation de l'état des paquets... Fait
Construction de la base de données des étiquettes... Fait
Les NOUVEAUX paquets suivants vont être automatiquement installés :
dpkg-dev g++ g++-4.2 libstdc++6-4.2-dev libtimedate-perl make patch
Les NOUVEAUX paquets suivants vont être installés :
build-essential dpkg-dev g++ g++-4.2 libstdc++6-4.2-dev
 libtimedate-perl make patch
0 paquets mis à jour, 8 nouvellement installés,
 0 à enlever et 0 non mis à jour.
Il est nécessaire de télécharger 4816ko d'archives.
 Après dépaquetage, 18,4Mo seront utilisés.
Voulez-vous continuer ? [Y/n/?] Y

Maintenant, je réessaye le « uploadprogress » :

$ sudo pecl install uploadprogress
downloading uploadprogress-1.0.1.tgz ...
Starting to download uploadprogress-1.0.1.tgz (8,536 bytes)
.....done: 8,536 bytes

4 source files, building
running: phpize
...
configure: creating ./config.status
config.status: creating config.h
running: make
/bin/bash /var/tmp/pear-build-root/uploadprogress-1.0.1/libtool
 --mode=compile gcc ...
...

Build process completed successfully
Installing '/usr/lib/php5/20060613+lfs/uploadprogress.so'
install ok: channel://pecl.php.net/uploadprogress-1.0.1
configuration option "php_ini" is not set to php.ini location
You should add "extension=uploadprogress.so" to php.ini

Voilà, la compilation du module « uploadprogress » est terminée.




Il reste a charger ce module dans PHP.
J’ajoute à la fin du fichier php.ini :

$ sudo vi /etc/php5/apache2/php.ini
extension=uploadprogress.so

Comme la configuration PHP est chargée au démarrage d’Apache2, il faut redémarrer Apache2.

$ /etc/init.d/apache2 restart
Restarting web server: apache2 ... waiting .

En résumé, dans l’ordre, il faut les modules et actions suivantes :

  1. build-essential
  2. php-pear
  3. php5-dev
  4. installer le module « uploadprogress »
  5. activer « uploadprogress.so » dans PHP
  6. redémarrer Apache2

Les commandes sont donc :

  1. sudo aptitude install build-essential
  2. sudo aptitude install php-pear
  3. sudo aptitude install php5-dev
  4. sudo pecl install uploadprogress
  5. vi /etc/php5/apache2/php.ini
    • ajouter « extension=uploadprogress.so » à la fin du fichier
  6. /etc/init.d/apache2 restart

Vérification dans le tableau de bord de mon site Drupal :

Je réessaye un upload de fichier :

Ok, cela fonctionne !

Evidemment, que cette fonctionnalité soit prise en compte ou pas dépend du module ou programme utilisé.

Dans le cas de Drupal, FileField et ImageField affichent cette barre de progression si le serveur est configuré correctement 😉

Sources :

L’équipe de WebActus.net vous propose tous les jours des articles sur l’univers des startups, du e-commerce et du growth hacking.

Rejoignez la communauté Webactus

Recevez régulièrement les meilleures actus et ressources

Pas de spam, vous pouvez vous désabonner à tous moment.