Uploader des images avec SPIP [SME]

SMESPIPUPLOAD

Depuis la bascule de sites internet spip d’un serveur sme 7 à sme 8, j’ai eu la surprise que tous les sites spip hébergé sur le nouveau serveur ne voulaient pas uploader des documents ou images.

Impossible d’uploader

En cliquant sur le lien, j’ai constaté qu’il manquait une variable à renseigner au niveau du moteur php.

Erreur 6 dossier temporaire

VERIFICATION DE L’ANOMALIE

Pour vérifier cette anomalie, il suffit de créer un fichier phpinfo.php à la racine d’un des sites qui ne fonctionnent pas avec les instructions suivantes :

Puis d’appeler ces infos en appelant :
http://votresiteinternet/phpinfo.php

Le site vous retourne alors les valeurs de php chargées et nous voyons que la valeur upload_tmp_dir n’est pas renseignée.

Le problème vient du fait que spip se sert de la configuration apache depuis php.ini et de l’attribut "upload_tmp_dir".

Celui-ci doit être renseigné par un répertoire ayant les droits de lecture et d’écriture.

TESTER UNE SOLUTION/VARIABLE

Il faut donc créer un répertoire pour les upload de spip.

J’ai pensé qu’un répertoire intitulé tmpspip, sous /opt conviendrait.
Je l’ai volontairement placé à cet endroit afin qu’il soit accessible depuis les sites de toutes les ibays et en plus, il pourra, à souhait, être sauvegardé avec le reste du système (voir article inclure répertoire opt dans les sauvegardes smeserveur sur ce même site internet).

Nous nous connecterons donc avec putty et invoquerons les commandes suivantes :

Voilà, c’est fait, et à partir de ce moment, on serait tenté d’aller modifier directement le fichier php.ini en ajoutant l’instruction

Puis redémarrer le service http avec

Pour enfin vite aller dans votre site spip préféré et uploader une image ou un document pour voir que ça fonctionne. .. Et ça fonctionne !
Dans la négative, vous pouvez vérifier la valeur d’upload_tmp_dir avec le fichier phpinfo.php et son appel dans la procédure décrite ci-dessus (au cas où vous auriez fait une faute de frappe par exemple).

On a fini ?, mais non !!!

SOLUTION PERENNE

A cette étape, nous savons que nos modifications vont fonctionner, mais à n’importe quel redémarrage-reconfiguration du serveur, par exemple lors d’une mise à jour, les modifications sont perdues (configuration sme oblige).

Alors, pour rendre ces modifications permanentes, il faut passer par une petite étape, comprendre les templates. (au moins un petit peu comme pour mon cas).

Les templates sont des fragments de tous les fichiers vitaux de votre sme. Php.ini par exemple, est coupé en une multitude de fragments tous stockés dans /etc/e-smith/templates/etc/php.ini/

Au redémarrage du système, ces fragments reconstituent le fichier php.ini d’origine.

Mais pour résoudre notre problème présent dirons-nous, le détail ci-dessous aideront à comprendre le fonctionnement des templates :

 je crée dans les templates personnalisées un répertoire devant accueillir mes propres modifications du fichier php.ini :

Je cherche le fragment de fichier qui m’intéresse dans /etc/e-smith/templates/etc/php.ini/

Ici, je constate que le 60FileUploads peut contenir ma variable de répertoire temporaire.

Je copie donc le fragment « origine » (sur lequel je veux faire des modifications ) dans ce répertoire personnalisé (templates-custom)

Si l’instruction n’est pas dans un fragment d’origine, je peux en créer un en prenant un numéro de fragment n’existant pas (le numéro correspondant à la position où il se trouvera dans le fichier destination (le cas présent, le fichier php.ini)

 je modifie le fichier copié (ou mon propre fragment), dans templates-custom.

 j’ajoute la ligne (pour le cas présent) :

 je quitte nano en sauvegardant le tout.


Si j’avais alors souhaité mon propre template sans modifier le template système, j’aurais tout simplement créé un fichier sous /etc/e-smith/templates-custom/etc/php.ini/ que j’aurais appelé, par exemple 61RepUpload (je suis libre du nom que je veux utiliser).

J’éditerais ce fichier :

et j’aurais ajouté la ligne dans ce fichier :

Nota : Sachant que le fichier commence par 61, ses instructions seront interprétées immédiatement après 60FileUploads.


 Il suffit ensuite de valider le fragment et reconstruire le php.ini :

Puis de redémarrer le serveur http

Notez qu’une reconfiguration-redémarrage du serveur depuis la console d’administration aura le même effet.

Voilà, c’est fini, la modification sera prise en compte par le serveur aux redémarrages...

ANNULATION

En cas d’erreur, on peut bien sûr faire machine arrière

Pour annuler une modification, il suffit tout simplement de supprimer le fragment de fichier créé ou copié dans templates custom, suivi des commandes suivantes

Vers SME 9

Au delà de toutes ces manipulations, le blocage des upload_tmp-dir peut persister.
Nous trouvons le coupable dans les messages

Aug 26 22:10:05 goupil httpd : PHP Warning : Unknown : open_basedir restriction in effect. File(/tmp) is not within the allowed path(s) : (/home/e-smith/files/ibays/) in Unknown on line 0 Aug 26 22:10:05 goupil httpd : PHP Warning : File upload error - unable to create a temporary file in Unknown on line 0

En fait c’est le openbasedir qui bloque, c’est en quelque sorte
une prison qui empêche les applications php de sortir des répertoires
par défaut que on leur a attribué. Il faut donc personnaliser l’ebay contenant le site internet pour qu’elle puisse aller écrire dans le répertoire temporaire.

L’explication estici
et la commande est, par exemple :

Et tout rentre dans l’ordre, comme par magie.

J’invite d’ailleurs à installer l’excellente contrib de Stéphane de Labrusse (que je remercie encore de m’avoir personnellement guidé pour le coup)
Il s’agit de smeserver-webhosting, qui ne fonctionne qu’à partir de la sme 9.

Vous trouverez la procédure complète d’installation de webhostingici.
Ainsi, vous trouverez tout sur l’interface d’administration de votre serveur. N’est-ce pas une contribution royale ???