THELIA Forum

Welcome to the THELIA support and discusssion forum

Announcement

Rejoignez la communauté sur le Discord Thelia : https://discord.gg/YgwpYEE3y3

Offline


Hello tout le monde,

J'arrive bien à faire un formulaire avec upload d'image.
L'image s'upload bien dans le bon dossier créé. Le dossier dans le cache se créé bien. Un raccourci se créé également. Mais pas l'image en cache.
J'ai sûrement oublié quelque chose pour la générer mais quoi ? Une idée ?

J'en profite également pour demander :
1/ Comment nommer l'image uploadée en fonction du champ "titre" saisi dans le formulaire ?
2/ Comment la renommer lors d'un changement de titre ?
3/ Comment supprimer l'image uploadée quand on en uploade une autre à la place ?

Last edited by Elyos (10-03-2024 12:32:44)


Aide les autres, ils t'aideront en retour.

Offline


Complément d'information :

La boutique est en cours de développement sur un sous-domaine dev.mondomaine.fr
Si je prend l'URL de l'image https://dev.mondomaine.fr/cache/images/ … enne-2.jpg ça me redirige à la racine du domaine (et non sur une erreur 404 comme pour une url/image qui n'existe pas...)

Donc je pense que, comme l'image n'est pas "manipulée", il n'y a pas de génération dans le dossier cache mais ça doit me renvoyer, via le raccourci, vers l'image originale ?

C'est bien ça @roadster31 ? Et donc du coup, ça veut dire que le raccourci n'est pas bon ?


Aide les autres, ils t'aideront en retour.

Offline


Par contre, si je rajoute

$event->setRotation(90);

ça me génère bien l'image tournée à 90° ...

J'arrive pas à comprendre pourquoi je n'arrive pas à afficher l'image non manipulée...


Aide les autres, ils t'aideront en retour.

Offline


En fouillant dans le core de thelia, j'ai vu que la variable de configuration "original_image_delivery_mode" déterminait si l'image originale devait être copiée ou si un lien symbolique devait être créé.

Par défaut (je n'ai rien touché), la variable est sur symlink (d'où les liens symboliques créés).

Sauf que ces liens symboliques, ne permettent pas de récupérer les images originales. C'est normal ou c'est un bug ?!

Je désespère là...


Aide les autres, ils t'aideront en retour.

Offline


Pour que Apache suive les liens symboliques, if faut que la directive Options +FollowSymlinks soit présente dans le .htaccess.


OpenStudio Toulouse

Offline


Merci roadster mais j'ai déjà vérifié...
.htaccess d'origine

Options +FollowSymlinks -Indexes

Aide les autres, ils t'aideront en retour.

Offline


Bon bah j'ai testé d'enlever +FollowSymlinks et......... ça fonctionne maintenant... c'est à n'y rien comprendre...

C'est en fait un problème de droits...

ça uploade les fichiers sur le serveur en 600 (je crois)... et il faut les basculer en 604 minimum

Last edited by Elyos (07-03-2024 14:36:23)


Aide les autres, ils t'aideront en retour.

Offline


Je viens de vérifier avec une image produit fraîchement uploadée...
Dans /thelia/local/media/images/product l'image est en 600 et donc... pas moyen de la visualiser (en originale).

Je pense donc qu'il y a un souci à l'upload dans le core de thelia... ?


Aide les autres, ils t'aideront en retour.

Offline


Si ça marche avec les images nativement manipulées par Thelia, et pas avec celle que toi tu manipules, le problème doit se trouver dans ton code.


OpenStudio Toulouse

Offline


Les images de ma boutique proviennent d'un import depuis la V1.
Donc je suppose que l'import des images s'est fait avec les droits d'origine ?

Mon code d'upload est identique à celui du module Carousel qui ne permet pas non plus d'afficher les images uploadées originales.

Un upload d'image sur un produit fait une copie de l'image uploadée depuis /tmp mais avec des droits qui ne permettent pas de l'afficher :
600 (-rw-------)

Si dans une boucle image produit je mets des dimensions (par exemple) ça génère une image que je peux visualiser.

Les images originales restent non affichables.

Je vais jeter un oeil du côté de umask, comme tu l'as suggéré dans ton messsage effacé : via la console ça me sort 0072 => fichier -rw----r--

Last edited by Elyos (07-03-2024 15:21:29)


Aide les autres, ils t'aideront en retour.

Offline


Bon bah je comprends pas...

Dans index.php, le code natif est :

if ($_SERVER['APP_DEBUG']) {
    umask(0000);

    Debug::enable();
}

qui s'exécute... donc ça ne devrait pas poser de problème ?!


Aide les autres, ils t'aideront en retour.

Offline


Je sèche...
A part faire un chmod sur chaque fichier uploadé je ne sais pas trop quoi faire...


Aide les autres, ils t'aideront en retour.

Offline


Bonjour et pardon, je ne comprends pas : ton problème vient des images que tu uploades via ton formulaire, ou sur les images qui ont été importées depuis une V1 de Thelia ?

Offline


Salut elm31rugby !

Les deux ^^"

En gros, tout ce qui s'uploade sur thelia reste non affichable "sans manipulation".

Exemple, si je mets cette boucle dans le fichier produt.html du front, ça me met le logo d'image introuvable :

{loop type="image" name="image.main" product={$ID} limit="1"}
	<img src="{$IMAGE_URL nofilter}" alt="{$TITLE}" class="img-responsive" itemprop="image" data-toggle="magnify">
{/loop}

Mais si je laisse la boucle native :

{loop type="image" name="image.main" product={$ID} width="560" height="445" resize_mode="borders" limit="1"}
	<img src="{$IMAGE_URL nofilter}" alt="{$TITLE}" class="img-responsive" itemprop="image" data-toggle="magnify">
{/loop}

l'image s'affiche bien CAR elle est manipulée et donc générée (largeur, hauteur, ...)

Pour faire simple...

1/ Les images uploadées sont stockées dans /local/media/images/[DIR]/[NOM].[EXT] (en droit 600) avec la création d'un symlink (en droit 777) dans /cache/images/[DIR]/ => NON ACCESSIBLE
2/ Une image "manipulée" par une boucle (largeur, hauteur, ...) est générée directement dans le dossier /local/media/images/[DIR]/ (en droit 666) => ACCESSIBLE

Les urls des images étant formées de cette façon : https://monsite.fr/cache/images/[DIR]/[NOM].[EXT], les images originales ne s'affichent pas... car le symlink veut afficher une image en droit 600...

Je ne comprends donc pas du coup POURQUOI ça les met en droit 600 dans le dossier /local/media/images/[DIR]/ (en sachant que les dossiers dans images sont créés en 777) les rendant inaccessibles.

Soit personne n'utilise les images originales et donc le bug est passé à la trappe, soit personne n'a la même configuration de serveur que moi.

L'hébergement est chez IONOS (Premium plus - sûrement un mutualisé?)


Aide les autres, ils t'aideront en retour.

Offline


Ce n'est pas un bug Thelia, c'est un problème de configuration de ton  serveur.


OpenStudio Toulouse

Offline


roadster31 wrote:

Ce n'est pas un bug Thelia, c'est un problème de configuration de ton  serveur.

J'entends bien. Mais Tout ceux qui ont un hébergement similaire à celui-ci ont donc le même problème ? Et à part mettre les variables de configuration à "copy" y'a pas d'autres possibilités ?

Y'a pas un moyen d'intercepter l'upload via un module et de faire un chmod sur le fichier ? (j'aimerais également intervenir sur le nom du fichier si possible...)


Aide les autres, ils t'aideront en retour.

Offline


Un hébergeur qui laisse PHP créer ses fichiers en 0600 est un mauvais hébergeur.

C'est qui d'ailleurs ?


OpenStudio Toulouse

Offline


Elyos wrote:

L'hébergement est chez IONOS (Premium plus - sûrement un mutualisé?)


Aide les autres, ils t'aideront en retour.

Offline


Je suis parti corriger des soucis sur le module TinyMce pour revenir avec un "oeil neuf" sur ce souci...

Par sécurité, j'ai donc modifier fichier Files/FileManager.php.
J'ai rajouté après le rename :

$fileSystem->chmod($directory.DS.$fileName,0604);

Comme ça plus de problème... (oui je sais... c'est pas bien...)

Je vais développer un plugin pour manipuler les uploads

Last edited by Elyos (10-03-2024 12:34:57)


Aide les autres, ils t'aideront en retour.

Offline


Et hop!

Un module qui :
- force le chmod des fichiers uploadés à 0604 dans /local/media/
- qui renomme les images à l'upload et à l'update selon le titre de l'objet OU le titre du parent (category, product, ...)
- qui supprime les anciens fichiers du /web/cache à l'upload et à l'update

Et c'est déjà pas mal ^^'


Aide les autres, ils t'aideront en retour.