nekashokoi Posté 24 Septembre 2008 Posté 24 Septembre 2008 Bonjour à tous. j'ai un souci avec la fonction chmod,dont j'ai besoin pour permettre de donner à une image uploadée par formulaire les autorisations suffisantes pour qu'elle soit réutilisable,avec une balise <img>, un souci, tout simplement parce qu'elle ne fonctionne pas alors que le systeme d'exploitation de mon serveur (celeonet) fonctionne sous Linux... voiçi le code qui traite le fichier uploadé. <?phpif ($_FILES["fichier"] ["size"] > 0 ){mysql_connect ("*****", "*****", "*****"); // la table noms sert à donner un nom définitif et unique sous forme de chiffre au fichier mysql_select_db ("*****"); mysql_query("INSERT INTO noms VALUES('')");$num1 = mysql_num_rows(mysql_query ("SELECT * FROM noms"));mysql_close();$frmat1=explode ( '/' ,$_FILES["fichier"]["type"]);move_uploaded_file($_FILES["fichier"] ["tmp_name"], "/home/www/lesite/www/test/newsimg/". $num1 .".". $frmat1[1]);$a = "http://www.lesite.fr/test/newsimg/";$ab="/home/www/lesite/www/test/newsimg/";$b = ".";$c=explode ( '/' ,$_FILES["fichier"]["type"]);$fichier1b=$ab.$num.$b.$c[1];$fichier1=$a.$num.$b.$c[1];//cette variable contiendra l'adresse du fichier,réutilisée hors de la boucle, à la fin.chmod ($fichier1b, 0755);}?>else{echo "erreur, votre fichier est trop lourd";}?> J'espère être étourdi (quoi d'autre après tout!?) et vous remercie d'avance, et, sur ce, bonne journée!
camillejg Posté 24 Septembre 2008 Posté 24 Septembre 2008 Bonjour nekashokoi, ne te serais tu pas trompé, par hasard, sur ton nom de variable : $fichier1b=$ab.$num.$b.$c[1]; $fichier1=$a.$num.$b.$c[1];//cette variable contiendra l'adresse du fichier,réutilisée hors de la boucle, à la fin. Ne serait-ce pas plutôt $num1 ! Camille
nekashokoi Posté 25 Septembre 2008 Auteur Posté 25 Septembre 2008 (modifié) Si, d'ailleurs, autant pour moi, c'est parce que normalement l'opération se fait pour cinq uploads ,cette partie fonctionne bien sur le code dont je me sers et j'avais oublié d'effacer le 1 ici pour le montrer sur le forum, merci tout de même! <?phpif ($_FILES["fichier"] ["size"] > 0 ){mysql_connect ("*****", "*****", "*****"); // la table noms sert à donner un nom définitif et unique sous forme de chiffre au fichiermysql_select_db ("*****");mysql_query("INSERT INTO noms VALUES('')");$num = mysql_num_rows(mysql_query ("SELECT * FROM noms"));mysql_close();$frmat1=explode ( '/' ,$_FILES["fichier"]["type"]);move_uploaded_file($_FILES["fichier"] ["tmp_name"], "/home/www/lesite/www/test/newsimg/". $num1 .".". $frmat1[1]);$a = "http://www.lesite.fr/test/newsimg/";$ab="/home/www/lesite/www/test/newsimg/";$b = ".";$c=explode ( '/' ,$_FILES["fichier"]["type"]);$fichier1b=$ab.$num.$b.$c[1];$fichier1=$a.$num.$b.$c[1];//cette variable contiendra l'adresse du fichier,réutilisée hors de la boucle, à la fin.chmod ($fichier1b, 0755);}?>else{echo "erreur, votre fichier est trop lourd";}?> Modifié 25 Septembre 2008 par nekashokoi
nekashokoi Posté 26 Septembre 2008 Auteur Posté 26 Septembre 2008 mais le problème avec le chmod demeure!
nekashokoi Posté 27 Septembre 2008 Auteur Posté 27 Septembre 2008 je peut ajouter que tous les dossiers du site sont en 755, et que par défaut, les images uploadées par le formulaire sont en 600, ce qui ne change pas malgrès le chmod.
Dan Posté 27 Septembre 2008 Posté 27 Septembre 2008 Fais un essai en mettant /home/www/lesite/www/test/newsimg/ en mode 777 ... Vu que je ne sais pas si tu tournes Php en CGI ou module Apache !
Kioob Posté 27 Septembre 2008 Posté 27 Septembre 2008 Bonjour, il me semble que chez Celeonet c'est du suexec+fastcgi oui. Le premier truc à faire à mon avis est de regarder via FTP si le chmod est bien effectué. J'ai un sérieux doute quand à la construction de ta variable $fichier1b. Si le chmod ne passe pas, afficher les erreurs de PHP pourrait être utile... Sinon les droits 0644 sont amplement suffisant pour qu'Apache ait accès aux images... ainsi que les autres hébergés. Pas la peine de prendre plus de risque. Avec SuExec l'idéal serait soit 0640 soit 0604 selon la configuration utilisée par l'hébergeur. Ca aussi tu peux le vérifier par FTP : envoie une image par FTP et regarde ses droits, ils sont certainement "bons" d'origine.
nekashokoi Posté 27 Septembre 2008 Auteur Posté 27 Septembre 2008 (modifié) j'ai essayé d'uploader avec mon ftp, ça marche, bonnes autorisations et compagnie, mais par le formulaire, que nenni, j'ai regardé dans le php.ini, rien de spécifié à ce sujet, en tout cas pour ce à quoi j'ai acces, j'ai aussi essayé la proposition de Dan, toujours rien. changer aussi l'adresse utilisée pour la variable $fichier1b en mettant "http://www.lesite.fr/test/newsimg/ au lieu de /home/www/lesite/www/test/newsimg/ pas d'erreurs mais pas de changement de chmod non plus. peut il y avoir un souci avec autre chose? Modifié 27 Septembre 2008 par nekashokoi
Kioob Posté 27 Septembre 2008 Posté 27 Septembre 2008 Je me répète, mais vérifie déjà par FTP si le chmod() est bien effectué... Le débugage, ça se fait par étape. *) par FTP, vérifie que le fichier soit bien uploadé dans le dossier que tu souhaites. Sa date est elle bien mise à jour lors de l'upload ? *) par FTP toujours, tu dis que tu me confirmes que tu vois 0600 comme droits par défaut quand tu ne fais pas ton chmod ? *) quand tu fais un chmod 0644 (via PHP hein) et que tu vérifies par FTP derrière, tu vois quels droits ? 0600 toujours, ou bien un truc farfelu ? *) as tu vérifié le contenu de ta variable ? *) as tu activé l'affichage des erreurs PHP ? *) as tu regardé quels droits le serveur FTP attribue t'il par défauts aux images, afin de savoir quels droits tu dois mettre ? changer aussi l'adresse utilisée pour la variable $fichier1b en mettant "http://www.lesite.fr/test/newsimg/ au lieu de /home/www/lesite/www/test/newsimg/pas d'erreurs mais pas de changement de chmod non plus. Si tu n'as pas eu d'erreur là dessus c'est que leur affichage est désactivé... parce que tenter de modifier des droits d'accès via HTTP, ça a peut de chance d'arriver à quoi que ce soit. Remplace ton bloc "chmod" par ça : error_reporting( E_ALL );ini_set( 'display_errors', true );var_dump( $fichier1b );var_dump( chmod( $fichier1b, 0644) );exit;
nekashokoi Posté 28 Septembre 2008 Auteur Posté 28 Septembre 2008 Je viens de vérifier via ftp le chmod >d'un fichier uploadé par ftp dans le dossier newsimg (644) pour le chmod php J'ai remis "/home/www/lesite/www/test/newsimg/" pour la variable $fichier1b. et j'ai mis le bout de code pour afficher les erreurs que tu à proposé,effectivement il y à une erreur, la voici : >>> string(39) "/home/www/lesite/www/test/newsimg/.png" bool(true) Enfin j'ai vérifié par ftp les autorisations du fichier uploadé par ce biais,le fichier est bien là mais le chmod est de 600.
Kioob Posté 28 Septembre 2008 Posté 28 Septembre 2008 Le code que je t'ai donné n'affiche pas d'erreur, mais le contenu de ta variable et le résultat de la fonction. Et comme je le soupçonnais, on peut clairement voir que c'est le chemin de ton fichier qui est faux : /home/www/lesite/www/test/newsimg/.png. Bref le chmod semble parfaitement fonctionner (d'où le "true" en réponse), sauf qu'il est fait sur le fichier ".png" qui est un fichier caché et que tu ne vois probablement pas via FTP.
nekashokoi Posté 28 Septembre 2008 Auteur Posté 28 Septembre 2008 (modifié) eh bien je suis ravi, ça fonctionne! Milles mercis à vous et en particulier à toi Kioob pour ton aide précieuse sans laquelle je ne serais pas tiré d'affaire ! merci encore et bonne soirée! Modifié 28 Septembre 2008 par nekashokoi
Sujets conseillés
Veuillez vous connecter pour commenter
Vous pourrez laisser un commentaire après vous êtes connecté.
Connectez-vous maintenant