Aller au contenu

Problème avec la fonction Chmod


nekashokoi

Sujets conseillés

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é.

<?php
if ($_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!

Lien vers le commentaire
Partager sur d’autres sites

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

Lien vers le commentaire
Partager sur d’autres sites

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, :whistling:

merci tout de même!

<?php
if ($_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('')");
$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é par nekashokoi
Lien vers le commentaire
Partager sur d’autres sites

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.

Lien vers le commentaire
Partager sur d’autres sites

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 &quot;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é par nekashokoi
Lien vers le commentaire
Partager sur d’autres sites

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 &quot;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;

Lien vers le commentaire
Partager sur d’autres sites

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.

Lien vers le commentaire
Partager sur d’autres sites

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.

Lien vers le commentaire
Partager sur d’autres sites

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é par nekashokoi
Lien vers le commentaire
Partager sur d’autres sites

Veuillez vous connecter pour commenter

Vous pourrez laisser un commentaire après vous êtes connecté.



Connectez-vous maintenant
×
×
  • Créer...