Logo ne s'affiche pas après déplacement de serveur

Bonjour à tous
Je suis en train de tester avant de migrer mon Dolibarr v.17 d’un hébergement vers un autre
Cela implique aussi un changement de NDD

J’ai recopié les dossiers, avec les bons droits à priori, la BDD a été restaurée, le conf a été adapté en conséquence

Tout semble fonctionner sauf que les logos et images liées aux utilisateurs ne s’affichent pas et si j’essaie de les afficher dans un onglet, j’obtiens un message me disant me l’image (via viewimage.php) ne peut être affichée car elle contient des erreurs

J’ai tenté en supprimant l’image puis en uploadant une nouvelle, même résultat

J’ai trouvé différents posts sur le forum mais aucun ne résout mon pb

Seul changement apparent, PHP 8.1.31 au lieu de 7.3.33, mais même en repassant sur un 7.3.33 sur le nouvel hébergement, aucun changement

Quelqu’un aurait-il une idée ?

Cordialement
Eric

Bonjour
une piste à vérifier ; les extension php nécessaires à la génération/manipulation des images

Hello,

Essayez d’ouvrir cette image avec bloc note, vous aurez surement un « beau » message d’erreur qui vous dira ce qu’il manque.

Bonsoir
A priori toutes les extensions nécessaires sont présentes :
Dans « Outils admin / Infos PHP », tout est coché au vert
J’ai comparé les options PHP sur les deux hébergements, et celles présentes dans l’ancien (qui affiche les images) sont bien actives dans le nouveau (qui n’affiche pas les images, avec l’erreur viewimage.php indiquée précédemment)

Quelqu’un aurait une autre idée ?
Cordialement
Eric

Bonsoir
Pas de message d’erreur en ouvrant l’image avec Bloc Note ou NotePad++
Depuis l’explorateur de fichiers du CPanel, en demandant une visu, elle s’affiche correctement
Cordialement
Eric

Bonjour,

Ce message d’erreur n’existe pas dans Dolibarr.

Quel est le message d’erreur exact que vous obtenez ?

Bonsoir
L’image ne s’affiche pas
Si je clique droit et que je demande à afficher l’image dans un autre onglet, j’obtiens

image

Cordialement
Eric

Et je précise que je ne vois rien dans les logs du serveur qui soit en rapport avec les images

Bonjour,

Quand vous arrivez la, faite un Ctrl+S et ouvrez le fichier dans bloc note.
Si Firefox n’arrive pas à l’ouvrir c’est que soit vous avez un message d’erreur, soit vous avez un ou des espaces au début du fichier.

Vous ne trouverez rien dans les logs de dolibarr car le message d’erreur est envoyé par le navigateur pas par dolibarr.

Bonjour @ksar
Effectivement des espaces apparus en début de fichier

J’ai fait un test sur une fiche produit qui ne comportait pas d’image
Impossible de l’afficher pour les mêmes raisons, pourtant l’image au départ sur mon PC est correcte

Ca ne le fait que sur le nouvel hébergement, la même image passe bien sur l’ancien hébergement

Cela pourrait être dû à quoi ?

Je pense que je vais supprimer l’install sur le nouvel hébergement et la refaire

Cordialement
Eric

Même en repartant d’une install depuis le zip téléchargé depuis SourceForge, j’ai toujours ce problème d’affichage des images avec 2 espaces (saut de ligne) rajoutés au début des images et donc impossibilité d’afficher des images, que ce soit logo société, images des utilisateurs ou des produits

Je penche sur un problème de droits, ou un paramètre dans le CPanel du nouvel hébergement qui ne serait pas bon, mais pour l’instant je sèche

Si quelqu’un a une idée ?
Hébergement o2switch, install effectuée « manuellement » (PAS via Softcaculous)
Tout semble correct, à part ce problème d’image

cause 1
Vous pouvez avoir des caractères parasites en début de votre fichier viewimage.php avant la balise <?php
Typiquement une entête BOM (byte order mark) qui peut être rajoutée si vous avez par exemple transféré vos fichiers par ftp en mode texte et non pas en mode binaire.

cause 2
Il peut y avoir une émission de caractères supplémentaires avant l’envoi des données de l’image par viewimage.php
On peut faire un test pour voir si c’est l’origine du problème en modifiant le fichier viewimage.php de la manière suivante :
En tout début de fichier juste avant la première ligne de code, rajouter l’instruction suivante suivante pour capturer l’output.

ob_start();

et ajouter l’instruction ob_end_clean(); après l’émission des headers de l’image (vers la ligne 355 - dépend de la version du fichier)

	// Permissions are ok and file found, so we return it

	if ($type) {
		top_httphead($type);
		header('Content-Disposition: inline; filename="'.basename($fullpath_original_file).'"');
	} else {
		top_httphead('image/png');
		header('Content-Disposition: inline; filename="'.basename($fullpath_original_file).'"');
	}

	$fullpath_original_file_osencoded = dol_osencode($fullpath_original_file);
	ob_end_clean(); // ligne à rajouter
	readfile($fullpath_original_file_osencoded);

Si cela fonctionne après cela, c’est que quelque part dans le code de viewimage il y a l’émission de vos retours à la ligne qui perturbent l’affichage de l’image.

Merci @Beers
En rajoutant la capture de l’output, ça fonctionne nickel

Après il faut quand même que je trouve réellement d’où cela provient (pour éviter de devoir modifier à chaque montée de version) car j’ai l’impression avec différents tests (incluant le fait de basculer en v.20.0.3) que cela dépend en fait de la sauvegarde de ma BDD ?!?!?

Avec une BDD vierge, tout fonctionne OK (y compris en utilisant le dossier Documents récupéré de mon ancien hébergement)
Mais dès que j’efface la BDD et que je réimporte ma sauvegarde SQL, ça marche plus :unamused:
Je vais retenter une nouvelle sauvegarde et un nouveau test

Mais en attendant un GRAND MERCI :+1:t2:

Eric

Je doute fort que cela provienne de la BDD.

C’est typiquement le problème d’un fichier qui a des caractères parasites avant la balise <?php

Comme piste probable l’usage d’un éditeur de texte qui rajoute une entête BOM avant la sauvegarde.
Un fichier qu’on édite après une installation c’est le fichier conf.php, il faudrait regarder si ce fichier n’aurai pas des caractères parasites, avec un éditeur de texte qui permet d’afficher les caractères invisibles.

@Beers
Je suis également étonné de mettre en doute la BDD… mais au niveau du serveur, il n’y a eu aucun transfert effectué depuis le tout premier, ni intervention sur les fichiers images (entre autres par un éditeur de texte)

Si les fichiers images étaient corrompus dès le premier transfert (en supposant que le transfert ait été mal réalisé), cela n’aurait jamais dû fonctionner
Or mes seuls tests concluants l’ont été avec une BDD « neuve », y compris en faisant pointer le conf sur le dossier Documents initialement repris de l’ancien hébergement (et donc théoriquement relié à l’ancienne BDD)

Le problème ne survient que lorsque j’efface la BDD et que je restaure la sauvegarde SQL, sans rien toucher d’autre (le dossier Documents reste donc le même, avec les mêmes fichiers et les mêmes droits)

Mais j’l’aurais un jour, j’l’aurais… (enfin j’trouverais pour ceux qui n’ont pas la ref :wink:)

Ce ne sont pas les images qui sont corrompues.
Le problème peut venir de fichiers php qui ont été modifiés (tels que le fichier conf.php).
Par exemple notepad sur windows est connu pour insérer une entête BOM dans les fichiers s’il est mal configuré

Si vous voulez chercher d’où ça vient, vous pouvez déplacer l’instruction ob_start(); après la première ligne de code, puis après la deuxième etc dans viewimage.php et une fois que l’erreur apparait vous avez la ligne fautive qui doit vous permettre de remonter à la source du problème.

En l’occurrence je modifie le conf directement depuis le serveur, donc je ne pense pas que cela vienne de là

EDIT : et je rajouterais que sinon j’utilise effectivement NotePad++ paramétré pour éviter les BOM

Bonne idée, je vais chercher en ce sens
Encore merci de ton aide
Cordialement
Eric