Aller au contenu

Sujets conseillés

Posté

Bonjour,

J'ai installé sur mon site un script téléchargé ici, très pratique car il permet de tenir un cahier de texte en ligne. Mon problème vient en fait des pièces jointes que j'insère: elles sont par défaut envoyées avec les permissions 600 et non 777, du coup, lorsqu'un élève essaie de télécharger, il se retrouve avec une erreur 403. Bien entendu, je pourrais à chaque fois via le ftp, donner les droits au fur et à mesure mais il doit bien y avoir une solution pour que ça se fasse dès l'upload, non?

J'ai déjà repéré où tout ça se passe: dans le fichier enseignant/ecrire.php, ligne 113:

if ($_FILES['fichier']['tmp_name']<>'') {
$dossier_destination = '../fichiers_joints/';
$dossier_temporaire = $_FILES['fichier']['tmp_name'];
$type_fichier = $_FILES['fichier']['type'];
$nom_fichier = $_FILES['fichier']['name'];

Serait il possible de rajouter une ligne après $dossier_destination, qui commencerait par $chmod ou un truc du style qui ferait passer les permissions automatiquement à 777 par exemple.. Je n'y connais strictement rien en PHP, aussi je me tourne vers vous pour cette ligne...

J'ai bien entendu contacté en premier lieu le concepteur du script qui dans un style très télégraphique m'a dit de voir avec mon hébergeur (Celeonet), que ce doit être lui la cause du problème (mais je ne vois pas comment ni pourquoi :unsure::unsure: )

Merci d'avance!

Posté

Bonjour,

si ton dossier est accessible et que ce sont juste les pieces jointes qui ne sont pas accessibles, a priori un chmod ('ton_fichier_qui_doit_etre_accessible',555) devrait resoudre ton probleme ;-)

Posté

Merci pour ta réponse,

oui, mon dossier est accessible, sans problème. C'est juste les pièces jointes, qui ajoutées au fur et à mesure, ne le sont pas automatiquement. :nonono: D'où mon problème :P arriver à faire en sorte que le chmod se fasse tout seul comme un grand quand le fichier est envoyé sur le serveur. (vu que je ne suis pas la seule à utiliser le cahier de textes, je ne peux pas savoir quand un collègue met un fichier en ligne et donc mettre les droits nécessaires immédiatement)

Je ne sais pas si je suis claire :unsure:

[Edit captain_torche]Inutile de citer le message précédent : on vient de le lire

Posté

Oui c'était clair, et j'ai répondu dans ma réponse précédente :-P

il te suffit d'ajouter un chmod('ton_fichier_qui_doit_etre_accessible',555) après la recopie du fichier dan sle dossier de stockage.

Posté

oups... tu vois comme j'y connais rien en PHP, j'avais pas vu que c'était du code :P J'essaie tout de suite ;)

[Edit captain] idem

Posté (modifié)

Je ne dois pas savoir comment faire car j'obtiens une erreur à chaque fois :(

if ($_FILES['fichier']['tmp_name']<>'') {
$dossier_destination = '../fichiers_joints/';
chmod('???',555)
$dossier_temporaire = $_FILES['fichier']['tmp_name'];
$type_fichier = $_FILES['fichier']['type'];
$nom_fichier = $_FILES['fichier']['name'];

Que dois-je mettre exactement à la place des ???, s'il te plait?

@ captain_torche, désolée pour le quote abusif :blush:

Modifié par Skaara
Posté

Oulala, effectivement, tes connaissances en php sont très limitées !

Est-ce que tu pourrais me donner le code jusqu'aà la recopie du fichier (normalement jusqu'a l'accocalde fermante '}' ...

Je te poterai le code modifié ;-)

Posté

Bonjour,

A priori c'est plus loin dans le script qu'il faut changer les droits du fichier. Tu peux nous montrer les lignes suivantes ?

Posté (modifié)

Je vous donne tout ça: c'est vrai que je n'ai pas osé tout copier, de peur que ça fasse trop grand mais si c'est vous qui le demandez :P

/// A faire uniquement si fichier joint
//********************************************************************************
********************
if ($_FILES['fichier']['tmp_name']<>'') {
$dossier_destination = '../fichiers_joints/';
$dossier_temporaire = $_FILES['fichier']['tmp_name'];
$type_fichier = $_FILES['fichier']['type'];
$nom_fichier = $_FILES['fichier']['name'];
$erreur= $_FILES['fichier']['error'];
if ($erreur == 2 ) {
exit ("Le fichier dépasse la taille de 100 Mo.");
}
if ($erreur == 3 ) {
exit ("Le fichier a été partiellement transféré. Envoyez-le à nouveau.");
}

if( !move_uploaded_file($dossier_temporaire, $dossier_destination . $indice.'_'.$nom_fichier) )
{
exit("Impossible de copier le fichier dans $dossier_destination");
}


//--------------ecriture dans la table du nom du fichier
if ($_FILES['fichier']['name']<>'') {
$insertSQL = sprintf("INSERT INTO cdt_fichiers_joints ( agenda_ID, nom_fichier, prof_ID) VALUES (%s,%s,%s)",
GetSQLValueString($indice, "int"),
GetSQLValueString($indice.'_'.$_FILES['fichier']['name'], "text"),
GetSQLValueString($_SESSION['ID_prof'], "text"));
mysql_select_db($database_conn_cahier_de_texte, $conn_cahier_de_texte);
$Result1 = mysql_query($insertSQL, $conn_cahier_de_texte) or die(mysql_error());
}


}

// fin présence fichiers joints ****************************************************************


$listage_simple=1;

}

Il y a encore des lignes plus bas concernant a priori l'écriture dans la base de données.

Jeromnimo, je ne plaisantais pas quand je disais que j'y connaissais rien... et oui, il faudrait que je m'y mette mais je repousse toujours :rolleyes:

Modifié par captain_torche
Posté

A priori tu peux mettre, en fin du bout de code que tu as donnée :

chmod($dossier_destination . $indice.'_'.$nom_fichier, 777);

Ceci devrait changer les droits du fichiers qui vient d'être copié :)

Posté

Alors a priori si tu ajoutes :

$fichier = $dossier_destination.$indice.'_'.$nom_fichier;

chmod($fichier,555) à la suite de ce que tuas posté, ca devrait aller ;-)

Posté

Merci beaucoup à tous les deux. En fait, j'ai testé avec les deux méthodes mais aucune ne marche. Mon fichier est bien envoyé mais pas chmodé et j'ai l'erreur:

Warning: chmod() [function.chmod]: No such file or directory in /home/www/...

qui apparait.

Pardon, je n'avais pas mis la ligne en toute fin de code. Je viens de le faire. Oh miracle, plus d'erreur :wub: mais mon fichier n'est pas chmodé 777 mais 410 :wacko::wacko:

Posté

Je viens de faire X manips et je tourne en rond. C'est énervant de ne pas comprendre pourquoi ça ne marche pas surtout que vous m'avez donné la solution...

Du coup, je me suis penchée sur le code et en fait me suis aperçu que je ne vous avez pas donné réellement jusqu'au "}" La parenthèse de clôture se trouvait bien plus bas. J'ai donc édité mon post plus haut, avec le code ;)

Posté


/// A faire uniquement si fichier joint
// ********************************************************************************
*********************
if ($_FILES['fichier']['tmp_name']<>'') {
$dossier_destination = '../fichiers_joints/';
$dossier_temporaire = $_FILES['fichier']['tmp_name'];
$type_fichier = $_FILES['fichier']['type'];
$nom_fichier = $_FILES['fichier']['name'];
$erreur= $_FILES['fichier']['error'];
if ($erreur == 2 ) {
exit ("Le fichier dépasse la taille de 100 Mo.");
}
if ($erreur == 3 ) {
exit ("Le fichier a été partiellement transféré. Envoyez-le à nouveau.");
}

if( !move_uploaded_file($dossier_temporaire, $dossier_destination . $indice.'_'.$nom_fichier) )
{
exit("Impossible de copier le fichier dans $dossier_destination");
}


//--------------ecriture dans la table du nom du fichier
if ($_FILES['fichier']['name']<>'') {
$insertSQL = sprintf("INSERT INTO cdt_fichiers_joints ( agenda_ID, nom_fichier, prof_ID) VALUES (%s,%s,%s)",
GetSQLValueString($indice, "int"),
GetSQLValueString($indice.'_'.$_FILES['fichier']['name'], "text"),
GetSQLValueString($_SESSION['ID_prof'], "text"));
mysql_select_db($database_conn_cahier_de_texte, $conn_cahier_de_texte);
$Result1 = mysql_query($insertSQL, $conn_cahier_de_texte) or die(mysql_error());
}

chmod($dossier_destination . $indice.'_'.$nom_fichier, 777);
}

// fin présence fichiers joints ****************************************************************


$listage_simple=1;

}

[Edit captain_torche] Norseb, voyons ... et le CODEBOX ?

Posté

Ca ne marche pas... :( Mes fichiers restent à 410 ... Je capitule! Désolée de vous avoir dérangé :unsure: mais merci quand même pour votre aide :wub:

Posté

salut,

si l'on s'en réfère au manuel php il faut ajouter un "0" devant le mode du fichier...

chmod($dossier_destination . $indice.'_'.$nom_fichier, 0777);
ou
chmod($dossier_destination . $indice.'_'.$nom_fichier, 0555);

Veuillez vous connecter pour commenter

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



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