Jump to content
Sign in to follow this  
Skaara

Script Cahier de Textes

Rate this topic

Recommended Posts

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!

Share this post


Link to post
Share on other sites

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 ;-)

Share this post


Link to post
Share on other sites

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

Share this post


Link to post
Share on other sites

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.

Share this post


Link to post
Share on other sites

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

Share this post


Link to post
Share on other sites

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:

Edited by Skaara

Share this post


Link to post
Share on other sites

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é ;-)

Share this post


Link to post
Share on other sites

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 ?

Share this post


Link to post
Share on other sites

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:

Edited by captain_torche

Share this post


Link to post
Share on other sites

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é :)

Share this post


Link to post
Share on other sites

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 ;-)

Share this post


Link to post
Share on other sites

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:

Share this post


Link to post
Share on other sites

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 ;)

Share this post


Link to post
Share on other sites


/// 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 ?

Share this post


Link to post
Share on other sites

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:

Share this post


Link to post
Share on other sites

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);

Share this post


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
Sign in to follow this  

×
×
  • Create New...