304 Shares 5662 views

upload di file sul server: PHP

Il download di file tramite PHP – un caso molto interessante, alla quale deve essere affrontata con molta attenzione. Su Internet si possono trovare numerosi esempi di attuazione del caricamento di file, ma non tutti sono buoni e soddisfare le norme di sicurezza.

Queste cose devono portare ad una conclusione, anche se ci vuole molto tempo. Se si lascia un vuoto nel codice, quindi l'intero server può essere compromessa.

sicurezza

Con PHP file di caricamento sul server viene effettuato abbastanza facilmente. Il codice è molto breve e semplice. Solo un paio di righe. Tuttavia, questo metodo è pericoloso. Molto più tempo e righe di codice via per la sicurezza.

Il pericolo è che, se non si fa ispezioni, qualsiasi malintenzionato potrebbe caricare i propri script sul server. In questo caso, si avrà accesso completo. Lui può fare quello che vuole:

  • eliminare il database;
  • eliminare i siti di file;
  • modificare i siti di file;
  • aggiungi il tuo annuncio al tuo sito web;
  • scaricare virus;
  • reindirizzare tutti gli utenti sui loro siti;
  • e molte altre cose che vengono in mente attaccante.

Si dovrebbe sempre controllare che tenta di scaricare un file per l'utente. Ad esempio, se si carica solo le immagini, è necessario verificare che il file è un'immagine con precisione. In caso contrario, si scaricare nulla.

Esattamente come implementare la verifica, sarà mostrato, con lo script esame diretto per caricare i file.

Creazione di un modulo PHP

modulo di upload di file è molto semplice. Mancano i pulsanti pulsante Sfoglia e upload.

Viene descritto come creare forme non lo farà, perché è facile. Ulteriori istruzioni per scontato che hai già i concetti di base del linguaggio HTML (altrimenti non sarebbero alla ricerca di informazioni su come scaricare su PHP).

Ma che i dati in forma è necessario aggiungere l'attributo enctype.

In caso contrario, non verranno trasmessi i dati sul gestore di file.

Come dovrebbe funzionare?

Quando si fa clic sul pulsante Sfoglia, si dovrebbe vedere una scatola in cui ha chiesto di scegliere un file.

Dopo di che sarà necessario per ricevere un percorso in cui si trova il file.

Se il percorso non appare, eseguire di nuovo l'azione.

Dopo aver cliccato sul gestore di file di download può fornire alcuna informazione.

Ad esempio, è possibile scrivere la linea che indica che il file è "così e così" il nome è stato caricato con successo alla cartella "così e così". Naturalmente, il nome del file sarà dato sempre diverso.

In genere, questa informazione viene utilizzata per il debug del codice. Così è possibile verificare che i dati vengono trasmessi e scrive verificano nella directory desiderata. Cioè, anche il nome del file non è indicato. Dal momento che queste informazioni supplementari che l'utente non ha bisogno.

Ha senso per emettere il nome solo se l'utente scarica più file. Tale è il caso, si consideri un po 'oltre. Cerchiamo di non andare avanti di noi stessi.

registrazione

In PHP upload di file sul server richiede alcune impostazioni, che dovrebbe essere fatto nel file php.ini. Questo file contiene un sacco di impostazioni. Tutti non abbiamo bisogno. Siamo interessati a tre linee: file_uploads, upload_tmp_dir e upload_max_filesize.

Si prega di notare che queste impostazioni influiranno tutti i siti sul server, non solo nessuno. Pertanto, per impostare la dimensione massima in base al fatto che si dovrà caricare utenti. Non è consigliabile impostare troppo grande.

Una volta che si modificano i valori in questi parametri, è necessario riavviare il server. In caso contrario, le impostazioni non avranno effetto, come si leggono al momento del carico del server.

È possibile farlo nella console collegandosi via SSH al server. Basta inserire il comando service httpd restart, e quindi le impostazioni avranno effetto.

Un altro metodo – un riavvio attraverso ISP-pannello o attraverso il fornitore di pannelli di fatturazione.

file di Array

In PHP upload di file viene fatto l'array $ _FILES. Contiene tutte le informazioni relative ai file che scarichiamo.

Per vedere quali informazioni sono contenute nella matrice, basta scrivere nel gestore di file seguente.

Selezionare un file e fare clic su "Carica". Nella pagina gestore visualizzerà le informazioni che vengono memorizzate in $ _FILES. La variabile è scritto interamente con lettere maiuscole. PHP – un linguaggio sensibile.

Come si può vedere, in questo array ha un sacco di campi. Tutti sono importanti per noi. Il primo campo contiene il nome del file nella forma in cui viene utilizzato sul proprio computer.

La colonna tipo specificato il tipo di file. Tmp_name campo corrisponde al nome del file temporaneo. Dopo la fine dello script verranno eliminati.

Il campo di errore contiene un codice di errore. Questo è stato un po 'più avanti. Dimensioni – le dimensioni in byte.

errori

Effettuata attraverso l'invio di file PHP è sempre accompagnato da un codice di errore. Un messaggio di errore inserito nel "errore". L'errore schermata è zero.

Si consideri il valore di tutti gli errori:

Si è detto sopra circa il parametro che può essere specificato nel solito formato HTML.

Qui è un modulo di esempio per scaricare il file, che indica un limite di quantità di file caricato.

script di upload di file: PHP

Come tutti eseguiti nella pratica? In PHP upload di file si verifica comando di copia. Se siete interessati alla questione di come scaricare un file, la risposta è semplice della copia, che utilizza due parametri – il file di origine e il file di destinazione.

Ma, come detto sopra, non può essere limitata per motivi di sicurezza. Ad esempio, controllare il tipo di file che spediamo, è possibile utilizzare il tipo di campo nella matrice $ _FILES. In primo luogo, cerchiamo di trattare con l'ispezione, e poi passare allo script completo

Diciamo che si desidera consentire agli utenti di caricare una foto con una risoluzione di soli GIF, JPEG o PNG. Indicate può essere così.

if ($ _ FILES [ 'file_upload'] [ 'type']! = "image / gif") {
eco "Siamo spiacenti, ma supportano solo il download di Gif-Files";
uscita;
}

Se volete spedire tutti i 3 tipi, è sufficiente aggiungere una condizione supplementare agli altri tipo di immagine.

La copia è fatto in questo modo: copia (immagine 1, immagine 2).

Nel nostro caso, quando il lavoro sta scaricando dal PC al server, è possibile farlo

copia ($ _ FILES [ 'file_upload'] [ "tmp_name"], "1.jpg")

Cioè, il file verrà copiato con il nome 1.jpg. Questo non è del tutto corretto. In questo caso, è solo un esempio. Il nome del file è sempre necessario specificare diverso, e specificare l'estensione, a seconda del file.

Determinare l'estensione può essere modi diversi. Tutto dipende lo sviluppatore di erudizione. Uno dei modi più veloci per (una differenza di decimi di secondo) determinare l'estensione – questo è il codice successivo.

$ PATH_INFO = pathinfo ($ _ FILES [ 'foto1'] [ "nome"]);

$ Ext = $ PATH_INFO [ 'estensione'];

La variabile $ ext che memorizzerà l'interno desiderato. Un nome di file può essere impostata in modo casuale utilizzando MD5. Se si prevede di scaricare un sacco di file, è meglio spedire a cartelle diverse. Così sarà più conveniente. In particolare, se si vuole eliminare.

per scaricare il codice sarà il seguente.

/// Con foto

if ($ _FILES [ 'foto1'] [ 'tmp_name'] == null)

{

echo ( "

file sconosciuto.

Indietro …

");

uscita;

}

///. Tu dici per qualsiasi progetto sul server è consentito di caricare file di grandi dimensioni (video), ma ci sono solo le immagini, e gli utenti hanno bisogno di limitare

if (($ _FILES [ "Foto1"] [ "dimensione"]> 1024 * 1024 * 2)

{

?>

la dimensione massima consentita di 2 MB

Indietro …

<?

uscita;

}

// creare cartelle

// creare una cartella del mese corrente

if (! file_exists ( "img /". data ( "M")))

{

mkdir ( "img /" data ( "M").);

}

// creare una cartella del giorno corrente

if (! file_exists ( "img /". data ( "M"). "/". Data ( "d")))

{

mkdir ( "img /" data ( "M") "/" data ( "d") …);

}

/// estensione del file

$ PATH_INFO = pathinfo ($ _ FILES [ 'foto1'] [ "nome"]);

$ Ext = $ PATH_INFO [ 'estensione'];

/// generare il nome del file

$ Id = md5 (data ( "AMG"));

se (copia ($ _ FILES [ 'foto1'] [ "tmp_name"], "img /". data ( "M"). "/". Data ( "d"). "/". $ id. $ ext) )

{

echo ( "File con successo caricato");

}

/// ulteriori azioni (voce nella banca dati, e così via. N.)

}

più file

Caricamento di più file (PHP) avviene per mezzo di ulteriori campi del modulo.

Questo metodo non è molto buona, in quanto limita il numero di file da scaricare. Inoltre, si ritiene cattiva forma in programmazione. Cercare di fare tutto dinamico.

L'opzione ideale – si tratta di una scelta di un gran numero di file in una sola volta, premendo un solo pulsante.

Per fare questo, creare una forma come questo codice.

Si noti che il multiplo aggiunta della parola, e il nome è dato come un array []. In questo caso, l'array $ _FILES sarà leggermente diversa. Si otterrà una serie di matrice.

Per testare nuovamente possibile utilizzare il var_dump ($ _ FILES);

Tutti i vostri file saranno inseriti nella matrice in questo modo:

  1. $ _FILES [ "file1"] [ "nome"] [0]
  2. $ _FILES [ "file1"] [ "nome"] [1]
  3. E così via.

Tra parentesi è scritto il numero di file nella matrice. Contare da zero. Noi li trattiamo allo stesso modo, basta chiedere il ciclo e contattando il codice sopra descritto alla fine dell'indice aggiungendo [$ i].

$ I = 0;

while ($ _FILES [ "file1"] [ "nome"] [$ i] '')

{

/// incollare il codice qui sopra

}

In questo modo, si dovrà avvenire attraverso un caricamento di file PHP per il server in un ciclo senza inutili ripetizioni del codice, come avviene di solito, se si utilizza la versione con un numero di file statici (ultima foto).