Salve sto lavorando su un progetto che si basa su moodle ,e avrei questo tipo di problema:
Ho un modulo graduation che lo studente utilizza per fare richieste di iscrizione ad un appello di laurea e un modulo servercoord che serve all'admin e puo essere acceduto solo dall'admin, per aggiungere e rimuovere appelli di laurea per un corso .
Quando un admin aggiunge un appello di laurea,l'appello precedente con tutte le richieste di laurea deve essere cancellato.Ogni richiesta di laurea ha due immagini associate che risiedono in mod/graduation/upload_img/iduser(id del user che ha fatto la richiesta caricando le immagini).
Al momento dell'esecuzione del codice della pagina ( contenuta dentro servercoord) ,che viene richiamata quando viene aggiunto un nuovo appello di laurea,l'elimazione dal database di tutti i dati del appello precedente avviene con successo mentre le cartelle con le immagini delle richieste precedenti non vengono cancellate.
il codice è questo :
$cartelladaeliminare = 'C:\pweb\tools\xampp\htdocs\moodle\mod/graduation/upload_img/';
$cartella = opendir($cartelladaeliminare);..
while ($file = readdir($cartella)) {
if($file !='.' && $file !='..'){
chmod($cartelladaeliminare."/".$file,0777);
unlink($cartelladaeliminare."/".$file);
}
}
closedir($cartella);
il messaggio di errore è il seguente:
unlink(C:\pweb\tools\xampp\htdocs\moodle\mod/graduation/upload_img//10): Permission denied .
L'admin non dovrebbe avere tutti i diritti di lettura e scrittura per tutte le cartelle?La cartella che voglio cancellare è creata da uno studente che quando si logga fa la richiesta di laurea e carica le foto .
elimnare cartelle da php
Numero di risposte: 3Re: elimnare cartelle da php
Se ben capisco le cartelle di cui parli si trovano nello spazio web dove si trova il codice di Moodle, all'interno di sotto cartelle del plugin che stai sviluppando.
Per il caricamento e la memorizzazione di file in Moodle l'indicazione è di utilizzare le "File API" che ti permettono di gestire i file nella cartella "moodledata" senza dover ricorrere alla memorizzazione di file utente nello spazio web. Di seguito il link alla documentazione:
Re: elimnare cartelle da php
Re: elimnare cartelle da php
Si, quindi mi sembra che tu stia confermando che intendi gestire file degli utenti in una sotto cartella della cartella dove si trova il codice del modulo, ossia nello spazio web.
In linea generale i file caricati su Moodle da parte degli utenti andrebbero memorizzati e gestiti nella cosiddetta cartella "moodledata", ossia quella cartella definita da $CFG->dataroot, che dovrebbe trovarsi al di fuori dello spazio web e deve essere accessibile in lettura/scrittura all'utente di sistema con il quale gira il processo del web server. Per conoscere quale sia la cartella $CFG->dataroot ti basta aprire il file config.php che trovi nella cartella radice della tua installazione Moodle.
Come detto per la gestione dei file in questa cartella hai a disposizione le File API che ti consentono di gestire i vari aspetti. Utilizzando le File API (e direi in generale tutte le API di Moodle) otterrai plugin più standardizzati, più facilmente mantenibili e per molti versi anche più sicuri.
Sul tema della eliminazione diretta di cartelle presenti nello spazio web - fermo restando quanto sopra - quello che dovresti approfondire credo sia il motivo per il quale il processo con il quale gira il web server non ha i permessi per eliminare le cartelle, questo aspetto tuttavia non dipende da Moodle ma quasi certamente dalle impostazioni del sistema dove lo hai installato.