Bonsoir,
Pour faire face à un crash récent (disque dur local de mon serveur Piwigo privé archi-plein), je pensais pouvoir utiliser un disque dur en réseau (d2 Network) monté par mount.cifs sur mon serveur. Je ne suis pas sûr du tout que cela va marcher car je vais probablement avoir des pb de droit en écriture de mon site qui tourne sous Apache (mon serveur est sous Unix - Fedora 11) sur le disque dur secondaire.
Mon disque dur réseau offre 5 protocoles différents pour les transferts/accès : SMB, AFP, FTP, HTTP, Bonjour. Ceci dit, y a-t-il déjà une description détaillée d'un tel montage avec Piwigo utilisant l'un de ses protocoles, qui m'éviterait de faire un mount, et qui gérerait correctement les permissions en ècriture surtout ? J'ai cherché sur le forum sans trouver.
Quelqu'un a-t-il une suggestion ou une solution tte prête avant que je démarre des grosses bêtises de ma conception ?
Si cela n'est pas le bon forum, je m'en excuse à l'avance :-)
Merci d'avance, G.
PS Mon serveur est sous Piwigo 2.1.2.
Hors ligne
Bonsoir grodid,
première question : quelle méthode utilises-tu pour l'ajout de photos ? (formulaire web dans l'administration, pLoader/Digikam ou FTP+synchro)
Hors ligne
Bon, j'ai repris les essais, mais sans succès, car il y a qqe chose qui n'a pas l'air de marcher avec les liens symboliques. Je m'explique :
- j'ai monté une partition externe avec mount sur mon serveur Linux (sur lequel tourne Piwigo :-) sur le mount point /mnt/DATA
- j'ai créé un dossier nommé upload dans cette partition, par la commande : mkdir -p /mnt/DATA/Storage/upload
- je vérifie que ce dossier et son parent ont les bonnes permissions (cad les mêmes que le dossier upload dans la structure Piwigo :
> ll -td /mnt/DATA/Storage/upload
drwxrwxrwx. 1 apache apache 0 sept. 15 22:36 /mnt/DATA/Storage/upload
> ll -td /mnt/DATA/Storage/
drwxrwxrwx. 1 apache apache 0 sept. 15 22:36 /mnt/DATA/Storage/
> ll -td /var/www/html/tpiwigo1/upload
drwxrwxrwx. 5 apache apache 4096 sept. 2 22:46 /var/www/html/tpiwigo1/upload
- je vais dans le dossier /var/www/html/tpiwigo1
- je renomme le dossier upload : mv upload SAVE-upload
- je créée un lien symbolique qui pointe vers la zone upload de ma partition externe, et je change les permissions de ce lien :
> ln -s /mnt/DATA/Storage/upload upload
> chown -vch apache:apache upload
Changement de propriétaire de `upload' vers apache:apache
Puis je lance un transfert avec pLoader depuis mon ordi client, et ... rien n'est transféré, car pLoader me signale que tous les transferts tombent en erreur. Mais je ne sais pas pourquoi ;-)
Quelqu'un aurait une idée ? Quelle bêtise ai-je faite (mon OS est Fedora 11) ?
Merci d'avance, G.
Hors ligne
Là comme ça je n'ai pas d'idée, je peux simplement te dire que j'utilise des liens symbolique aussi et que ça ne pose pas de soucis sur ma Debian.
Hors ligne
Je n'ai pas regardé le code, mais je suppose que l'API utilise du fwrite ?
on peut lire dans la doc PHP (http://fr2.php.net/manual/en/function.fopen.php) :
If PHP has decided that filename specifies a local file, then it will try to open a stream on that file. The file must be accessible to PHP, so you need to ensure that the file access permissions allow this access. If you have enabled safe mode, or open_basedir further restrictions may apply.
Si on va voir ce qui est indiqué sur l'option open_basedir, on lit :
When a script tries to open a file with, for example, fopen() or gzopen(), the location of the file is checked. When the file is outside the specified directory-tree, PHP will refuse to open it. All symbolic links are resolved, so it's not possible to avoid this restriction with a symlink. If the file doesn't exist then the symlink couldn't be resolved and the filename is compared to (a resolved) open_basedir .
Peux-tu vérifier la configuration de ton PHP ?
Hors ligne
grum a écrit:
Je n'ai pas regardé le code, mais je suppose que l'API utilise du fwrite ?
Pas fwrite directement mais file_put_contents qui n'est qu'une alias de fopen() + fwrite() + fclose(). Donc les mêmes restrictions s'appliquent en effet. Bien vu grum.
Hors ligne
Bonsoir,
D'abord merci pour vos nombreuses contributions ... qui se sont avérées inefficaces ! Dommage !
D'abord aucune des 2 variables 'safe_mode' ou 'open_basedir' n'est positionnée dans ma config.
Ensuite, je suis allé faire un tour du côté de .htaccess avec l'option +FollowSymlinks sans succès.
Puis j'ai positionné cette option dans httpd.conf, et là qqe chose à bougé au fond :
- aucun message dans /etc/httpd/logs/error_log ou /etc/httpd/logs/access_log ou /var/log/php-scripts.log
- les blocs sont bien transférés dans le dossier upload/buffer (pour la 1ère fois)
- mais j'ai tjs le message 'images non transférées' du côté pLoader ... Grrr...
- Cad que ces images sont référencées dans la DB mais qu'elles n'apparaissent pas dans la galerie de la catégorie, seul leur nom est visible à la place de la photo (voir image attachée, les 2 images de gauche).
Hummm ... Bizarre : les fichiers *.jpg sont bien là, au bon endroit dans l'arborescence ...
Et je viens de vérifier à l'aide du menu 'Férer' qu'elles sont bien visibles par tt le monde ;;-(
Inutile de préciser que j'ai relancé plusieurs fois mon serveur http pendant tous ces tests.
Conclusion, il y a encore qqe chose de coincé, mais je n'ai aucun message d'erreur visible, donc ...
C'est quoi ? Ou encore : comment faire pour savoir ?
Merci d'avance, Gilbert.
Hors ligne
grodid a écrit:
D'abord aucune des 2 variables 'safe_mode' ou 'open_basedir' n'est positionnée dans ma config.
C'est normal : il s'agit du mode de fonctionnement par défaut : PHP n'autorise pas à aller voir ailleurs que dans les répertoires ou il est sensé trouver du PHP.
Il faut configurer PHP pour l'autoriser à lire ailleurs que dans le répertoire.
Et généralement, ce paramétrage se fait au niveau du fichier de configuration apache, car c'est apache qui indique à PHP le répertoire "racine" du site.
Il faut donc que tu paramètres soit PHP, soit apache pour autoriser le 'open_basedir' sur le répertoire qui t'intéresse.
Hors ligne
Bonsoir,
Merci pour les tuyaux Grum, mais cela ne marche pas : j'ai mis safe_mode à Off, explicitement,
et j'ai mis un paquet de diectories dans open_basedir, mais rien n'y fait.
Ce qui marche : tout (écriture, lecture) qd je vais écrire sur une nouvelle partition montée par mount, à condition de mettre selinux à permissive, après avoir installé le lien symbolique.
Qd par contre je fais un lien symbolique vers un disque réseau monté par
/sbin/mount.cifs //192.168.0.51/share /mnt/CIFS -o user=machin,password=truc,uid=48,gid=48,file_mod=0777,dir_mod=0777
- l'écriture via pLoader marche bien, et le message me dit bien que les photos sont transférées
- les droits d'accès des fichiers et dossiers photos sur le disque réseau visualisés par 'ls -l' sont tt à fait corrects
- mais l'affichage ne marche pas (voir snapshot dans un message précédent).
Tjs coincé ... G.
Hors ligne
Qui plus est, lorsque ma photo s'affiche juste sous la forme de son TITRE, je N'AI PLUS ce message :
'Symbolic link not allowed or link target not accessible' (dans /etc/httpd/logs/error_log).
Ce message n'apparait que qd je passe selinux à 'enforced', mais, avec ou sans ce message seul le TITRE est affiché dans le bandeau de la galerie à la place de la vignette. Et le fait de cliquer sur ce titre ne provoque aucune erreur, mais seuls les EXIFs sont affichés. Je comprends de moins en moins ... Ne me dites pas que ces EXIFs sont stockés dans la DB qd même ?
Merci, G.
Hors ligne
Il y a deux choses :
1/ le script PHP qui doit accéder au fichier Jpeg (accès serveur - serveur) => çà se gère au niveau de PHP et Apache
2/ ton navigateur qui doit accéder au fichier Jpeg (accès client externe - serveur) => çà se gère uniquement au niveau d'Apache
Les deux accès sont complètement indépendant l'un de l'autre. Si le script arrive à accéder à la photo, ce n'est pas forcément vrai pour ton navigateur.
Saisi directement dans ton navigateur l'url vers la photo : si elle ne s'affiche pas, c'est que ton serveur apache n'est pas correctement configuré.
Par contre, là on rentre dans des problèmes de configuration système Apache/PHP qui dépassent le périmètre de Piwigo, et même si je me dépatouille pas trop mal sur Linux, mes connaissances/compétences systèmes restent limitées et pour ma part je vais avoir du mal à te dire exactement comment configurer ton environnement....
Hors ligne
grum a écrit:
Saisi directement dans ton navigateur l'url vers la photo : si elle ne s'affiche pas, c'est que ton serveur apache n'est pas correctement configuré.
Oui, dans ce cas, le navigateur se contente d'afficher l'URL que je viens de lui donner, mais pas l'image.
Je cherche comment contourner le pb via la config d'Apache ...
On progresse lentement, mais on progresse : merci. G.
Hors ligne
Le problème est résolu : il s'agit d'un bug du protocole CIFS qu'il faut contourner avec une astuce dans la configuration d'Apache, et cela n'a rien à voir avec Piwigo. Il faut simplement ajouter dans ce fichier la directive :
EnableSendfile Off
[Edit] Recette trouvée ici : https://issues.apache.org/bugzilla/show … i?id=42751
Le bon fonctionnement du serveur Apache ainsi modifié peut être testé à l'aide de wget. Exemple :
wget 'http://www.monsite.org/tpiwigo1/lesymlink/2010/09/18/thumbnail/TN-20100918171859-ac36b997.jpg'
où lesymlink est le lien symbolique qui pointe vers la branche de l'arborescence hébergée par le disque réseau.
Je vais publier prochainement une recette complète à appliquer dans le cas de mon setup de Piwigo hébergé par Fedora,
pour expliquer l'utilisation d'un disque réseau.
Je marquerai ce topic comme résolu après ce futur post. G.
Dernière modification par grodid (2010-09-19 21:13:03)
Hors ligne
grodid a écrit:
Je vais publier prochainement une recette complète à appliquer dans le cas de mon setup de Piwigo hébergé par Fedora, pour expliquer l'utilisation d'un disque réseau.
Excellent, merci grodid
Hors ligne