[RESOLU] Modifier droit dossier FTP -> modifier droits de tout ce qu'il y a à l'intérieur

Répondre


Cette question est un moyen d’empêcher des soumissions automatisées de formulaires par des robots.
Smileys
:D :) :( :o :shock: :? 8-) :lol: :x :P :oops: :cry: :evil: :twisted: :roll: :wink: :!: :?: :idea: :arrow: :| :mrgreen: =D> #-o =P~ :^o :non: :priere: 8-|
Voir plus de smileys
  Revue du sujet
 

  Étendre la vue Revue du sujet : [RESOLU] Modifier droit dossier FTP -> modifier droits de tout ce qu'il y a à l'intérieur

Re: Modifier droit dossier FTP -> modifier droits de tout ce qu'il y a à l'intérieur

par stephweb » 14 avr. 2016, 10:58

ok, merci beaucoup.

Voici le code qui marche :

Code : Tout sélectionner

private function savePermissionsFilessaverecusive($conn_id, $filesPath) { function save($conn_id, $filesPath) { static $inFolder = array(); $buff = ftp_rawlist($conn_id, $filesPath); foreach ($buff as $oneBuff) { $chunks = preg_split("/\s+/", $oneBuff); list($item['rights'], $item['number'], $item['user'], $item['group'], $item['size'], $item['month'], $item['day'], $item['time'], $item['name']) = $chunks; $item['type'] = $chunks[0]{0} === 'd' ? 'directory' : 'file'; if ($item['name'] != '..' && $item['name'] != '.') { if ($item['type'] === 'directory') { $inFolder += save($conn_id, $filesPath.'/'.$item['name']); } else { $inFolder[] = $filesPath.'/'.$item['name']; } } } $inFolder[] = $filesPath; return $inFolder; } return save($conn_id, $filesPath); }
Ensuite, j"'ai juste à faire:

Code : Tout sélectionner

$inFolder = $this->savePermissionsFilessaverecusive($conn_id, $filesPath); //var_dump($inFolder); // je récupère tout les dossier et fichiers... // ... on modifie le dossier et dossiers et fichiers qui sont à l'interieur foreach ($inFolder as $oneInFolder) { if (ftp_chmod($conn_id, eval("return({$np});"), $oneInFolder) === false) { $error = true; } }

Re: Modifier droit dossier FTP -> modifier droits de tout ce qu'il y a à l'intérieur

par @rthur » 13 avr. 2016, 23:52

Ah pardon, j'ai lu le message trop vite, j'avais pas vu que c'était sur un FTP distant.

Tu peux utiliser ftp_rawlist() pour extraire un tableau qui contient les caractéristiques de chaque élément d'un répertoire, et tu pourra déterminer que c'est un répertoire si sa taille est à 0 à priori
http://php.net/manual/fr/function.ftp-rawlist.php
Regarde le 1er commentaire de la doc aussi qui a une fonction qui extraie proprement chaque partie de la réponse de ftp_rawlist()

Re: Modifier droit dossier FTP -> modifier droits de tout ce qu'il y a à l'intérieur

par stephweb » 13 avr. 2016, 15:47

Merci, mais je ne comprend pas trop, et j'ai l impression qu'il n'existe pas de fonction is_dir pour le FTP.

Voici mon code:

Code : Tout sélectionner

// si checkbox cochée - si on modifie droits d'un dossier et qu'on veut aussi modifier droits de ce qu'il y a à l'intérieur... if ($isFolder && $editPermissionsOfFilesInFolder) { // _c'est ici que je galère // ...on récup le dossier + les fichiers qui sont à l'interieur... function save($conn_id, $filesPath) { static $inFolder = array(); $buff = ftp_nlist($conn_id, $filesPath); foreach ($buff as $oneBuff) { if ($oneBuff != '..'){ $inFolder[] = $filesPath.'/'.$oneBuff; si $filesPath.'/'.$oneBuff est un dossier { $inFolder[] = save($conn_id, $filesPath.'/'.$oneBuff); } } } return $inFolder; } $inFolder = save($conn_id, $filesPath); //var_dump($inFolder); // ...on modifie dossiers et fichiers qui sont à l'interieur foreach ($inFolder as $oneInFolder) { ftp_chmod($conn_id, eval("return({$np});"), $oneInFolder); } } // si on modifie droit d'un fichier, ou juste d'un dossier else { // _ça marche return (ftp_chmod($conn_id, eval("return({$np});"), $filesPath) !== false); }
Bref, je n'arrive pas à finir ma function récursive.
merci

Re: Modifier droit dossier FTP -> modifier droits de tout ce qu'il y a à l'intérieur

par @rthur » 13 avr. 2016, 14:02

Bonjour,

Une piste ici : http://stackoverflow.com/a/22456142

Re: Modifier droit dossier FTP -> modifier droits de tout ce qu'il y a à l'intérieur

par stephweb » 13 avr. 2016, 13:20

Merci, mais je comprend pas trop. la checkbox je l'ai déjà mise dans la vue. Ce que je veut, c'est que si il coche la checkox, que en + de modifier les droits du dossier, que ça modifie les droits de tout ce qu'il y a à l'intérieur (que ce soit fichiers et (ou) dossiers).
Le script récursif, je ne sais pas trop comment le coder en fait.
Merci

Re: Modifier droit dossier FTP -> modifier droits de tout ce qu'il y a à l'intérieur

par kevin254kl » 13 avr. 2016, 12:51

Salut, moi j'aurai essayé un script reccursif ou à chaque fichier et dossier on affiche le fichier avec les checkbox lecture écriture ... Après j'aurai stocké les informations emplacement et nom du fichier dans un array.

Modifier droit dossier FTP -> modifier droits de tout ce qu'il y a à l'intérieur

par stephweb » 13 avr. 2016, 12:09

Bonjour, j'ai besoin d'aide SVP.

Je suis en train de mettre en place un script pour que les utilisateurs puissent modifier via un admin les droits d'accès de leurs fichiers et dossiers de leur FTP.

Si l'utilisateur modifie les droits d'accès de juste un fichier, ça fonctionne.
Si l'utilisateur modifie les droits d'accès de juste un dossier, ça fonctionne aussi.

Ce que je souhaite aussi (et que je n'arrive pas à mettre en place), c'est que si un utilisateur modifie les droits d'accès d'un dossier, qu'il puisse aussi avoir la possibilité (via une checkbox par exemple…) de modifier aussi les droits d'accès de tout ce qu'il y a à l’intérieur (fichiers, dossiers…) .

Code : Tout sélectionner

<?php $np = '0'.$droits; $filesPath = $this->user->dir_current.'/'.$nameFileOrFolder; // si checkbox cochée - si on modifie droits d'un dossier et qu'on veut aussi que ça modifie droits de tout ce qu'il y a à l'intérieur if ($isFolder && $editPermissionsOfFilesInFolder) { // - c est ici que je je ne sais pas trop quoi faire } // si on modifie droit d'un fichier, ou juste d'un dossier else { // - marche return (ftp_chmod($conn_id, eval("return({$np});"), $filesPath) !== false); }
Quelqu’un aurai une idée SVP ?
Merci beaucoup.