ComputereFiltyper

PHP: fil upload til serveren

Download af filer via PHP - en meget interessant sag, hvortil skal gribes an meget omhyggeligt. På internettet kan du finde mange eksempler på gennemførelsen af fil upload, men ikke alle af dem er gode og opfylder sikkerhedsbestemmelser.

Sådanne ting skal medbringe til en konklusion, selv om det tager lang tid. Hvis du efterlader et hul i koden, så hele din server kan blive kompromitteret.

sikkerhed

Med PHP fil upload til serveren foregår ganske nemt. Koden er meget kort og enkel. Bare et par linjer. Men denne metode er farlig. Meget mere tid og linjer kode væk i sikkerhed.

Faren er, at hvis du ikke gør inspektioner, kunne enhver angriber uploade deres scripts på din server. I dette tilfælde vil det have fuld adgang. Han kan gøre, hvad han vil:

  • slette databasen;
  • slette filer sites;
  • modificere filer sites;
  • tilføje din annonce til din hjemmeside;
  • downloade virus;
  • omdirigere alle brugere på deres websteder;
  • og mange andre ting, der kommer til at tænke på angriberen.

Du bør altid kontrollere, at forsøg på at hente en fil for brugeren. For eksempel, hvis du uploader kun billeder, er det nødvendigt at kontrollere, at filen er et billede præcist. Ellers vil du hente noget.

Præcis hvordan man gennemfører kontrol, vil det blive vist, med den direkte undersøgelse script til at uploade filer.

Oprettelse af et PHP formular

fil upload formular er meget enkel. Manglende knapperne gennemse knap og upload.

Beskriver, hvordan du opretter formularer vil ikke, fordi det er nemt. Yderligere instruktioner antager, at du allerede har de grundlæggende begreber i HTML (ellers ville du ikke være på udkig efter oplysninger om at hente på PHP).

Men bemærk, at dataene i den formular, du har brug for at tilføje den enctype attribut.

Ellers vil data om fil handleren ikke overføres.

Hvordan det skal fungere?

Når du klikker på knappen Gennemse bør du se en boks, hvor bedt om at vælge en fil.

Efter at det vil være forpligtet til at modtage en sti, hvor filen er placeret.

Hvis stien ikke vises, skal du udføre handlingen igen.

Når du har klikket på download fil handleren kan give nogen oplysninger.

For eksempel kan du skrive den linje, der hedder, at filen er "så og så" navnet er blevet uploadet til "sådan og sådan" mappe. Selvfølgelig vil filnavnet blive givet altid anderledes.

Typisk er disse oplysninger bruges til debug kode. Det er således muligt at kontrollere, at data overføres og skrivninger forekommer i den ønskede mappe. Det vil sige, er selv navnet filen ikke angivet. Da denne ekstra information, som brugeren ikke har brug for.

Det giver mening at output navnet kun hvis brugeren downloader flere filer. Det er tilfældet, overveje lidt længere. Lad os ikke komme foran os selv.

justering

I PHP fil upload til serveren kræver visse indstillinger, som skal gøres i php.ini fil. Denne fil indeholder en masse indstillinger. De har alle vi ikke har brug for. Vi er interesseret i tre linjer: file_uploads, upload_tmp_dir og upload_max_filesize.

Bemærk, at disse indstillinger vil påvirke alle dine websteder på serveren, ikke bare nogen. Derfor, for at indstille den maksimale størrelse baseret på det faktum, at du bliver nødt til at indlæse brugere. Det anbefales ikke at sætte for stor.

Når du ændre værdierne i disse parametre, skal du genstarte serveren. Ellers vil indstillingerne ikke i kraft, da de læste på det tidspunkt på den server belastning.

Du kan gøre dette i konsollen ved at forbinde via SSH til serveren. Du skal blot indtaste kommandoen service httpd restart, og derefter indstillingerne træder i kraft.

En anden metode - en genstart gennem ISP-panel eller via fakturering panel udbyder.

Array-fil

I PHP upload er udført af array $ _FILES. Den indeholder alle oplysninger om de filer, vi henter.

For at se, hvilke oplysninger er indeholdt i array, nok til at skrive i filen handleren efter.

Vælg en fil, og klik på "Upload". På handleren siden vil vise oplysninger, der er gemt i $ _FILES. Den variable er helt skrevet med store bogstaver. PHP - et sprog-følsomme.

Som du kan se, i dette array har en masse felter. Alle af dem er vigtige for os. Det første felt indeholder filnavnet i den form, hvori det bruges på din computer.

Den type kolonne angivne filtype. Tmp_name felt svarer til navnet på den midlertidige fil. Efter afslutningen af scriptet vil blive slettet.

Fejlen felt indeholder en fejlkode. Dette var lidt længere. Størrelse - størrelsen i byte.

fejl

Udføres gennem PHP fil upload er altid ledsaget af en fejlkode. En fejlmeddelelse indtastet i "fejl". Skærmbilledet fejl er nul.

Overveje værdien af alle de fejl:

Det blev sagt ovenfor om den parameter, der kan angives på den sædvanlige HTML.

Her er et eksempel formular til at downloade filen, hvilket indikerer en grænse for mængden af den uploadede fil.

PHP: upload script

Som alle udført i praksis? I PHP opstår fil upload kopi kommando. Hvis du er interesseret i spørgsmålet om, hvordan man kan downloade en fil, er svaret enkelt kopi-, som bruger to parametre - kildefilen og destinationsfilen.

Men, som nævnt ovenfor, det kan ikke være begrænset af sikkerhedsmæssige årsager. For eksempel, tjek hvad slags fil vi sender, kan du bruge felttype i array $ _FILES. Først, lad os beskæftige sig med inspektion, og derefter gå videre til den fulde script

Lad os sige, du ønsker at give brugerne mulighed for at uploade et billede med en opløsning på kun GIF, JPEG eller PNG. Angiv det kan være sådan.

if ($ _ FILES [ 'file_upload'] [ 'type']! = "image / gif") {
echo "Vi støtter kun downloade Gif-filer";
exit;
}

Hvis du ønsker at sende alle 3 typer, blot tilføje en yderligere betingelse til den anden type billede.

Kopiering sker sådan her: eksemplar (billede 1, billede 2).

I vores tilfælde, når arbejdet er downloadet fra pc'en til serveren, kan du gøre det

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

Det vil sige, at filen vil blive kopieret med navnet 1.jpg. Dette er ikke helt korrekt. I dette tilfælde er det kun et eksempel. Filnavnet er altid nødvendigt at præcisere anderledes, og angiv udvidelsen, afhængigt af filen.

Bestem udvidelse kan være forskellige måder. Det hele afhænger af udvikleren af lærdom. En af de hurtigste måder at (en forskel på tiendedele af sekunder) bestemme udvidelse - det er den næste kode.

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

$ Ext = $ PATH_INFO [ 'udvidelse'];

Den variable $ ext vi gemmer den ønskede forlængelse. Et filnavn kan indstilles vilkårligt hjælp md5. Hvis du planlægger at hente en masse filer, er det bedre at sende dem til forskellige mapper. Så det vil være mere praktisk. Især hvis du ønsker at rense.

at hente koden vil være som følger.

/// Med foto

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

{

echo ( "

Ukendt fil.

Tilbage ... ");

exit;

}

///. Sig du til et projekt på serveren får lov til at indlæse store filer (video), men der er kun billeder, og brugerne skal begrænse

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

{

?>

den maksimalt tilladte størrelse på 2 MB

Tilbage ...

exit;

}

// oprette mapper

// oprette en mappe i den aktuelle måned

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

{

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

}

// oprette en mappe på den aktuelle dag

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

{

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

}

/// filtypenavn

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

$ Ext = $ PATH_INFO [ 'udvidelse'];

/// generere filnavn

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

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

{

echo ( "Filen uploadet");

}

/// yderligere foranstaltninger (i databasen, og så videre. N.)

}

flere filer

Upload flere filer (PHP) sker ved hjælp af yderligere felter i formularen.

Denne metode er ikke særlig god, da det begrænser antallet af filer til download. Desuden anses det for dårlig form, i programmering. Prøv at gøre alt dynamisk.

Den ideelle løsning - det er et valg af et stort antal filer på én gang ved at trykke på en enkelt knap.

For at gøre dette, skal du oprette en figur som denne kode.

Bemærk, at den multiple tilføjelsen af ordet, og navnet er givet som en matrix []. I dette tilfælde vil $ _FILES vifte være lidt anderledes. Du vil få en bred vifte af array.

For at teste, kan igen bruge var_dump ($ _ FILES);

Alle dine filer vil blive placeret i array sådan her:

  1. $ _FILES [ "file1"] [ "navn"] [0]
  2. $ _FILES [ "file1"] [ "navn"] [1]
  3. Og så videre.

I parentes er skrevet filen nummer i rækken. Tælle fra nul. Vi behandler dem på samme måde, bare spørg cyklussen og ved at kontakte den ovenfor beskrevne kode i slutningen af indekset tilføje [$ i].

$ I = 0;

mens ($ _FILES [ "file1"] [ "navn"] [$ i] <> '')

{

/// indsætte ovenstående kode

}

Således vil du nødt til at ske gennem en PHP fil upload til serveren i en cyklus uden unødvendig gentagelse af koden, som det normalt er tilfældet, hvis du bruger den version med en statisk antal filer (sidste foto).

Similar articles

 

 

 

 

Trending Now

 

 

 

 

Newest

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