Erreur lors d'upload de document ! demande d'aide

Bonjour,

[spip 4.2.17, hébergé en hebergement mutualisé chez informaniak, php 8.2]

Je fait face à un bug que je ne comprend pas :
lors d’upload d’un document dans spip j’ai une erreur et le document n’est pas intégré à la médiathèque :
« Erreur de transfert. : SyntaxError: JSON.parse: unexpected non-whitespace character after JSON data at line 1 column 5905 of the JSON data »

En analysant les données réseaux dans firefox, il se trouve que le fichier json renvoyé par le serveur contient des données json suivis d’un warning php:

{"name":"whisky2023-35cl.jpg","size":19591,"type":"image\/jpeg","error":0,"bigup":{"formulaire":"joindre_document","formulaire_args":"","formulaire_identifiant":"5457c3","champ":"fichier_upload[]","identifiant":"@ffad0532@","extension":"jpg","vignette":{"width":"87","height":"200","data":"data:image\/jpeg;base64,}}}<br />

**Warning**: include(../squelettes/lang/local_fr.php) [[function.include.php](http://www.php.net/manual/fr/function.include.php)]: Failed to open stream: No such file or directory in **/home/clients/99ee7885f4717f1608e8b7c209fa00ef/sites/adnlaine.fr/ecrire/inc/traduire.php** on line **150**

**Warning**: include() [[function.include.php](http://www.php.net/manual/fr/function.include.php)]: Failed opening '../squelettes/lang/local_fr.php' for inclusion (include_path='.:/opt/php8.1/lib/php') in **/home/clients/99ee7885f4717f1608e8b7c209fa00ef/sites/adnlaine.fr/ecrire/inc/traduire.php** on line **150**

(j’ai écourté les données ici json).

Si je supprime le fichier local_fr.php et que je vide le cache, tout refonctionne, mais je perd mes traductions. Si je met un fichier local_fr.php contenant un array de traduction vide (donc je suis sur qu’il n’y a pas d’érreur de syntaxe php) l’erreur se produit à nouveau.
Par contre le reste de spip n’indique jamais d’erreur vis-à-vis de ce fichier et les traductions sont bien prise en compte quand il est en place.

Je n’ai aucune info dans le logs de spip et dans les logs de php, je trouve la trace de cette erreur, sans information supplémentaires:

adnlaine.fr [Tue May 27 08:53:18.892819 2025] [fastcgi:error] [pid 93761:tid 139757178787584] [client 2a02:842b:8bea:701:192b:842:4a4c:e95d:0] FastCGI: server "/home/clients/99ee7885f4717f1608e8b7c209fa00ef/.config/apache/adnlaine.fr/.fpm/php5.external" stderr: PHP message: PHP Warning:  include(../squelettes/lang/local_fr.php) [<a href='http://www.php.net/manual/fr/function.include.php'>function.include.php</a>]: Failed to open stream: No such file or directory in /home/clients/99ee7885f4717f1608e8b7c209fa00ef/sites/adnlaine.fr/ecrire/inc/traduire.php on line 150PHP message: PHP Warning:  include() [<a href='http://www.php.net/manual/fr/function.include.php'>function.include.php</a>]: Failed opening '../squelettes/lang/local_fr.php' for inclusion (include_path='.:/opt/php8.1/lib/php') in /home/clients/99ee7885f4717f1608e8b7c209fa00ef/sites/adnlaine.fr/ecrire/inc/traduire.php on line 150, referer https://adnlaine.fr/ecrire/?exec=documents

J’ai désactivé tous les modules que j’ai créé, et j’ai désactivé le pipeline que j’ai mis dans le fichier mes_options.php, j’ai supprimer mon fichier de squelette ‹ mes_fonctions › (après tout ça j’ai vidé le cache et rechargé la page des plugins). Rien n’y fait …
Je suis repassé en php 7.4 et 8.1. Pas mieux …

Pour faire des tests, j’ai aussi supprimé ce fichier (local_fr.php) sans recharger le cache. Là toutes les pages affichent cette même erreur (exactement la même), mais pour le coup c’est normal, puisque spip tente de charger le fichier mais qu’il n’existe pas

Je ne sais pas comment chercher où est le bug… Auriez vous des pistes de réflexion ? Comment chercher des infos ?

Merci beaucoup !

Thomas

Salut,

Premier point, cette version de SPIP n’est plus maintenue cf Versions maintenues - SPIP il faut mettre à jour en 4.3 mini.

Quel est le contenu du fichier local_fr.php ?

Pour info, je ne reproduis pas en SPIP 5.0-dev ni en 4.4-dev (je n’ai pas testé sur d’autre version je précise).

Possiblement, vu que l’inclusion semble utiliser des chemins relatifs (../) peut être que «quelque chose» applique un chdir dans un autre répertoire à un moment ?

Et si tu désactives l’affichage des erreurs php ?

(Je dis pas que c’est une solution propre)

Oui je sais, mais il faut que je vérifie la compatibilité des plugins que j’ai dévellopé avant de basculer.

Un fichier de langue classique :

<?php
// This is a SPIP language file  --  Ceci est un fichier langue de SPIP

if (!defined('_ECRIRE_INC_VERSION')) {
	return;
}

$GLOBALS[$GLOBALS['idx_lang']] = array(
    'calendrier_rubrique' => 'Catégorie :',
[....]
    'inscription_ok_check_mail' => 'Votre inscription a bien été faite.<br />
	Vous allez recevoir un mail de validation de création de compte.
	Votre compte sera définitivement validé quandd vous aurez cliqué sur le lien de validation dans ce mail.<br/>.',
);

Je l’ai vidé en ne gardant que l’entête et la définition du tableau, avec une seule chaine de langue => pareil, donc le pb ne viens pas de là. D’autant que pour le site, les chaines de langue sont bien traduite.

Je ne pense pas que ça vienne du core de spip : je n’avais pas le bug il y a 15j. Je n’ai pas touché au core et je ne crois pas avoir fait de mise à jour des plugins issus des dépôts depuis 15j…

Par contre, j’ai bossé sur le squelette et mes plugins.

Je viens de faire une copie complète du site et de la bdd tel qu’elle sont aujourd’hui du serveur vers une installation locale, avec php 8.1. ça marche sans bug.

Un changement de configuration du serveur ? je ne sais pas comment cherche d’où peut venir le pb… avez vous des pistes.

Je vais essayer de temporairement désactiver l’affichage des erreurs…

Dans le fichier de langue il faut mettre return [] au lieu de $GLOBALS[$GLOBALS['idx_lang']] = array()