Aiuto su semplicissimo rmdir

di il
11 risposte

Aiuto su semplicissimo rmdir

Ciao a tutti, chiedo scusa in anticipo per la domanda banale, non sono un programmatore e vorrei fare una cosa semplicissima (che googlando da ore non riesco a risolvere): in una directory voglio mettere un file php che mi cancelli tutte le cartelle e sottocartelle vuote che trova in quella cartella e a scendere (non mi servono avvisi o nul'altro). Istintivamente farei una cosa del genere:
rmdir("*/*");
ma ovviamente non funziona... qual è il comando giusto, vi chiederei di essere molto semplici nelle risposte.
Grazie Mille

11 Risposte

  • Re: Aiuto su semplicissimo rmdir

    Ma come "istintivamente"?
    rmdir elimina le directory vuote.
    devi ciclare su ogni file e cancellarlo.
  • Re: Aiuto su semplicissimo rmdir

    Le directory sono già vuote e voglio semplicemente cancellarle, soltanto che...
    rmdir("*/*");
    pare non sia corretto, forse c'è un errore di sintassi...
  • Re: Aiuto su semplicissimo rmdir

    Http://www.php.net/rmdi
    nelle note vedi tutto
  • Re: Aiuto su semplicissimo rmdir

    Ti ringrazio ma di pagine come queste ne ho viste a migliaia ma non riesco per mia inesperienza a scrivere un comando funzionante per il mio caso, cioè cancellare tutte le cartelle (già vuote) e le sottocartelle (anch'esse vuote), due livelli in tutto.
    In pratica devo fare una cosa del tipo:
    rmdir("pippo/pluto");
    ma i nomi delle directory e delle sottodirectory vengono generati automaticamente quindi non li conosco, qual è il comando in php usando le wildcard?
    Pensavo fosse
    rmdir("*/*");
    ma non funziona....
    Grazie
  • Re: Aiuto su semplicissimo rmdir

    Ma non è che sono migliaia, è SOLO quella (la pagina della documentazione ufficiale).
    Non è che devi partire "a casaccio" cercando a destra e manca, parti dal sito UFFICIALE di PHP dove trovi le cose sicuramente (bhè diciamo quasi sempre) giuste.

    Bene: le wildcard non esistono. Su UNIX-LINUX sono espansioni effettuate dalla shell.
    Non ci sono neppure in Windows (se ci riferiamento alle directory).

    Quindi puoi
    1) brutalmente creare uno script, e lanciare QUELLO da PHP (sistema rozzissimo). Potresti avere problemi di diritti dell'utente (che tipicamente è www o qualcosa del genere), ed eventualmente dalla modalità SAFE di PHP (percorsi fuori)
    2) enumerare più o meno ricorsivamente con le relative funzioni le directory, e cancellarle una a una.
    Se poi non son vuote fai un unlink dei file presenti (di nuovi devi enumerarli e cancellarli tutti)
    In PHP è facile perchè puoi sare "foreach"
  • Re: Aiuto su semplicissimo rmdir

    Niente, forse non mi sono spiegato a sufficienza, ci rinuncio, grazie.
  • Re: Aiuto su semplicissimo rmdir

    Ciao,

    il comando rmdir permette la cancellazione di directory vuote e per vuote non si intende semplicemente la mancata presenza di file all'interno ma anche di sottodirectory.

    Se non ho capito male tu vorresti cancellare la directory denominata "dir1" che all'interno non ha file se non una sottoriectory denominata "dir2" che invece è vuota (o ha file all'interno è indifferente).

    Il comando che stai provando a lanciare è "rmdir(dir1)". In questo caso non ti fa cancellare la directory perché ha una sottodirectory al suo interno.

    Il comando da usare è invece "exec(rm -R dir1)" ossia cancella la directory dir1 e tutti i suoi file/directory in esso contenuti. Il comando exec non è altro che una System call, non fa altro che richiamare quindi un comando unix all'interno del php come se lo si stesse eseguendo da riga di comando. Essendo un comando unix questo funziona solo se il software si trova du unix!
    A mio parere questa soluzione è inadeguata, ma sicuramente più semplice di andare a svuotare riscorsivamente le directory dalla più interna alla più esterna,

    Due attenzioni:
    - 1) Controlla il path da cui effettui la chiamata al comando di cancellazione. Se il tuo file php si trova in /var/www/test/prova.php e la cartella da cancellare è /var/www/prova/ all'interno del file php dovrai eseguire il comando "exec(rm -R (../prova/))" o eventualmente nella forma più corretta l'intero path assoluto, quindi "exec(rm -R (/var/www/prova))"
    - 2) Anche se lanci lo script da root, l'utente che effettua le operazioni è l'utente di apache che nei sistemi Debian è denominato www-data. La cartella quindi dovrà essere o di www-data, oppure il gruppo di questa cartella dovrà essere di www-data e dovrà avere i permessi di scrittura o per l'utente o per il gruppo. Banalmente con un 777 (lettura scrittura ed esecuzione per utente, gruppo e altri) funziona
  • Re: Aiuto su semplicissimo rmdir

    Grazie mille, il file php si trova su un server linux, credo che exec possa funzionare.
    La struttura delle directory è esattamente come hai detto, il problema è che ci sono una serie di cartelle e di relative sottocartelle generate in automatico ogni giorno da una webcam, quindi il loro nome varia sempre.
    Sono già vuote perchè con "unlink" vado a cancellare tutti i file più vecchi di 15 minuti (ho trovato lo script sul web) e quindi mi rimangono soltanto le cartelle/sottocartelle, che è la cosa meno importante, ma mi piacerebbe fare una pulizia automatica anzichè manuale.
    la struttura è questa:

    20170612 (primo livello)
    IMG001
    IMG002
    IMG003

    20170613 (primo livello)
    IMG001
    IMG002
    IMG003
  • Re: Aiuto su semplicissimo rmdir

    Ho capito di cosa si tratta, ho anche io le stesse webcam ip. Ti faccio una domanda, ma tu hai accesso al server con un utente fisico (in ssh per capirci) ho hai solo uno spazio web?
    Se hai un accesso fisico alla macchina piuttosto che creare uno script PHP ti conviene uno script bash da lanciare in cron, è decisamente più corretto come funzionamento. Ovviamente funziona solo se puoi accedere alla macchina in ssh
  • Re: Aiuto su semplicissimo rmdir

    Se mi parli di script bash stiamo andando su terreni da me inesplorati, quindi mi fermerei qui, grazie comunque, cancellerò manualmente le directory vuote ogni tanto.
  • Re: Aiuto su semplicissimo rmdir

    Non è proprio così.
    Per ordine
    1) da PHP devi usare una delle miliardi di possibilità di chiamata ricorsiva a rmdir (ecco uno dei pochi casi in cui una procedurina ricorsiva è utile, essendo rapida da scrivere)
    2) da "fuori" non è affatto scontato poter eseguire un qualche comando che opera su file o cartelle, perchè dipende essenzialmente dai diritti che file e cartelle (che in realtà su *nix sono sempre file, detto per inciso), hanno.

    TRADUZIONE. Se l'utente che esegue l'interprete PHP (in realtà è tipicamente l'utente che esegue il server http) si chiama www, allora esso potrà cancellare, scrivere, eseguire eccetera con i diritti dell'utente www.
    Se una cartella è di proprietà di un altro utente (tipo root), e i relativi diritti non sono "universali" (tipo 666 o peggio 777 o quello che si vuole), ALLORA non riuscirai, pur lanciando uno script bash da PHP, a far nulla.
    Poi c'è il problema del posizionamento fuori dalla "visibilità di sicurezza" PHP (lascio stare).
    Ci sono workaround più o meno "sporcaccioni", tipo aggiungere l'utente www al gruppo sudoers (visudo o quello che è, eccetera).

    TRADUZIONE/2: in questo caso la primissima cosa da fare è exec-are un "who am i", giusto per capire l'utente, e quindi i diritti, del programma PHP
Devi accedere o registrarti per scrivere nel forum
11 risposte