Jump to content

Problème avec la fonction Chmod


nekashokoi

Recommended Posts

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!

Link to post
Share on other 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

Link to post
Share on other 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";
}
?>

Edited by nekashokoi
Link to post
Share on other sites

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 !

Link to post
Share on other 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.

Link to post
Share on other 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?

Edited by nekashokoi
Link to post
Share on other 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;

Link to post
Share on other 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.

Link to post
Share on other 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.

Link to post
Share on other 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!

Edited by nekashokoi
Link to post
Share on other sites

Create an account or sign in to comment

You need to be a member in order to leave a comment

Create an account

Sign up for a new account in our community. It's easy!

Register a new account

Sign in

Already have an account? Sign in here.

Sign In Now
×
×
  • Create New...