DatorerFiltyper

PHP: filuppladdning till servern

Nedladdning av filer via PHP - en mycket intressant fall, som måste närma sig mycket försiktigt. På Internet kan du hitta många exempel på genomförandet av filöverföring, men inte alla av dem är bra och uppfyller säkerhetsföreskrifterna.

Sådant behöver ta till en slutsats, även om det tar lång tid. Om du lämnar en lucka i koden, sedan hela din server kan äventyras.

säkerhet

Med PHP filuppladdning till servern utförs helt enkelt. Koden är mycket kort och enkelt. Bara ett par rader. Emellertid är denna metod farligt. Mycket mer tid och kodrader bort till säkerheten.

Faran är att om du inte gör inspektioner kan varje angripare ladda upp sina manus på servern. I detta fall kommer det att ha full tillgång. Han kan göra vad han vill:

  • radera databasen;
  • radera filer platser;
  • ändra filer platser;
  • lägga din annons till din webbplats;
  • hämta virus;
  • omdirigera alla användare på sina webbplatser;
  • och många andra saker som kommer att tänka på angriparen.

Du bör alltid kontrollera att försök att ladda ner en fil för användaren. Till exempel, om du bara ladda upp bilder, är det nödvändigt att kontrollera att filen är en bild exakt. Annars kommer du ladda ner något.

Exakt hur man ska genomföra kontrollen, kommer det att visas, med direkt undersökning skript för att ladda upp filer.

Skapa en PHP formulär

filuppladdning formen är mycket enkel. Saknade på knappen Bläddra och ladda upp knapparna.

Beskriver hur du skapar formulär kommer inte, eftersom det är lätt. Ytterligare instruktioner förutsätter att du redan har de grundläggande koncepten för HTML (annars skulle inte vara ute efter information om att hämta på PHP).

Men observera att data i form måste du lägga till enctype attribut.

Annars kommer uppgifter om filen handler inte överföras.

Hur det ska fungera?

När du klickar på knappen Bläddra bör du se en ruta där ombedd att välja en fil.

Efter att det kommer att krävas för att få en väg där filen finns.

Om sökvägen inte visas, utför åtgärden igen.

Efter att ha klickat på nedladdningsfilen handler kan ge någon information.

Till exempel kan du skriva linjen som anger att filen är "så och så" namnet har laddats upp till "så och så" mappen. Naturligtvis kommer filnamnet ges alltid olika.

Normalt används denna information för att felsöka kod. Sålunda är det möjligt att kontrollera att data överförs och skriver sker i önskad katalog. Det vill säga även filnamnet inte anges. Eftersom denna extra information som användaren inte behöver.

Det är vettigt att mata namnet endast om användaren hämtar flera filer. Så är fallet, anser en lite längre. Låt oss inte få inför oss själva.

justering

I PHP filuppladdning till servern kräver vissa inställningar, vilket bör göras i php.ini filen. Denna fil innehåller en hel del inställningar. Alla behöver vi inte. Vi är intresserade av tre linjer: file_uploads, upload_tmp_dir och upload_max_filesize.

Observera att dessa inställningar påverkar alla dina webbplatser på servern, inte bara någon. Därför att ställa in maximal storlek baseras på det faktum att du kommer att behöva ladda användare. Det rekommenderas inte att sätta för stor.

När du ändrar värdena i dessa parametrar, måste du starta om servern. Annars inställningarna inte träder i kraft, när de läser vid tidpunkten för lasten på servern.

Du kan göra detta i konsolen genom att ansluta via SSH till servern. Skriv bara kommandot tjänsten httpd omstart, och sedan inställningarna träder i kraft.

En annan metod - en omstart genom ISP-panel eller genom faktureringspanelen leverantören.

Array-fil

I PHP filuppladdning sker genom arrayen $ _FILES. Den innehåller all information om filer som vi hämtar.

För att se vilken information som finns i arrayen, tillräckligt för att skriva i filen handler följande.

Välj en fil och klicka på "Överför". På handler sidan visar den information som lagras i $ _FILES. Variabeln skriven helt med versaler. PHP - en språkkänslig.

Som ni kan se i denna samling har en hel del områden. Alla av dem är viktiga för oss. Det första fältet innehåller filnamnet i den form som den används på din dator.

Kolumnen typ som anges filtyp. Tmp_name fält motsvarar namnet på den temporära filen. Efter utgången av skriptet kommer att raderas.

Felet Fältet innehåller en felkod. Detta var lite längre. Storlek - storlek i byte.

fel

Utförs genom PHP filuppladdning alltid åtföljs av en felkod. Ett felmeddelande in i "fel". Bilden felet är noll.

Tänk på värdet av alla fel:

Det sades ovan om den parameter som kan anges på vanligt HTML.

Här är ett exempel på formuläret för att ladda ner filen, vilket indikerar en gräns för mängden av den uppladdade fil.

PHP: filuppladdning script

Eftersom alla genomförs i praktiken? I PHP filuppladdning sker kopia kommando. Om du är intresserad av frågan om hur man laddar ner en fil, är svaret enkelt kopierings, som använder två parametrar - källfilen och målfilen.

Men, som nämnts ovan, kan det inte vara begränsad av säkerhetsskäl. Till exempel, kolla vilken typ av fil vi skickar, kan du använda fälttypen i arrayen $ _FILES. Låt oss först ta itu med inspektion, och sedan gå vidare till den fullständiga skriptet

Låt oss säga att du vill tillåta användare att ladda upp ett foto med en upplösning på endast GIF, JPEG eller PNG. Ange det kan vara så här.

if ($ _ FILER [ 'file_upload'] [ 'typ']! = "image / gif") {
echo "Tyvärr stöder vi bara ladda ner Gif-filer";
exit;
}

Om du vill skicka alla 3 typer, helt enkelt lägga till ytterligare villkor för den andra typen av bild.

Kopiering sker så här: Kopiera (bild 1, bild 2).

I vårt fall, då arbetet hämtar från datorn till servern, kan du göra det

kopia ($ _ FILER [ 'file_upload'] [ "tmp_name"] "1.jpg")

Det vill säga att filen kopieras med namnet 1.jpg. Det är inte helt korrekt. I detta fall är det bara ett exempel. filnamnet är alltid nödvändigt att ange olika och anger en förlängning, beroende på filen.

Bestäm förlängningen kan vara olika sätt. Det beror helt på utvecklaren av lärdom. Ett av de snabbaste sätten att (en skillnad på tiondelar av sekunder) bestämmer förlängningen - det är nästa kod.

$ PATH_INFO = pathinfo ($ _ FILER [ 'photo1'] [ "namn"]);

$ Ext = $ PATH_INFO [ 'utvidgning'];

Variabeln $ EXT vi kommer att lagra den önskade förlängningen. Ett filnamn kan ställas in slumpmässigt med hjälp av MD5. Om du planerar att ladda ner en massa filer, är det bättre att skicka dem till olika mappar. Så det kommer att vara mer praktiskt. I synnerhet om du vill rensa.

att hämta koden kommer att vara följande.

/// Med foto

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

{

echo ( "

Okänd fil.

Tillbaka ... ");

exit;

}

///. Säg att du för projekt på servern får ladda stora filer (video), men det finns bara bilder, och användarna måste begränsa

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

{

?>

den maximalt tillåtna storleken av 2 MB

Tillbaka ...

exit;

}

// skapa mappar

// skapa en mapp för den aktuella månaden

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

{

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

}

// skapa en mapp med den aktuella dagen

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

{

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

}

/// filnamnstillägg

$ PATH_INFO = pathinfo ($ _ FILER [ 'photo1'] [ "namn"]);

$ Ext = $ PATH_INFO [ 'utvidgning'];

/// generera filnamn

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

if (kopia ($ _ FILER [ 'photo1'] [ "tmp_name"], "img /". datum ( "M"). "/". datum ( "d"). "/". $ id. $ ext) )

{

echo ( "Fil laddats upp");

}

/// ytterligare åtgärder (post i databasen, och så vidare. N.)

}

flera filer

Upp flera filer (PHP) sker med hjälp av ytterligare fält i formuläret.

Denna metod är inte så bra, eftersom det begränsar antalet filer att ladda ner. Dessutom är det anses som dåligt i programmering. Försök att göra allt dynamisk.

Det perfekta alternativet - det är ett val av ett stort antal filer på en gång genom att trycka på en enda knapp.

För att göra detta, skapa en form som denna kod.

Notera att den multipla tillägg av ordet, och namnet ges som en array []. I detta fall kommer $ _FILES array vara något annorlunda. Du kommer att få en rad av matrisen.

För att testa kan återigen använda var_dump ($ _ FILER);

Alla dina filer kommer att placeras i arrayen så här:

  1. $ _FILES [ "fil1"] [ "name"] [0]
  2. $ _FILES [ "fil1"] [ "name"] [1]
  3. Och så vidare.

Inom parentes är skriven filnumret i matrisen. Räkna från noll. Vi behandlar dem på samma sätt, bara be cykeln och genom att kontakta den ovan beskrivna kod i slutet av indexet lägga [$ i].

$ I = 0;

while ($ _FILES [ "fil1"] [ "name"] [$ i] <> '')

{

/// klistra ovanstående kod

}

Således måste du ske genom en PHP filuppladdning till servern i en cykel utan onödig upprepning av koden, som vanligtvis är fallet om du använder version med ett statiskt antal filer (sista bilden).

Similar articles

 

 

 

 

Trending Now

 

 

 

 

Newest

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