2012-05-08 19 views
7

Mi chiedo se qualcuno potrebbe essere in grado di aiutarmi per favore.Elimina file immagine dal server

Ho creato la pagina this che consente agli utenti di visualizzare le immagini caricate in formato galleria.

Ora desidero aggiungere la funzionalità di eliminazione a ciascuna immagine. Ho creato il pulsante e il Javascript dietro di esso, ma non sono sicuro di come collegare il "clic del pulsante" con la cancellazione fisica effettiva del file.

Le immagini non vengono memorizzati in un database, ma sono in due posizioni delle cartelle sul mio server, nella seguente struttura:

UploadedFiles/username/locationid/imagename e

UploadedFiles/username/locationid/Thumbnails/imagename

Sono relativamente nuovo per PHP e ora sto raggiungendo i limiti della mia conoscenza, ma certamente desideroso di imparare. Dalla documentazione che ho letto penso di essere corretto nel dire che il metodo unlink è il comando corretto da usare?

Ma quello che sto trovando davvero difficile è raccontare il codice per trovare le cartelle con le username e locationid cartelle, che corrispondono al corrente username e locationid e quindi eliminare i file che corrispondono alla variabile $source nome.

Mi chiedevo solo se qualcuno potrebbe forse fornire una guida per favore su come potrei farlo.

Molte grazie e cordiali saluti

risposta

4

Se è possibile passare il nome utente, LocationID, e le variabili NomeImmagine allo script, è possibile eliminare i file utilizzando unlink():

$path = 'UploadedFiles/' . $username . '/' . $locationid . '/'; 

unlink($path . $imagename); 
unlink($path . 'Thumbnails/' . $imagename); 

Perché si interagisce con il tuo file system, dovrai essere sicuro e disinfettare le variabili (impedire a qualcuno di usare ../../../ per ottenere parti indesiderate del tuo file system).

$username = str_replace(array('..', '/', '\\', ':'), '', $username); 
$imagename = str_replace(array('..', '/', '\\', ':'), '', $imagename); 
$locationid= str_replace(array('..', '/', '\\', ':'), '', $locationid); 
+1

si potrebbe anche voler fare in modo a fuggire .. caratteri nel nome del file altrimenti si potrebbe qualcosa come "../../../public/index.php" –

+1

+1, divertente pensiamo allo stesso modo che stavo solo modificando :) –

+1

Non so se va senza menzionare, quindi dirò: il tuo codice dovrebbe essere strutturato in modo che le linee di sanitizzazione variabile vengano eseguite prima di $ path = e unlink () Linee. –

0

Ovviamente Javascript (lato client) dovrà chiamare un URL (lato server) per cancellare l'immagine che l'utente ha selezionato. Propongo che per ora lo fai staticamente (se più tardi vuoi passare a qualcosa di più dinamico, il passo per trasformarti in ajax è piuttosto piccolo

Così come ha detto Set Sail Media, dovrai passare il nome utente e l'ID di localizzazione Un modo per farlo è:

Durante il rendering della tua galleria in HTML/javascript, per ogni immagine, hai avuto sotto una che conterrà le informazioni necessarie e il pulsante di invio sarà . basta chiamare lo script di eliminazione dal server Un esempio di forma che si potrebbe fare è:

<form name="deleteImageX" method="GET" target="your.server.org/deleteImage.php"> 
     <input type="hidden" name="userName" value="theUserNameAssociatedWithThePicture" /> 
     <input type="hidden" name="locationId" value="locationOfThePicture" /> 
     <input type="submit" value="delete"/> 
    </form> 

Questo modulo memorizzerà il valore necessario in campi nascosti che non verranno visualizzati nella pagina Web ma saranno comunque inviati al server quando si preme il pulsante di invio.

(per la piccola storia, il metodo utilizzato qui è GET perché HTML AFAIK non supporta il metodo DELETE (che sarebbe stato adatto nel nostro caso)).

Il metodo GET chiamerà lo script "your.server.org/deleteImage.php". In questo script avrai tutte le informazioni di cui hai bisogno (username/locationId) per eliminare l'immagine usando le variabili $ _GET ['username'] e $ _GET ['locationId']. Quindi, come hai detto, dovrai utilizzare il metodo di scollegamento per eliminare effettivamente il file dal server.

Infine, una volta eseguita questa operazione, è necessario reindirizzare lo script php in modo che, dopo aver eliminato l'immagine, si visualizzi di nuovo la galleria (ad esempio). Questo può essere fatto chiamando uno script se si ha una sorta di motore di template, o chiamando la funzione "header" di php.

Spero che questo flusso sia quello che ti aspettavi e spero di essere stato utile.

saluti,

Orso

+0

Salve @bear foot, grazie mille per aver dedicato del tempo a spiegare tutto questo, è molto apprezzato. Come ho detto nel mio post originale, sono davvero molto nuovo in questo, quindi potrebbe volerci qualche tempo per digerire i dettagli tecnici che hai gentilmente fornito. Quindi potrei avere qualche domanda un po 'più tardi. Cordiali saluti – IRHM

+1

Nessun problema. Prenditi il ​​tuo tempo, goditi PHP e, naturalmente, non esiste una domanda stupida. Se non riesci a trovare una risposta diretta su php.net (che è una buona bibbia php) o su Google, non esitare a chiedere. BR, Bear –

+0

Mille grazie @bear foot, è strano che stavo guardando php.net. Cordiali saluti – IRHM