DatamaskinerFiltyper

PHP: filopplasting til serveren

Laste ned filer via PHP - en svært interessant sak, som må være nærmet seg svært nøye. På Internett kan du finne mange eksempler på gjennomføringen av filopplasting, men ikke alle av dem er gode og møte sikkerhetsforskrifter.

Slike ting må få til en konklusjon, selv om det tar lang tid. Hvis du lar et tomrom i koden, så hele serveren kan bli kompromittert.

sikkerhet

Med PHP filopplasting til serveren utføres ganske enkelt. Koden er veldig kort og enkel. Bare et par linjer. Imidlertid er denne metoden farlig. Mye mer tid og linjer med kode bort i sikkerhet.

Faren er at hvis du ikke gjør inspeksjoner, kan noen angriper laste opp sine skript på serveren. I dette tilfellet vil det ha full tilgang. Han kan gjøre hva han vil:

  • sletter databasen;
  • slette filer områder;
  • endre filer områder;
  • legge annonsen på nettstedet;
  • laste ned virus;
  • omdirigere alle brukerne på sine områder;
  • og mange andre ting som kommer til tankene angriper.

Du bør alltid sjekke som forsøker å laste ned en fil for brukeren. For eksempel, hvis du laste opp bilder bare, er det nødvendig å kontrollere at filen er et bilde nøyaktig. Ellers vil du laste ned noe.

Nøyaktig hvordan å implementere verifikasjon, vil det bli vist, med direkte undersøkelse skript for å laste opp filer.

Opprette et PHP skjema

filopplasting form er svært enkel. Mangler knappen Bla gjennom og laste opp knappene.

Beskriver hvordan du oppretter skjemaer vil ikke, fordi det er enkelt. Nærmere instruksjoner forutsetter at du allerede har grunnleggende begreper i HTML (ellers ville du ikke være på jakt etter informasjon om nedlasting på PHP).

Men merk at dataene i skjemaet du må legge til enctype attributtet.

Ellers data på fil behandleren vil ikke bli overført.

Hvordan det skal fungere?

Når du klikker på søkeknappen skal du se en boks hvor bedt om å velge en fil.

Etter det vil det være nødvendig å få en bane hvor filen ligger.

Hvis banen ikke vises, utføre handlingen på nytt.

Etter å ha klikket på den nedlastede filen behandleren kan gi noe informasjon.

For eksempel kan du skrive den linjen som sier at filen er "så og så" navnet har blitt lastet opp til "slik og slik" -mappen. Selvfølgelig vil filnavnet bli gitt alltid annerledes.

Vanligvis er dette informasjon som brukes til å feilsøke kode. Således er det mulig å bekrefte at data overføres og inger forekommer i den ønskede katalogen. Det er, er selv filnavnet ikke angitt. Siden denne ekstra informasjon som brukeren ikke trenger.

Det er fornuftig å sende ut navnet bare hvis brukeren laster ned flere filer. Slik er tilfellet, bør du vurdere litt lenger. La oss ikke komme i forkant av oss selv.

justering

I PHP filopplasting til serveren krever visse innstillinger, som bør gjøres i php.ini filen. Denne filen inneholder en masse innstillinger. De vi ikke trenger. Vi er interessert i tre linjer: file_uploads, upload_tmp_dir og upload_max_filesize.

Vær oppmerksom på at disse innstillingene vil påvirke alle dine nettsteder på serveren, ikke bare noen. Derfor, for å sette maksimal størrelse basert på det faktum at du er nødt til å laste brukere. Det anbefales ikke å sette for stor.

Når du endrer verdiene i disse parametrene, må du starte serveren. Ellers innstillingene trer ikke i kraft, mens de leser på den tiden av lasten på tjeneren.

Du kan gjøre dette i konsollen ved å koble via SSH til serveren. Bare skriv inn kommandoen tjenesten httpd restart, og deretter innstillingene trer i kraft.

En annen metode - en restart gjennom ISP-panel eller gjennom fakturering panel leverandør.

Array fil

I PHP filopplasting er gjort av matrisen $ _files. Den inneholder all informasjon om filene som vi laster ned.

For å se hva slags informasjon som finnes i tabellen, nok til å skrive i filen behandleren følgende.

Velg en fil, og klikk "Last opp". På behandleren siden vil vise informasjonen som er lagret i $ _files. Variabelen er skrevet helt med store bokstaver. PHP - et språk-sensitive.

Som du kan se i denne matrisen har mange felt. Alle av dem er viktig for oss. Det første feltet inneholder filnavnet i den form som den brukes på datamaskinen.

Typen kolonnen som er angitt filtypen. Tmp_name feltet tilsvarer navnet på den midlertidige filen. Etter slutten av skriptet vil bli slettet.

Feilfeltet inneholder en feilkode. Dette var litt lenger. Størrelse - størrelsen i byte.

feil

Utført gjennom PHP filopplasting er alltid ledsaget av en feilkode. En feilmelding inn i "feil". Skjermdumpen feilen er null.

Vurdere verdien av alle feilene:

Det ble sagt ovenfor om parameter som kan spesifiseres på vanlig HTML.

Her er et eksempel skjema for å laste ned filen, noe som indikerer en grense på hvor mye den opplastede filen.

PHP: filopplasting script

Som alle utføres i praksis? I PHP oppstår filopplasting kopi kommando. Hvis du er interessert i spørsmålet om hvordan du laster ned en fil, er svaret enkelt kopi, som bruker to parametre - kildefilen og målfilen.

Men, som nevnt ovenfor, kan det ikke være begrenset av sikkerhetsmessige grunner. For eksempel, sjekk ut hva slags fil vi sender, kan du bruke en felttype i matrisen $ _files. Først, la oss håndtere inspeksjon, og deretter gå videre til full script

La oss si at du ønsker å tillate brukere å laste opp et bilde med en oppløsning på bare GIF, JPEG eller PNG. Indikere at det kan være som dette.

if ($ _ FILES [ 'file_upload'] [ 'type']! = "image / gif") {
echo "Beklager, men vi støtter bare laste ned Gif-filer";
exit;
}

Hvis du ønsker å sende alle 3 typer, bare legge en ekstra tilstand til den andre type bilde.

Kopiering gjøres slik: kopi (bilde 1, bilde 2).

I vårt tilfelle, når arbeidet er å laste ned fra PC til serveren, kan du gjøre det

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

Det vil si at filen vil bli kopiert med navnet 1.jpg. Dette er ikke helt riktig. I dette tilfellet er det bare et eksempel. Filnavnet er alltid nødvendig å spesifisere forskjellige, og angi forlengelse, avhengig av filen.

Bestem utvidelsen kan være forskjellige måter. Det hele avhenger av utvikleren av lærdom. En av de raskeste måtene å (en forskjell på tidels sekunder) bestemme utvidelsen - dette er neste kode.

$ PATH_INFO = pathinfo ($ _ FILES [ 'photo1'] [ "navn"]);

$ Ext = $ PATH_INFO [ 'forlengelse'];

Variabelen $ ext vi lagrer ønsket forlengelse. Et filnavn kan settes tilfeldig ved hjelp av md5. Hvis du planlegger å laste ned mange filer, er det bedre å sende dem til forskjellige mapper. Så det vil være mer praktisk. Spesielt hvis du ønsker å rense.

å laste ned koden vil være som følger.

/// Med bilde

if ($ _files [ 'photo1'] [ 'tmp_name'] == null)

{

echo ( "

Ukjent fil.

Tilbake ... ");

exit;

}

///. Si at du for ethvert prosjekt på serveren er lov å laste store filer (video), men det er bare bilder, og brukerne trenger å begrense

if (($ _files [ "photo1"] [ "size"]> 1024 * 1024 * 2)

{

?>

den maksimalt tillatte størrelse på 2 MB

Tilbake ...

exit;

}

// opprette mapper

// oppretter en mappe med inneværende måned

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

{

Mkdir ( "img /" dato ( "M").);

}

// oppretter en mappe på den aktuelle dagen

if (! file_exists ( "img /". dato ( "M"). "/". dato ( "d")))

{

Mkdir ( "img /" dato ( "M") "/" dato ( "d") ...);

}

/// filtypen

$ PATH_INFO = pathinfo ($ _ FILES [ 'photo1'] [ "navn"]);

$ Ext = $ PATH_INFO [ 'forlengelse'];

/// generere filnavn

$ Id = md5 (dato ( "YMD"));

if (kopi ($ _ FILES [ 'photo1'] [ "tmp_name"], "img /". dato ( "M"). "/". dato ( "d"). "/". $ id. $ ext) )

{

echo ( "Fil lastet opp");

}

/// ytterligere handling (post i databasen, og så videre. N.)

}

flere filer

Laste opp flere filer (PHP) skjer ved hjelp av flere felt i skjemaet.

Denne metoden er ikke veldig bra, så det begrenser antall filer til nedlasting. Videre er det anses som dårlig form i programmering. Prøver å gjøre alt dynamisk.

Det ideelle alternativet - det er et valg av et stort antall filer på en gang ved å trykke på en enkelt knapp.

For å gjøre dette, skaper en form som denne koden.

Legg merke til at den multiple tilsetning av ordet, og navnet er gitt som en matrise []. I dette tilfellet vil $ _files rekke være litt annerledes. Du vil få en rekke av tabellen.

For å teste kan igjen bruke var_dump ($ _ FILES);

Alle filene vil bli plassert i rekken som dette:

  1. $ _files [ "fil1"] [ "navn"] [0]
  2. $ _files [ "fil1"] [ "navn"] [1]
  3. Og så videre.

I parentes er skrevet filnummeret i rekken. Regnet fra null. Vi behandler dem på samme måte, bare spør syklusen og ved å kontakte ovennevnte kode på slutten av indeksen legger [$ i].

$ I = 0;

while ($ _files [ "fil1"] [ "navn"] [$ i] <> '')

{

/// lime over kode

}

Dermed vil du måtte skje gjennom en PHP filopplasting til serveren i en syklus uten unødig gjentakelse av koden, som vanligvis er tilfelle hvis du bruker versjon med et statisk antall filer (siste bilde).

Similar articles

 

 

 

 

Trending Now

 

 

 

 

Newest

Copyright © 2018 no.birmiss.com. Theme powered by WordPress.