ComputersBestandstypen

PHP: bestand uploaden naar de server

Het downloaden van bestanden via PHP - een zeer interessant geval, waaraan moet zeer zorgvuldig worden benaderd. Op het internet kunt u talloze voorbeelden van de uitvoering van het uploaden van bestanden, maar niet alle van hen zijn goed en voldoen aan de veiligheidsvoorschriften.

Zulke dingen moeten tot een goed einde te brengen, zelfs als het duurt een lange tijd. Als je een gat achterlaten in de code, dan is uw gehele server kan worden aangetast.

veiligheid

Met PHP bestand te uploaden naar de server vrij gemakkelijk wordt uitgevoerd. De code is heel kort en eenvoudig. Slechts een paar regels. Echter, deze methode is gevaarlijk. Veel meer tijd en regels code weg naar veiligheid.

Het gevaar is dat, als je niet inspecties doen, elke aanvaller kan hun scripts op uw server te uploaden. In dit geval zal het volledige toegang te hebben. Hij kan doen wat hij wil:

  • de database te verwijderen;
  • verwijderen van bestanden locaties;
  • wijzigen bestanden locaties;
  • voeg uw advertentie naar uw website;
  • downloaden van virussen;
  • redirect alle gebruikers op hun sites;
  • en vele andere dingen die komen aanvaller erg.

Je moet altijd controleren dat de pogingen om een bestand te downloaden voor de gebruiker. Bijvoorbeeld, als u alleen afbeeldingen uploaden, is het noodzakelijk om te controleren of het bestand is een beeld nauwkeurig. Anders zul je niets te downloaden.

Precies hoe de uitvoering van de controle, zal het worden getoond, met de rechtstreeks onderzoek script om bestanden te uploaden.

Het creëren van een PHP vorm

het uploaden van bestanden vorm is zeer eenvoudig. Het missen van de knop Bladeren en upload knoppen.

Beschrijft hoe u formulieren maken zal niet, omdat het makkelijk is. Verdere instructies wordt ervan uitgegaan dat je al de basisbegrippen van HTML (anders zou je niet op zoek zijn naar informatie over het downloaden op PHP).

Maar let op dat de gegevens in het formulier dat u nodig hebt om de enctype attribuut toe te voegen.

Anders, gegevens over bestand handler niet verzonden.

Hoe het zou moeten werken?

Wanneer u klikt op de knop Bladeren moet je een doos waarin gevraagd om een bestand te kiezen te zien.

Daarna zal het nodig zijn om een pad waar het bestand zich bevindt te ontvangen.

Als het pad niet verschijnt, opnieuw uit te voeren de actie.

Na het klikken op het gedownloade bestand handler kan geen informatie geven.

Zo kunt u de regel die stelt dat het bestand is "zo en zo" de naam is geüpload naar de "die en die" map te schrijven. Natuurlijk zal de bestandsnaam worden gegeven altijd anders.

Doorgaans wordt deze informatie gebruikt voor het debuggen van code. Aldus is het mogelijk te controleren of de data wordt uitgezonden en schrijft voorkomen in de directory. Dat wil zeggen, zelfs de naam van het bestand is niet geïndiceerd. Aangezien deze extra informatie die de gebruiker hoeft niet.

Het is zinvol om de output van de naam alleen als de gebruiker meerdere bestanden downloadt. Dit is het geval, overweeg een beetje verder. Laten we niet op de zaken vooruitlopen.

afstelling

In PHP-bestand uploaden naar de server vereist bepaalde instellingen, die moet worden gedaan in de php.ini file. Dit bestand bevat veel instellingen. Ze alles wat we niet nodig hebben. Wij zijn geïnteresseerd in drie lijnen: file_uploads, upload_tmp_dir en upload_max_filesize.

Houd er rekening mee dat deze instellingen al uw sites van invloed op de server, niet zomaar één. Daarom, om de maximale grootte op basis van het feit dat je zal moeten gebruikers te laden in te stellen. Het is niet aan te raden te groot om in te stellen.

Zodra u de waarden in deze parameters te wijzigen, moet u de server opnieuw op te starten. Anders zal de instellingen geen effect hebben, zoals deze luiden op het tijdstip van de server load.

U kunt dit doen in de console door verbinding via SSH met de server. Voer het commando service httpd restart, en dan zullen de instellingen van kracht worden.

Een andere methode - een herstart door ISP-paneel of door middel van facturering panel provider.

Array bestand

In PHP uploaden van bestanden wordt gedaan door de array $ _FILES. Het bevat alle informatie over de bestanden die we downloaden.

Om te zien welke informatie is opgenomen in de array, genoeg om te schrijven in het bestand handler volgende.

Selecteer een bestand en klik op "uploaden." Op de handler pagina wordt de informatie die is opgeslagen in $ _FILES weer te geven. De variabele is volledig geschreven met hoofdletters. PHP - een taal-gevoelig.

Zoals u kunt zien, in deze array heeft veel velden. Ieder van hen zijn belangrijk voor ons. Het eerste veld bevat de naam van het bestand in de vorm waarin het wordt gebruikt op uw computer.

Het type kolom opgegeven bestandstype. Tmp_name veld komt overeen met de naam van het tijdelijke bestand. Na het einde van het script zullen worden verwijderd.

De fout veld bevat een foutcode. Dit was een beetje verder. Size - de grootte in bytes.

fouten

Uitgevoerd door de PHP-bestand uploaden is altijd gepaard met een foutcode. Een foutmelding in de "fout" ingevoerd. Het screenshot fout nul.

Denk aan de waarde van alle fouten:

Het was boven ongeveer de parameter die in de gebruikelijke HTML kan worden opgegeven gezegd.

Hier is een voorbeeld formulier naar het bestand, dat een limiet van het bedrag van het geüploade bestand aangeeft downloaden.

PHP: het uploaden van bestanden script

Zoals al in de praktijk uitgevoerd? In PHP gebeurt het uploaden van bestanden kopiëren commando. Bent u geïnteresseerd in de vraag hoe een bestand te downloaden zijn, is het antwoord simpel kopieer-, die twee parameters gebruikt - het bronbestand en het doelbestand.

Maar, zoals gezegd, het kan niet worden beperkt om redenen van veiligheid zijn. Bijvoorbeeld, kijk op wat voor soort bestand we het schip, kunt u het type veld gebruiken in de array $ _FILES. Laten we eerst eens omgaan met de inspectie, en ga dan naar het volledige script

Laten we zeggen dat u wilt toestaan dat gebruikers in staat om een foto met een resolutie van slechts GIF, JPEG of PNG uploaden. Geef het kan zijn als deze.

if ($ _ FILES [ 'file_upload'] [ 'type']! = "image / gif") {
echo "Sorry, ondersteunen we alleen het downloaden van Gif-bestanden";
exit;
}

Als u wilt verzenden alle 3 types, voegt een extra voorwaarde voor het andere type van het beeld.

Het kopiëren wordt gedaan als volgt: exemplaar (afbeelding 1, afbeelding 2).

In ons geval, wanneer het werk wordt gedownload van de pc naar de server, kunt u dit doen

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

Dat wil zeggen dat het bestand wordt gekopieerd met de naam 1.jpg. Dit is niet helemaal correct. In dit geval is slechts een voorbeeld. De bestandsnaam is altijd nodig om anders te specificeren en geef de extensie, afhankelijk van het bestand.

Bepaal de extensie kan worden op verschillende manieren. Het hangt allemaal af van de ontwikkelaar van eruditie. Een van de snelste manieren om (een verschil van tienden van seconden) bepalen de uitbreiding - dit is de volgende code.

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

$ Ext = $ PATH_INFO [ 'uitbreiding'];

De variabele $ de ext zullen we het gewenste toestel op te slaan. Een bestandsnaam kan worden ingesteld op een willekeurige gebruik van md5. Als u van plan bent om een groot aantal bestanden te downloaden, is het beter om ze te verzenden naar verschillende mappen. Dus is het handiger zijn. In het bijzonder, als je wilt zuiveren.

om de code er als volgt uit te downloaden.

/// Met foto

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

{

echo ( "

Onbekend bestandstype.

Back ... ");

exit;

}

///. Stel dat je voor elk project op de server is toegestaan om grote bestanden (video) te laden, maar er zijn slechts foto's, en de gebruikers moeten beperken

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

{

?>

de maximaal toegestane grootte van 2 MB

Back ...

exit;

}

// mappen maken

// maak een map van de huidige maand

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

{

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

}

// maak een map van de huidige dag

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

{

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

}

/// bestandsextensie

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

$ Ext = $ PATH_INFO [ 'uitbreiding'];

/// bestandsnaam genereren

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

if (copy ($ _ FILES [ 'foto1'] [ "tmp_name"], "img /". datum ( "M"). "/". datum ( "d"). "/". $ id. $ ext) )

{

echo ( "Het bestand is succesvol geupload");

}

/// geen verdere actie (in het gegevensbestand, enz. N.)

}

meerdere bestanden

Meerdere bestanden uploaden (PHP) gebeurt door middel van extra velden in het formulier.

Deze methode is niet erg goed, want het beperkt het aantal bestanden te downloaden. Bovendien wordt het beschouwd als slechte vorm in de programmering. Probeer alles dynamisch te doen.

De ideale optie - het is een keuze van een groot aantal bestanden in een keer door het indrukken van een knop.

Om dit te doen, het creëren van een vorm zoals deze code.

Merk op dat de meervoudige toevoeging van het woord en de naam wordt gegeven als een array []. In dit geval zal $ _FILES scala iets afwijken. U krijgt een scala van de array te krijgen.

Om te testen kan weer gebruik maken van de var_dump ($ _ FILES);

Al uw bestanden worden in de array als volgt worden geplaatst:

  1. $ _FILES [ "file1"] [ "naam"] [0]
  2. $ _FILES [ "file1"] [ "naam"] [1]
  3. En ga zo maar door.

Tussen haakjes wordt geschreven het bestandsnummer in de array. Tellen van nul. We behandelen ze op dezelfde manier, gewoon vragen de cyclus en contact opnemen met de hierboven beschreven code aan het eind van de index toe te voegen [$ i].

$ I = 0;

while ($ _FILES [ "file1"] [ "naam"] [$ i] <> '')

{

/// plak de bovenstaande code

}

Daardoor zul je moeten gebeuren door middel van een PHP-bestand uploaden naar de server in één cyclus zonder onnodige herhaling van de code, zoals meestal het geval als u de versie te gebruiken met een statisch aantal bestanden (laatste foto).

Similar articles

 

 

 

 

Trending Now

 

 

 

 

Newest

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