Skaara Posté 7 Septembre 2006 Posté 7 Septembre 2006 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 ) Merci d'avance!
Jeromnimo Posté 7 Septembre 2006 Posté 7 Septembre 2006 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 ;-)
Skaara Posté 7 Septembre 2006 Auteur Posté 7 Septembre 2006 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. D'où mon problème 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 [Edit captain_torche]Inutile de citer le message précédent : on vient de le lire
Jeromnimo Posté 7 Septembre 2006 Posté 7 Septembre 2006 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.
Skaara Posté 7 Septembre 2006 Auteur Posté 7 Septembre 2006 oups... tu vois comme j'y connais rien en PHP, j'avais pas vu que c'était du code J'essaie tout de suite [Edit captain] idem
Skaara Posté 7 Septembre 2006 Auteur Posté 7 Septembre 2006 (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 Modifié 7 Septembre 2006 par Skaara
Jeromnimo Posté 7 Septembre 2006 Posté 7 Septembre 2006 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é ;-)
NorSeb Posté 7 Septembre 2006 Posté 7 Septembre 2006 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 ?
Skaara Posté 7 Septembre 2006 Auteur Posté 7 Septembre 2006 (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 /// 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 Modifié 7 Septembre 2006 par captain_torche
NorSeb Posté 7 Septembre 2006 Posté 7 Septembre 2006 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é
Jeromnimo Posté 7 Septembre 2006 Posté 7 Septembre 2006 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 ;-)
Skaara Posté 7 Septembre 2006 Auteur Posté 7 Septembre 2006 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 mais mon fichier n'est pas chmodé 777 mais 410
Skaara Posté 7 Septembre 2006 Auteur Posté 7 Septembre 2006 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
NorSeb Posté 7 Septembre 2006 Posté 7 Septembre 2006 /// 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 ?
Skaara Posté 7 Septembre 2006 Auteur Posté 7 Septembre 2006 Ca ne marche pas... Mes fichiers restent à 410 ... Je capitule! Désolée de vous avoir dérangé mais merci quand même pour votre aide
georges Posté 7 Septembre 2006 Posté 7 Septembre 2006 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);ouchmod($dossier_destination . $indice.'_'.$nom_fichier, 0555);
Skaara Posté 7 Septembre 2006 Auteur Posté 7 Septembre 2006 Merci! Merci énormément, Georges!!!! Tu me sauves ma journée, vraiment!!! Ca marche parfaitement, maintenant
Sujets conseillés
Veuillez vous connecter pour commenter
Vous pourrez laisser un commentaire après vous êtes connecté.
Connectez-vous maintenant