Christophe

Christophe

Christophe - Développeur de AllEvents; gestionnaire d'évènements pour Joomla

http://allevents.avonture.be/
https://www.facebook.com/com.allevents

Vous n'êtes probablement pas sans savoir qu'un site Joomla! est composé d'un grand nombre de fichiers de configuration pour vos templates, composants, modules et plugins.   Ces fichiers de configurations sont des fichiers dont l'extension est .xml; ils sont installés en même temps que les extensions que vous installez sur votre site.   Dans ces fichiers, on retrouve un grand nombre d'informations de paramétrage mais aussi le numéro de version des extensions : ainsi, en écrivant une url qui pointe vers un tel fichier, il est parfaitement possible (et terriblement simple) de déterminer si votre site utilise tel ou tel composant et quelle est la version de ceux-ci.   Il est aussi possible de présumer de la version de Joomla; du moins du numéro majeur de version (1.5 p.ex).


Essayez donc d'accéder au fichier http://xxxxxxxx/administrator/components/com_content/content.xml (remplacer xxxx par votre nom de domaine) : que constatez-vous ?  Vous pouvez afficher le fichier dans votre navigateur et vous pouvez déterminer s'il s'agit d'un site Joomla! 1.5, 2.5 ou 3.0.   Est-ce grâve ?  Oui !  Parce que cela permet de cibler votre site et les attaques qu'il va subir.

On peut procéder de même pour n'importe quel fichier .xml, de n'importe quel composant installé et en apprendre beaucoup, trop, sur votre site.

Comment s'en prémunir ?

En fait, c'est excessivement simple : il faut créer un petit fichier texte qui se nommera .htaccess (le fichier n'a pas de nom mais uniquement l'extension .htaccess).  Ce fichier devra être créé dans le dossier /administrator de votre site et il contiendra ceci :

<Files ~ ".xml$"> 
order allow,deny 
deny from all 
satisfy all 
</Files>

 
Si vous avez déjà un fichier /administrator/.htaccess, éditez-le et ajoutez le bloc de lignes ci-dessus à la fin du fichier.
 
Fermez et sauvez.   Et c'est tout !
 
Éssayez à nouveau d'accéder à l'url qui pointait vers un fichier .xml : votre serveur refusera et vous enverra vers une page 404 : le pirate en herbe ... aura l'herbe coupée sous ses pieds.
 
Bien évidemment, cette protection n'est qu'une parmi d'autres et ne pourra jamais être considérée comme totale et efficace.   Elle limite néanmoins la divulgation d'informations sensibles de votre site à tout un chacun.  Les petits addons des navigateurs qui permettent de déterminer la version de Joomla afficheront un joli "Joomla Version : Hidden" ce qui est le but recherché.
 
NB : Pensez à bien tester votre site afin de vous assurer qu'il continue à fonctionner comme souhaité.   En effet, si l'un ou l'autre composant tiers aurait besoin d'accéder légitimement à un fichier .xml depuis une url (c'est excessivement rare!), votre composant pourrait ne plus fonctionner comme attendu.

 

 

vendredi, 24 mai 2013 23:15

Optimisation de l'affichage du site

Après quelques lectures et test d'optimisation, les performances du blog de AllEvents sont passées de D / C à un A / B et, peut-être est-ce simplement un effet placebo mais il me semble, très concrètement, voir la différence au chargement des pages du site.

463-gtmetrix-600x255

Afin que ma courte expérience puisse être utile, sans prétention aucune, je vous livre ici les quelques adaptations que j'ai faite :

1. Installation de JCH Optimize 

http://extensions.joomla.org/extensions/core-enhancements/performance/site-performance/12088

Il s'agit d'un plugin de type système pour Joomla et qui, le plus simplement du monde, permet d'améliorer "comme c'est pas possible" les performances de votre site.   Tout se passe depuis l'écran de paramétrage du plugin, il suffit d'activer telle ou telle option.   Impossible de vous dire exactement ce qui fonctionnera sur votre site car il faut tester les paramètres pour être sûr que votre site fonctionne comme souhaité dès qu'un paramètre a été appliqué.

Pour info, sur ce site, j'ai désactivé "Combine Javascript Files" et "Minify Javascript" car cela causait des conflits et empêchait des scripts de s'exécuter.   Toutes les autres options sont sur Yes comme p.e. "Combine CSS Files," Replace @import", "GZip Js and CSS", "Minify CSS", etc.  

J'ai opté pour l'envoi des scripts javascript en toute fin de page; comme recommandé par plusieurs sites d'optimisation tel que GTmetrix.

Dans les paramètres avancés, j'ai également activé l'utilisation du fichier .htaccess ainsi qu'activer la génération des sprites (si vous ne savez pas ce qu'est un sprite).

2. Installation de JotCache

http://extensions.joomla.org/extensions/core-enhancements/performance/cache/13155

JotCache est un composant et un plugin système qui viennent remplacer le cache de Joomla et qui permet d'être bien plus précis dans la configuration du cache ainsi que définir comment le cache doit se comporter selon p.ex. le composant à l'oeuvre.   

Une fois la page dans le cache du serveur, son affichage est presque instantané.

2. PNGGauntlet

http://pnggauntlet.com/

Grâce à des outils comme GTmetrix, j'ai pû identifier les images qui étaient plus lourdes et affichées sur ma page d'accueil et même, les petites images qui gagneraient à être compressées.

C'est là qu'intervient PNGGauntlet qui est un logiciel de compression sans perte de qualité.   J'ai donc téléchargé les images utilisées sur ma page d'accueil comme celles de mon template, celles de l'un ou l'autre modules et, bien sûr, les images utilisées dans les articles du blog et je les ai compressées.   Certaines images, pourtant déjà au format png ont pû être compressées à 50%.  Sans toucher ni à la qualité ni à la taille de l'image.

3. .htaccess

Via son .htaccess, il est possible de définir des durées de vies pour tel ou tel types de fichiers.  Ainsi, les fichiers images pourraient avoir une durée de vie de plusieurs semaines, les fichiers .css d'un mois, ... et les fichiers .html d'un jour.  Tout est paramétrable.   Il existe un excellent article sur le site de Joomla.org : .htaccess File That FREAKIN Works!

4. Joomla

Last but not least, n'oubliez évidemment pas de configurer le cache de votre site Joomla (pas de cache=pas d'optimisation) ainsi que la compression GZip qui est accessible depuis l'onget Serveur de l'écran de configuration générale du site.

Selon SiteGround.com, le meilleur cache est obtenu en sélectionnant le cache conservateur. 

JotCache (voir 2.) est utilisé en remplacement du cache de Joomla.

 

 

Remerciements : je tiens à remercier Simon Grangé pour son article "Outils et astuces pour vérifier la vitesse d'un site Joomla! et améliorer les performances" ainsi que son astuce consistant à utiliser le plugin JCH Optimize.

 

 

 

Suite à un article que Stéphane a partagé sur Facebook concernant le piratage et la technique du brute-force, il m'a semblé intéressant de rédiger ce billet pour vous présenter ma manière de gérer mes mots de passe sur le web.

Je vais vous poser une petite question dont la réponse semble évidente : connaissez-vous vos mots de passe sur le web ? Si vous répondez oui, vous avez tout faux.

En effet, si vous connaissez votre mot de passe, c'est que ce dernier est logique et s'il est logique, c'est qu'un programme informatique peut le deviner. C'est ce qu'on appelle le "brute force" : utiliser un dictionnaire qui n'est rien d'autre qu'un fichier qui contient des milliers de mots quelconques et le programme essaie les mots un par un jusqu'au moment où il trouve le bon. Cette liste de mots reprend bien évidemment les célèbres "admin", "password", "secret", ... qui sont encore utilisés comme mot de passe par des, oui, on peut les appeler comme cela, des inconscients.

Imaginez le gars qui a comme login "admin" et comme mot de passe "admin" : avec une attaque brute-force, au mieux, son accès est compromis en moins de cinq secondes.

Alors, quelle est ma proposition ?

Depuis plusieurs années maintenant, c'est simple : je ne connais pas mes mots de passe. Ils sont tous générés de manière presque aléatoires et font tous vingt caractères de long. Mes mots de passes sont tous du type "zE0szS9A;VSb#9lkG?0B" et tous uniques. Est-ce que vous pourriez vous en souvenir ?

SupergenPassMes mots de passes sont uniques : ils sont générés selon l'url visitée et d'après une clef que j'ai introduite et qui, en fait, est le seul mot de passe que je connais. J'utilise pour cela le bookmarklet SuperGenPass. Il s'agit d'un code javascript que l'on "drag&drop" sur sa barre de favoris au même titre qu'une url. Une fois en place, il suffit de se rendre sur un site et de cliquer sur le favori SuperGenPass. Une petite fenêtre va s'afficher et va vous demander d'introduire une clef. Par exemple "JAimeJoomla!". SuperGenPass va générer un mot de passe en prenant en compte l'url et votre clef. Ce mot de passe peut-être configuré pour faire 20 caractères. Pour une même url, le mot de passe est toujours le même.

Rien qu'avec SuperGenPass, vous avez donc déjà une gestion de la sécurité excellente.

Évitez d'utiliser un login tel que "admin" car si le pirate trouve votre login, il a déjà parcouru la moitié du chemin.

Login : Joom!Master
Password : zE0szS9A;VSb#9lkG?0B

Avouez que c'est du lourd ! Bien malin celui qui réussira à hacker votre compte.

L'intérêt d'un bookmarklet réside aussi dans le fait que si vous n'êtes pas sur votre ordinateur, pas de soucis : installer le temps de votre session le bookmarklet puis supprimez-le votre travail achevé.  Il n'y a rien à installer sur le pc.

LastPassA côté de SuperGenPass, j'utilise également LastPass qui est un coffre-fort dans lequel je stocke tous mes accès. Toutes les données y sont cryptées. L'intérêt ici est de retrouver en un seul lieu l'ensemble de mes comptes, que ce soit des comptes web ou mes accès mails, ftp, bases de données, ...

LastPass propose des plugins pour tous les navigateurs du marché et vous permet, une fois l'url affichée, d'introduire votre login et votre mot de passe pour vous. LastPass propose également un plugin pour Android (payant).

Tant SuperGenPass que LastPass sont gratuits et fonctionnent admirablement bien.

 


 

FileZillaJe vous invite à (re)lire l'article "FileZilla stocke les données login / mot de passe non cryptés : solution" que j'ai écris en avril 2012 et qui propose une solution à ce problème c'est-à-dire à crypter le fichier qui contient les mots de passes de vos connexions FTP et à ne "monter" le disque qui contient ce fichier uniquement lorsque vous en avez besoin.   Cryptage + innacessibilité du fichier le rende invulnérable ou presque.

mardi, 26 mars 2013 08:24

Joomla!Day 2013... c'est fini ;-{

Le Joomla!Day 2013 – Toulouse est terminé ; c’est décidément toujours trop court.

La journée du dimanche confirme l’excellente organisation de l’évènement et l’esprit de famille ; à peine arrivé sur place et c’est reparti pour de nombreuses discussion et l’occasion de s’accorder du temps pour échanger avec ceux avec qui on a trop peu vu la veille.

La première conférence à laquelle j’ai participé est celle de Thomas Papin : comment modifier l’affichage de Joomla sans faire de hack. Thomas explique entre autre les vues alternatives pour les modules. Dans la deuxième partie de son exposé, Thomas donne des noms de composants qui sont majoritairement gratuits et sont utilisés sur des sites associatifs ; entre autre Community Builder, AcyMailing, Kunena forum et un certain composant de gestion d’évènements.

Ma seconde conférence est « Autour de CB » animée par Eric Lamy, VP de l’AFUJ. Eric parle des plugins de CBs dont p.ex. Facebook Connect et CBSubs. Le second nommé permet de gérer des abonnements (adhésion annuelle, cotisation, …) et Eric donne plusieurs trucs pour proposer des promotions (réduction de 30% p.ex. si inscription 3 mois avant terme de l’adhésion).

CrawlProtect, première conférence de l’après-midi, est une solution php non Joomla! permettant de sécuriser son site. Cette solution gratuite permet de bloquer l’accès à son site dès lors que la connexion est jugée illégitime (sur base d’IPs blacklistées, urls de type tentatives de hacking, …). CrawlProtect utilise le fichier .htaccess ainsi que la base de données pour bloquer d’autres attaques (sur base de mots clef dans l’url entre autre). Cette solution me semble très performante et mérite d’être largement testée.

Brian Teeman @ photo de Marc-Antoine ThevenetLa dernière conférence à laquelle j’ai pris part n’est pas, justement, une conférence mais une discussion. Il me faut avouer que, sur le coup, j’ai été manipulé. Le titre de la conférence était « Table ronde OSM » ; la table était rectangulaire et non ronde. Gros mensonge donc. L’idée de la table rectangulaire est de permettre un échange entre le public francophone et des personnes de Open Source Matters. Brian Teeman, David Hurley, Alice Little Grevet et Jean-Marie Simonet; la touche frenchie de la bande, étaient là pour expliquer la mission de OSM et pour échanger sur ce que le monde francophone pourrait faire pour promouvoir Joomla en francophonie. Eric Lamy a pû répondre à Brian qui questionnait sur la naissance du Joomla!Day Algérie qu’il avait aidé le groupe Algérien mais aussi d’autres tels que le Togo (j’espère que ma mémoire ne me fait pas défaut) à mettre sur pied leurs propres organisations et évènement.

Avant de plier bagages, les Joomleurs restant à Toulouse pour la nuit décident d’aller au restaurant et, de mon côté, nous nous retrouvons à onze dans le centre-ville. 

Au moment de quitter Toulouse, un regret, une fois encore, que tout ça soit déjà fini et qu’il faille attendre une année avant de revivre un tel moment d’ouverture et de rencontre.

Merci à l’AFUJ, merci aux organisateurs et merci à tous.

La copie des slides de la présentation de AllEvents 3.0 est disponible en téléchargement.  Cliquez sur le bouton ci-dessous pour accéder au téléchargement.


Merci à tous ceux qui ont assisté à la présentation et à l'accueil qu'ils ont réservé à AE3; je suis heureux de voir que le développement de AE continue à répondre à vos besoins.    Merci!

dimanche, 24 mars 2013 09:53

Joomla!Day 2013, et c'est parti

Joomla!Day 2013 - Toulouse; jour  (photo Radek Suski)Une fois encore, l’AFUJ a fait fort : une organisation locale impeccable, une équipe ultra-motivée et un accueil « on ne peut pas mieux »; le Joomla!Day 2013 de Toulouse a commencé fort.

Et cela débute avant même le petit déjeuner alors que je m’apprête à prendre l’ascenseur et que j’entends une personne sortir de sa chambre; je l’attends, elle me reconnaît car on s’était croisé à Strasbourg en 2012. La conversation s’instaure immédiatement; naturellement. Nul doute : le Joomla !Day a commencé. Bienvenue dans la famille.

Et cela continue; d’autres personnes se joignent à nous, nous sommes déjà six à tables; trois Suisses, une Américaine, un Français et un Belge; une septième nous rejoins à l’heure du départ. Arrivé à l’IUT, un grand nombre de personnes attendent déjà devant l’entrée. Marc, Simon Grangé, Jean-Marie, Adrien, Yann, Eric, Nicolas, … des habitués, des organisateurs. Même si on ne se voit qu’une fois l’an, c’est un réel plaisir de les retrouver; prendre de leurs nouvelles, « as-tu fait bonne route », « as-tu réussi à trouver un nouvel appartement », « merci pour … », … Joomla, c’est aussi ça, c’est surtout ça ! Une communauté qui a réussi à fédérer des utilisateurs de tout horizon et qui partagent ensemble un moment d’ouverture, d’écoute, de partage. J’invite sincèrement à tout qui n’a pas encore participé à un Joomla!Day de venir faire l’expérience. Je décline toutefois tout sentiment de manque dès le lendemain de la clôture.

Mais avant de parler de clôture, parlons du programme de ce Samedi 23 mars, du moins à celui auquel j’ai pû prendre part. Le matin, Marc Studer et Jérome de HikaMarket relèvent le challenge de mettre le pied à l’étrier du public présent à programmer un composant, un module et un plugin en une heure trente.

Radek Suski de SobiPro explique l’évolution de son logiciel, depuis son premier site web aux gifs animés à un système de continu des plus évolué et flexible qui existe aujourd’hui dans le monde Joomla. SobiPro étant un composant de gestion de contenu dont le système de templating permet d’avoir un site attractif et professionnel pour présenter des annuaires, des restaurants, annonces, listes, …

Après la pause déjeuner, une petite nouveauté : les Lightning Talks. Il s’agit d’un format où plusieurs orateurs se succèdent au rythme d’un orateur toutes les cinq minutes; durée pendant laquelle il tente de donner des trucs et astuces parfois méconnus et qui offrent une réelle valeur ajoutée. Ainsi, Mihàly Marti nous a donné la primeur de son nouveau projet : un site web où l’on se crée une liste d’extensions favorites et qui permet alors d’installer un Joomla avec toute ces extensions installées et gérées en un seul lieu. Via son interface, toutes ces extensions s’installe à-la-queue-leu-leu et il ne faut plus aller soi-même sur le site de l’éditeur 1, télécharger et installer le composant, sur le site de l’éditeur 2, sur celui de l’éditeur 3, etc. Ce qu’on fait tous aujourd’hui lorsqu’il faut installer un nouveau Joomla. L’extension de Mihàly centralise toutes ces extensions dans une liste de favoris et l’installation se fait en chaîne; les mises à niveau sont également centralisées. Un très beau projet; excessivement utile pour tous ceux qui doivent maintenir plusieurs sites.

Ma conférence pointe le bout de son nez. J’ai l’honneur d’avoir l’amphithéâtre. Une heure durant laquelle j’ai le plaisir de montrer AllEvents 3.0 et d’expliquer les différences de concept entre les versions actuelles et le nouveau paradigme, l’approche définitivement orientée plugin. Une trentaine de personnes sont présentes, le contact se fait alors même que le lieu de ne se prête pas trop à la chose. 

A l’issue de la conférence, six ou sept personnes m’attendent pour me poser une question, m’exposer un besoin, …

Je dois bien l’avouer, c’est juste un moment de jouissance : exposer son travail, recevoir le feedback immédiat du public quant à celui-ci et ses choix; confirmer que la direction est bonne, … et recevoir des remerciements, oui, c’est jouissant, cela regonfle les batteries au maximum et cela donne envie de continuer. Une dame vient me trouver et me dit « Vous ne devez pas vous justifier de demander quelques euros pour votre travail; lorsqu’on voit le nombre de fonctionnalités additionnelles, il n’y a plus lieu de discuter de cela. »

L’AFUJ termine la journée avec son traditionnel bilan, présentation des activités de l’année écoulée, bilan, reconduction du conseil d’administration et élection d’un nouveau membre. Félicitations Pierre Sempé ! Nous comptons sur toi pour faire de l’excellent travail au sein du CA.;-)

Les conférences sont terminées; nous nous rendons au restaurant de l’université où le chef nous a préparé un repas de plusieurs services, deux entrées, plat, dessert et café et tout est excellent. Petit regret que cela se fasse sur le site même de l’université; c’eût été plus sympa d’aller en ville, se promener, prendre un verre à une terrasse. Côté pratique avant tout. Et, une fois encore, même si on ne connaît pas son voisin de gauche, celui de droite, … la discussion est naturelle et rien n’est forcé.

L’association des utilisateurs francophones de Joomla! est vraiment un monde à part; un monde où chacun se sent membre d’une même famille. C’est en tout cas mon sentiment; pour la troisième année consécutive.

AllEvents - BetaLa version Beta 1 de AllEvents 3.0 est disponible.   Vous pouvez la télécharger dans la section beta, menu download.

Il s'agit d'une version pour Joomla 3.0; le temps me faisant défaut pour garantir aujourd'hui un compatibiltié descendante.

Pour ceux qui consultent le blog régulièrement, vous savez que AE3 est bien plus qu'un lifting ou mise-à-niveau pour Joomla 3.    AE3 a été repensé en termes d'ouverture : les contraintes que je me suis fixée sont, dans l'ordre, ouverture, ouverture et ... ouverture.

Tout ce qui n'est pas essentiel à la gestion d'évènements a été migré sous le forme de plugins.   Et donc, les notions additionnelles telles que agenda, activité, public, album photo, commentaires, ressources, ... et même formulaire d'inscription ont été retiré du code du composant.

 

Le composant est devenu ignorant

Pour simplifier les choses, on peut dire que le composant ne sait faire plus qu'une seule chose : gérer des évènements.   Ce n'est pas tout à fait exact car le composant est devenu un dispatcheur : il va recevoir toutes les requêtes et va questionner les plugins de type AllEvents : "Sais-tu gérer la tâcher ... ?"   Si le plugin réponds par l'affirmative, le contrôle lui est passé; le plugin réalisé son job et il renvoie au composant un résultat (du code html).

Le composant est donc totalement ignare des notions agendas, activités, inscriptions, ...   Il va "juste" se contenter de donner temporairement le contrôle à un plugin.   Cette ouverture a un bénéfice majeur : l'ajout de fonctionnalités pour AllEvents n'a jamais été aussi simple.   A priori, lorsque AE 3 sera en version stable, il ne devrait plus être nécessaire d'intervenir dans le code pour implémenter une nouvelle fonctionnalité.

Plugins, plugins, plugins

AE3 vient avec une autre nouveauté attendu : des "events".    C'est une des conséquences de l'ouverture aux plugins.   Le composant va maintenant générer des évènements tels que onExecuteTask, onBeforeSaveEnrolment, onAfterSaveEvent, etc.   Il y en a des dizaines.    A quoi cela sert ?    Prenons onAfterSaveEvent qui est donc généré par AE lorsqu'un évènement vient d'être sauvé.   En capturant cet "event", un plugin peut donc être notifié qu'un évènement vient d'être créé et pourra publier le titre de l'évènement sur Twitter ou envoyer un email "Un nouveau évènement vient d'être créé..." à une liste de distribution.

onBeforeSaveEnrolment pourra lui être capturé pour faire une passerelle vers une solution de ePayment et, si le paiment est réalisé, le plugin retournera la valeur True pour indiquer que l'inscription est validée.   Une valeur de retour False interdira l'inscription.

XML, XML, XML

J'aurais râté mes trois objectifs si, pour changer un petit truc dans AE, il fallait systématiquement aller dans le code et "hacker" les fichiers natifs de AllEvents.  Envie d'un bouton en plus dans une vue backend ?  Envie d'une colonne en plus dans une liste ?   Ou, souhait de supprimer une colonne ?  Ajout d'une nouvelle tâche ?  Changer le titre d'une vue ?  Le niveau de permissions requis pour afficher une page ?   Vous voulez que la colonne Truc s'affiche sur un téléphone exclusivement ?     Tout cela est possible et bien plus sans même aller dans le code.   

Chaque vue est accompagnée d'un fichier XML qui est un "bête" fichier texte.   Il suffit de l'ouvrir, de comprendre comment cela fonctionne et de faire votre petite modification.   Lire les billets concernant les fichiers "manifest".

Installation

L'installation de AE 3 peut se faire "par dessus" une installation AE 1.5.2 ou 2.5.2 mais je vous recommande toutefois de désinstaller ces versions-là car des dizaines de fichiers ont été supprimés : en installant "par-dessus", vous aurez donc des fichiers inutilisés sur votre serveur web.  Pour rappel, lors d'une désinstallation, AE ne supprime pas les données qui se trouvent en base de données; vous ne perdez donc rien !

Au risque de me répéter, la version Beta 1 est une version allégée; il manque un grand nombre de plugins que j'ajouterai au fûr et à mesure (dans les semaines à venir).

But du script : prendre un backup des fichiers de votre site depuis une simple url.

Je vous propose le petit code ci-dessous qui m'a grandement facilité la sauvegarde de sites Joomla et non Joomla.   La majeure partie du script a été développée par Archan Ghosal (http://ramui.com/articles/php-zip-files-and-directory.html).  J'ai ajouté quatre lignes de code (lignes 44 à 47) afin que le script soit autonome et que l'archive soit immédiatement proposée en download par le navigateur.

Comment cela fonctionne ?

  1. Ouvrez votre éditeur de texte préféré (Notepad++ p.ex.) et créez un nouveau document.
  2. Copiez/collez le code ci-dessous dans l'éditeur.
  3. Sauvez le fichier avec l'extension .php (p.ex. "zip.php")
  4. Ouvrez votre client FTP et connectez-vous sur votre site.
  5. Uploadez le fichier zip.php dans le dossier que vous désirez archiver (soit la racine du site pour tout archiver soit un sous-dossier).
  6. Vous pouvez fermer votre client FTP.   Ouvrez votre navigateur préféré et écrivez l'url pour qu'elle pointe vers le dossier où se trouve le fichier zip.php (p.ex. monsite.fr/zip.php)

Le script va alors créer une archive nommée backup.zip (voir ligne 45 du script) et va compresser tous les fichiers et tous les dossiers enfants.  Au final vous avez une copie parfaite du dossier.

Une fois le fichier zip achevé, votre navigateur va vous le proposer en download.

<?php
/*
Copyright (c) 2011 <a href="http://ramui.com.">http://ramui.com.</a> All right reserved.
This product is protected by copyright and distributed under licenses restricting copying, distribution. Permission is granted to the public to download and use this script provided that this Notice and any statement of authorship are reproduced in every page on all copies of the script.
*/
class recurseZip {
   private function recurse_zip($src,&$zip,$path) {
      $dir = opendir($src);
      while(false !== ( $file = readdir($dir)) ) {
         if (( $file != '.' ) && ( $file != '..' )) {
            if ( is_dir($src . '/' . $file) ) {
               $this->recurse_zip($src . '/' . $file,$zip,$path);
            } else {
               $zip->addFile($src . '/' . $file,substr($src . '/' . $file,$path));
            }
         }
      }
      closedir($dir);
   }
   public function compress($src,$dst=''){
      if(substr($src,-1)==='/'){$src=substr($src,0,-1);}
      if(substr($dst,-1)==='/'){$dst=substr($dst,0,-1);}
      $path=strlen(dirname($src).'/');
        
      @unlink($dst);
      $zip = new ZipArchive;
      $res = $zip->open($dst, ZipArchive::CREATE);
      if($res !== TRUE){ echo 'Error: Unable to create zip file'; exit;}
      if(is_file($src)) {
         $zip->addFile($src,substr($src,$path));
      } else {
         if(!is_dir($src)){
            $zip->close();
            @unlink($dst);
            echo 'Error: File not found';
            exit;
         }
         $this->recurse_zip($src,$zip,$path);
     }
     $zip->close();
     return $dst;
   }
}
$z=new recurseZip();
echo $z->compress(".","./backup.zip");
header('Location: backup.zip');
exit;
?>

Veuillez notez que le script "ne sauve que" les fichiers; pas la base de données.   Le meilleur outil pour sauvegarder complètement un site Joomla reste Akeeba Backup.

Ne laissez pas le fichier zip.php sur votre site de production car n'importe qui pourrait l'utiliser.  Sinon modifiez le code source afin p.ex. de demander un mot de passe ou tout autre mécanisme de protection.   Le code est libre; vous pouvez l'adapter en prenant juste soin de mentionner le copyright qui se trouve au début du script.

Sur certains hébergeurs (dont le mien), il est possible de rencontrer une erreur 500 "Internal Server Error" à l'installation de AllEvents 3.0.    Après une journée de recherche en tout genre; je n'ai pas trouvé d'erreur au niveau du composant mais un soucis, une spécificité au niveau de l'hébergeur.

Internal Server Error - Erreur 500

Je ne peux pas encore expliquer le problème mais j'ai une solution qui est fonctionnelle sur mon site; j'espère qu'il en sera de même chez votre hébergeur : il suffit de créer un fichier nommé php.ini dans le dossier /administrator de Joomla.

Internal Server Error - Fichier php.ini

Pour créer un tel fichier, connectez-vous sur votre site grâce à votre logiciel de FTP.  Rendez-vous dans le dossier /administrator de votre site et là, faites un clic droit dans votre logiciel pour avoir un menu contextuel qui permet de créer un nouveau fichier (ou une manipulation similaire dans votre client FTP).  Le nom du fichier doit être php.ini.

C'est très étrange mais cela fonctionne, plus d'erreur 500.   Cela démontre que l'hébergeur procède à la lecture du fichier ou, du moins, initialise certaines choses dès lors que le fichier est présent (même si vide).

En discuter sur le forum

Le nouvel installateur de AllEvents 3 est fonctionnel !  

Si vous vous souvenez, jusqu'à AllEvents 2.5.2, il y avait quatre fichiers :

  • Un package Free "partial" qui reprennait le composant, les deux modules et tous les plugins gratuits.   Ce fichier ne reprennait pas les médias car autrement la taille du fichier était supérieure à 2MB ce qui est une limite d'upload pour la plupart des serveurs web.
  • Un package Free "full" qui lui reprennait les médias
  • Un package Premium "partial" qui incluait donc tous les plugins commerciaux
  • Un package Premium "full" dont la taille dépassait de très loin la limite des 2MBs.

C'est dorénavant de l'histoire ancienne.

L'unique fichier a télécharger fait à peu près 900Ko et reprend uniquement le composant.   Pendant l'installation, une connexion sera établie vers le serveur de AllEvents afin de télécharger les modules, les plugins et les medias soit environ 2,20MB.  Les fichiers seront immédiatement installés.

Le serveur web de AllEvents va authentifier la demande de download et si elle émane d'un site pour lequel il y a une licence valide et en cours, les fichiers Premium seront alors poussés vers le serveur client et les plugins commerciaux seront installés.

Tout cela de manière totalement transparente.

Seule contrainte technique : l'installation de AllEvents doit se faire connecté à internet.

Installation de AllEvents 3.0

Page 1 sur 35