Tutoriál PHP #6: Ako si vytvoriť jednoduché nahrávanie súborov na server s kontrolou dátovej veľkosti a kontrolou dátového typu

Tutoriál PHP #6: Ako si vytvoriť jednoduché nahrávanie súborov na server s kontrolou dátovej veľkosti a kontrolou dátového typu

Tutoriál PHP #5: Ako si vytvoriť jednoduché nahrávanie súborov na server - popisuje základný jednoduchý skript, ktorý vykoná upload súbpru na server do príslušného adresára. Problém je ale v tom, že je možné nahrať akýkoľvek súbor a v dátovej veľkosti sa tiež medze neurčovali. Takto to samozrejme nemôžme nechať.  V tom to návode si ukážeme, ako spraviť upload súborov s kontrolou veľkosti (čo sa bajtov týka) a zároveň obmedziť možnosť nahrávaných súborov na určené typy, napr. obrázky.
Vytvoríme si jednoduchý formulár, pomocou ktorého realizujeme upload súborov na server:

<!--
keďže formulár bude odosielať priložené súbory, potrebujeme do hlavičky definovať 
atribút enctype="multipart/form-data, ktorý zabezpečí možnosť odoslať priložený 
súbor, použijeme aj parameter MAX_FILE_SIZE určí, že je možné  formulárom poslať 
súbor max. dátovej veľkosti 5MB, hodbota sa určuje v bajtoch.
-->
<form action="#" method="post" enctype="multipart/form-data">
	<input type="file" name="subor">
    <nput type="hidden" name="MAX_FILE_SIZE" value="512000">
    <br>
    <input type="submit" value="nahraj obrázok">
</form>

Následne vytvoríme funckiu, ktorá bude kontrolovať povolené koncovky súborov, ktoré chceme nahrať
na server, čiže vykoná kontrolu dátového typu súborov. Povolené budú dátové typy jpg, png, gif a bmp.

function skontrolujDatovyTyp($subor)
{
// uložíme si do poľa povolené prípony
$povolene_pripony=array('jpg', 'png', 'gif', 'bmp');

 // získame príponu súboru,ktorý nahrávame  
$pripona=pathinfo($subor, PATHINFO_EXTENSION);

  /* jednoduchá kontrola - príponu súboru, ktorý chceme nahrať 
  porovnáme s príponami povolenými,ktoré máme uložené v poli $povolene_pripony*/
  if(in_array($pripona, $povolene_pripony)) 
    return 1;
  else
    return 0;
}

Ďalej je potrebné napísať samotný kód, ktorý na základe vrátenej hodnoty z funkcie skontrolujDatovyTyp vykoná upload súboru na server do príslušného adresára. Funkciu na upload súborov move_uploaded_file() je podrobne popísaná v predošlom článku - Tutoriál PHP #5: Ako si vytvoriť jednoduché nahrávanie súborov na server

<?php

$subor = $_FILES['subor']; // odchytenie priloženého súboru z formulára
if (isset($subor)) // ak formulár obsahuje priložený súbor
{   
   //ak funkcia vráti číslo 1,súbor sa nahraje
   if(skontrolujDatovyTyp($subor['name']) == 1)  
 {
 move_uploaded_file($_FILES['subor']['tmp_name'],"downloads/".$_FILES['subor']['name']); 
 echo "súbor sa nahral na server";
 }
 else
 echo "súbor sa nenahral pre nepovolený formát";
}
?>

Pri volaní funkcie na kontrolu dátového typu sme použili ako vstupný parameter premennú $subor = $_FILES['subor'], ktorá obsahuje priložený súbor z formulára. Musím ale upozorniť na skutočnosť, že $_FILES[ ] je vlastne pole a okrem samotného súboru obsahuje aj ďalšie informácie ako je typ, dátová veľkosť, dočasný názov súboru a pod. Naša funkcia ako vstupný parameter potrebuje z týchto všetkých údajov len jeden - samotný názov súboru, z ktorého si vyselektuje pomocou funkcie pathinfo koncovku. Preto je potrebné pri volaní funkcie doplniť k vstupnému parametru ešte údaj, ktorý hovorí, že chceme len meno súboru. Výsledný parameter má tak tvar $subor['name']. Ak by sme použili na zobrazenie premennej $subor funkciu print_r(), videli by sme výpis celého poľa na obrazovke počítača, vyzeralo by to takto:
print_r($subor);
výsledok zobrazenia: Array ( [name] => Wavk.aha_gif.jpg [type] => image/jpeg [tmp_name] => /domains1/vx296800/public/tmp/phpUbVMnW [error] => 0 [size] => 78381 )

Rubriky: