Vous êtes à Accueil > Nos techniques > Quelques scripts

Passer le menu Aller au pied de page

Licences Joueb English version Accessibilité

Quelques scripts.

Page méchamment en travaux !

 

Compiler du php vers du html

À quoi sert ce script ? Si vous n’employez php que pour générer des pages statiques, il ne sert à rien de les générer à chaque requête. Ce script enregistre le rendu de votre page index.php, teste si un fichier index.html existe déjà dans le même répertoire. Si oui, alors il teste s’ils sont identiques ou non. En fonction, il crée, écrase ou efface le fichier index.html.

#!/bin/bash

chemin=`pwd`
wget http://localhost${chemin:8}/index.php -q -O /tmp/index.html
 if [ $? -ne 0 ]
# Si la commande wget a renvoyé une erreur   …
            then 
                echo "Erreur au téléchargement de http://localhost/${chemin:8}/index.html."
            else 
# Si la commande wget n’a pas renvoyé d’erreur   …
  sed -i '1s|^|<!--\n        Bienvenue, lecteur-trice de code source !\n\n\n Comment est fabriqué ce site ?  \n               — https://micr0lab.org/tech/ \n           — https://micr0lab.org/rouage/ \n         — https://micr0lab.org/humains.txt\n\n\n  Licence : \n            Code le plus souvent sous licence art libre (artlibre.org), voir https://micr0lab.org/rouage/droits/#d_site pour plus d’infos.\n\n\n      Contact : \n            Voir https://micr0lab.org/contact/\n\n\n **********************\n *     =======> Puisque tu es là <======\n *      Tu aimes le code?\n *           Tu modèles les octets ?\n *                      Les arts numériques de micr0lab (https://micr0lab.org/arts_numeriques/) sont là !\n *     ======> Proposes-y tes projets ! <======\n **********************\n -->|' /tmp/index.html 
# On marque le fichier obtenu.
            tidy -config /donnees/micr0lab/tech/scripts/config-tidy -m /tmp/index.html
                if [ -f index.html ]
# On regarde si le dossier dans lequel se trouvait le fichier index.php actuellement compilé contenait déjà un fichier index.html.
                then
                    DIFF=$(diff $chemin/index.html /tmp/index.html)
#index.html existe déjà, on compare la version obtenue et la version actuelle.
                    if [ "$DIFF" != "" ]
                    then
# Si les fichiers sont différents…
                        mv /tmp/index.html index.html
                        echo "Index.html écrasé."
# On stocke dans le tableau l’adresse de la page écrasée et on écrase le fichier index.html avec la version générée par wget.
                    else
# Si le fichier index.html qui existait déjà et le fichier index.html obtenu avec wget sont identiques  …
                        echo "Index.html identique."
                        rm /tmp/index.html
# Alors on stocke dans le tableau l’adresse de la page ignorée et on efface le fichier généré par wget.
                    fi
                else
# Le fichier index.html n’existait pas.
                    mv /tmp/index.html index.html
                    echo "Index.html crée."
# On stocke l’adresse du fichier crée dans le tableau et on déplace la version fabriquée par wget dans le dossier
                fi
            fi

Télécharger ce script.

Cette mise en bouche prépare surtout à la compréhension du script suivant, qui compile tout votre site en un coup.

 

Compiler du php vers du html

L’utilité de ce script est détaillée dans la rubrique php, nous n’évoquons ici que l’aspect technique de la chose.

#!/bin/bash

# php_vers_html version 1.2
# Par le ouebmestre de micr0lab
# Licence art libre ( http://artlibre.org/ ) : vous êtes libres de copier,
# diffuser et transformer librement les oeuvres dans le respect des droits de
# l'auteur.
# Ce script «  compile » votre site en php vers un site en html. Bien
# évidemment, cela suppose que vous n’employez php que pour gérer des inclusions
# et des calculs, et non pas pour rendre votre site interactif, auquel cas la
# compilation vers du html casserait l’interactivité de votre site. Il permets
# d’effectuer une fois pour toute les calculs sur votre ordinateur, plutôt que de 
# les faire faire à votre serveur à chaque requête.


# Ce script est fourni tel quel, il est préférable de comprendre son
# fonctionnement avant de chercher à l’employer, le ouebmestre de micr0lab ne
# serait être responsable d'un quelconque effet indésirable engendré par l'emploi 
# de ce script.

# Votre attention est notamment attirée sur le fait que si un fichier index.html
# existait déjà dans un dossier où se trouve un fichier index.php, et que ce
# fichier est différent du rendu statique obtenu à partir du fichier index.php,
# alors ce fichier index.html sera écrasé.

# Pour que ce script soit utile, pensez à préciser dans le fichier .htaccess à
# la racine de votre site (sans le # le précédant) : 
# DirectoryIndex index.html index.php
# Ainsi, la page index.html sera servie par défaut, et si elle n’existe pas,
# alors sera affichée index.php.

# Bonne compilation !

# Changements avec la version 1 : 
# Désormais, les résultats des téléchargements, et la mise à jour ou non du
# fichier index.html ne sont plus affichées au fur et à mesure, mais stockées dans 
# des variables, triées, et affichées à la fin.


#####################
# À personnaliser      ! #
####################

# L’adresse locale de votre site.
path=http://localhost/micr0lab/
# Le chemin du dossier où se trouve votre site.
dossier=/donnees/micr0lab/

# Ici, on suppose que votre site est constitué de dossiers qui contiennent
# chacun au plus une page en php à compiler.
# On suppose que cette page se nomme index.php, elle est ainsi affichée par
# défaut lorsque l’on entre simplement le chemin du dossier.

# On commmence fixer comme série de paramètres la liste des fichiers php à
# compiler : 
set `find $dossier -name "index.php" -o -path "*/sites/*" -prune -type f`
# Ici, on liste tous les fichiers index.php de tous les dossiers contenus dans
# le chemin $dossier, à l’exception des dossiers qui se trouvent dans le dossier
# "sites".
# Bogue : le fichier /sites/index.php est pris en compte. Ça ne pose pas de
# soucis, mais c’est curieux. Si on veut l’exclure, il suffit de préciser entre «
# -type f  » et « `  » ce qui suit : «  ! -name index.html  ».

# Pour lister simplement tous fichiers index.php de tous les dossiers, faîtes
# set `find $dossier -name "index.php"`

#############################
#Fin de la personnalisation.#
#############################


# Quelques variables (tableaux et compteurs) pour stocker respectivement…
# Les erreurs au téléchargement
declare -a erreurs_telechargement
declare -i compt_erreurs_telechargement=0
# Les fichiers crées
declare -a nouveaux_fichiers
declare -i compt_nouveaux_fichiers=0
# Les fichiers écrasés
declare -a fichiers_ecrases
declare -i compt_fichiers_ecrases=0
# Les fichiers ignorés
declare -a fichiers_ignores
declare -i compt_fichiers_ignores=0
#Pour dater la compilation
jour=$(date +%D)
heure=$(date +%T)



for fich
# Pour chacun des fichiers index.php trouvé…
do
    echo "En train de traiter $path${fich:${#dossier}}"
    wget $path${fich:${#dossier}} -q -O /tmp/index.html
# On enregistre une version html que l’on sauvegarde dans /tmp/index.html à l’aide de wget.
            if [ $? -ne 0 ]
# Si la commande wget a renvoyé une erreur   …
            then 
                let "compt_erreurs_telechargement= $compt_erreurs_telechargement + 1"
                erreurs_telechargement[$compt_erreurs_telechargement]=$path${fich:${#dossier}:-3}html
                rm /tmp/index.html
# On stocke dans le tableau l'adresse de la page pour laquelle il y a eu une erreur et on supprime le fichier /tmp/index.html.
            else 
# Si la commande wget n’a pas renvoyé d’erreur   …
  sed -i '1s|^|<!--\n        Bienvenue, lecteur-trice de code source !\n\n\n Comment est fabriqué ce site ?  \n               — https://micr0lab.org/tech/ \n           — https://micr0lab.org/rouage/ \n         — https://micr0lab.org/humains.txt\n\n\n  Licence : \n            Code le plus souvent sous licence art libre (artlibre.org), voir https://micr0lab.org/rouage/droits/#d_site pour plus d’infos.\n\n\n      Contact : \n            Voir https://micr0lab.org/contact/\n\n\n **********************\n *     =======> Puisque tu es là <======\n *      Tu aimes le code?\n *           Tu modèles les octets ?\n *                      Les arts numériques de micr0lab (https://micr0lab.org/arts_numeriques/) sont là !\n *     ======> Proposes-y tes projets ! <======\n **********************\n -->|' /tmp/index.html 
# On marque le fichier obtenu.
            tidy -config /donnees/micr0lab/tech/scripts/config-tidy -m /tmp/index.html
                if [ -f ${fich:0:-10}/index.html ]
# On regarde si le dossier dans lequel se trouvait le fichier index.php actuellement compilé contenait déjà un fichier index.html.
                then
                    DIFF=$(diff ${fich:0:-10}/index.html /tmp/index.html)
#index.html existe déjà, on compare la version obtenue et la version actuelle.
                    if [ "$DIFF" != "" ]
                    then
# Si les fichiers sont différents…
                        let "compt_fichiers_ecrases= $compt_fichiers_ecrases + 1"
                        fichiers_ecrases[$compt_fichiers_ecrases]=$path${fich:${#dossier}:-3}html
                        mv /tmp/index.html ${fich:0:-10}/index.html
                        #sed -i "/<head>/ i <!-- Version compilée en html le $jour vers $heure selon la méthode décrite à http://micr0lab.org/tech/scripts/#php_vers_html. -->\n" ${fich:0:-10}/index.html
# On stocke dans le tableau l’adresse de la page écrasée et on écrase le fichier index.html avec la version générée par wget.
                    else
# Si le fichier index.html qui existait déjà et le fichier index.html obtenu avec wget sont identiques  …
                        let "compt_fichiers_ignores= $compt_fichiers_ignores + 1"
                        fichiers_ignores[$compt_fichiers_ignores]=$path${fich:${#dossier}:-3}html
                        rm /tmp/index.html
# Alors on stocke dans le tableau l’adresse de la page ignorée et on efface le fichier généré par wget.
                    fi
                else
# Le fichier index.html n’existait pas.
                    let "compt_nouveaux_fichiers= $compt_nouveaux_fichiers + 1"
                    nouveaux_fichiers[$compt_nouveaux_fichiers]=$path${fich:${#dossier}:-3}html
                    mv /tmp/index.html ${fich:0:-10}/index.html
                    sed -i "/<head>/ i <!-- Version compilée en html le $jour vers $heure selon la méthode décrite à http://micr0lab.org/tech/scripts/#php_vers_html. -->" ${fich:0:-10}/index.html
# On stocke l’adresse du fichier crée dans le tableau et on déplace la version fabriquée par wget dans le dossier
                fi
            fi
done


#####
# Désormais, on affiche les résultats.
echo -e "\n"

# Pour les pages laissées intactes :
if [ "$compt_fichiers_ignores" != "0" ] 
then
    echo -e "********************* \n* Ont été ignorés : *\n*********************"
    while [ "$compt_fichiers_ignores" != "0" ]
    do 
        echo ${fichiers_ignores[$compt_fichiers_ignores]}
        let "compt_fichiers_ignores = $compt_fichiers_ignores -1"
    done
    echo -e "\n"
else
    echo -e "*********************\n* Tous les fichiers ont été modifiées ou crées ! *\n*********************\n"
fi

#Pour les pages en erreurs : 
if [ "$compt_erreurs_telechargement" != "0" ] 
then
    echo -e "****************************** \n* Erreur au téléchargement : *\n******************************"
    while [ "$compt_erreurs_telechargement" != "0" ]
    do 
        echo ${erreurs_telechargement[$compt_erreurs_telechargement]}
        let "compt_erreurs_telechargement = $compt_erreurs_telechargement -1"
    done
    echo -e "\n\n"
else
    echo -e "************************************\n* Aucune erreur au téléchargement. *\n************************************\n\n"
fi

# Pour les pages créées :
if [ "$compt_nouveaux_fichiers" != "0" ] 
then
    echo -e "********************* \n Ont été crées :\n*********************"
    while [ "$compt_nouveaux_fichiers" != "0" ]
    do 
        echo ${nouveaux_fichiers[$compt_nouveaux_fichiers]}
        let "compt_nouveaux_fichiers = $compt_nouveaux_fichiers -1"
    done
    echo -e "\n\n"
else
    echo -e "*******************************\n* Aucun nouveau fichier crée. *\n*******************************\n\n"
fi 

# Pour les pages écrasées :
if [ "$compt_fichiers_ecrases" != "0" ] 
then
    echo -e "**********************\n* Ont été écrasées : *\n**********************"
    while [ "$compt_fichiers_ecrases" != "0" ]
    do 
        echo ${fichiers_ecrases[$compt_fichiers_ecrases]}
        let "compt_fichiers_ecrases = $compt_fichiers_ecrases -1"
    done
    echo -e "\n\n"
else
    echo -e "*************************\n* Aucun fichier écrasé. *\n*************************\n\n"
fi 

### Fin de l’affichage des résultats.

Télécharger ce script.

 

Valider un site d’un script

Ce script sert à valider tout un site avec le validateur du W3C couplé au validateur validator.nu installés en local. L’utilité d’avoir un site conforme à ces recommandations et la façon d’installer ces validateurs sont expliqués ailleurs.


Télécharger ce script.

 

Compiler puis valider un site d’un script

Ce script couple les deux scripts précédents : il « compile » tout votre site du php vers le html, puis valide les pages html nouvellement créés. Une compréhension poussée des deux scripts précédents est hautement souhaitée, les pré-requis sont les mêmes : avoir un validateur installé localement, que votre site ne soit composé que de pages index.php, une certaine organisation des dossiers et de la façon d’accéder à votre site en local, etc.


Télécharger ce script.

 

Contact :

Contact Plan Lettre F.a.q. C.G.U.