SkuterPL
SkuterPL

Reputation: 87

PHP multifile upload graphic check

    <?php

function sprawdz_bledy()
{
  if ($_FILES['fotki']['error'] > 0)
  {
    echo 'problem: ';
    switch ($_FILES['fotki']['error'])
    {
      // jest większy niż domyślny maksymalny rozmiar,
      // podany w pliku konfiguracyjnym
      case 1: {echo 'Rozmiar pliku jest zbyt duży.'; break;} 

      // jest większy niż wartość pola formularza 
      // MAX_FILE_SIZE
      case 2: {echo 'Rozmiar pliku jest zbyt duży.'; break;}

      // plik nie został wysłany w całości
      case 3: {echo 'Plik wysłany tylko częściowo.'; break;}

      // plik nie został wysłany
      case 4: {echo 'Nie wysłano żadnego pliku.'; break;}

      // pozostałe błędy
      default: {echo 'Wystąpił błąd podczas wysyłania.';
        break;}
    }
    return false;
  }
  return true;
}


function sprawdz_typ()
{
    if ($_FILES['fotki']['type']!= 'image/jpeg')
    {
        echo 'nie właściwy format pliku, proszę wybrać plik w formacie JPG';
        return false;
    }
    return true;
}

function zapisz_plik()
{
    global $nazwa_pliku;    

        $filess = glob("./../wnetrza_img/wnetrze_*.jpg");
        if (is_array($filess) && count($filess) > 0) {
    foreach ($filess as $filename) {
        $files[] = $filename;
    }
} else {
    $files[] = './../wnetrza_img/wnetrze_0.jpg';
}

    if (!empty($files)) {

    $ostatni = $files[count($files)-1];
    $pokaz_ostatni = explode("wnetrze_", $ostatni);
    $ostatni_czysty = explode(".jpg", $pokaz_ostatni[1]);
    $dodawanie = $ostatni_czysty[0] +1;
    $nazwa_pliku = "wnetrze_$dodawanie.jpg";
    $lokalizacja = "./../wnetrza_img/$nazwa_pliku";
    }
    else $lokalizacja = "./../wnetrza_img/wnetrze_0.jpg";


  if(is_uploaded_file($_FILES['fotki']['tmp_name']))
  {
    if(!move_uploaded_file($_FILES['fotki']['tmp_name'], $lokalizacja))
    {
      echo 'problem: Nie udało się skopiować pliku do katalogu.';
        return false;  
    }
  }
  else
  {
    echo 'problem: Możliwy atak podczas przesyłania pliku.';
    echo 'Plik nie został zapisany.';
    return false;
  }
  return true;
}

/*----------------START_WYSYLANIE_ZDJEC----------------*/

if (isset($_POST['wyslij'])) {
    if  (!empty($_FILES['fotki']['name'])) {
        foreach($_FILES['fotki']['tmp_name'] as $key => $tmp_name ) {
            if (sprawdz_bledy('$fotki') && sprawdz_typ('$fotki')) {
                zapisz_plik('$fotki');
            }
        }
    }
}

/*----------------KONIEC_WYSYLANIE_ZDJECI----------------*/

?>

This is my code which one I'm trying to upload a few files on serwer, but loop doesn't want to work, I tried add [$key] after $FILES['fotki']['tmp_name'], but it didn't help too.

Could you show me where is problem?

//////////////////////////EDIT///////////////////////

<?php

function sprawdz_bledy($key)
{
  if ($_FILES['fotki']['error'][$key] > 0)
  {
    echo 'problem: ';
    switch ($_FILES['fotki']['error'])
    {
      // jest większy niż domyślny maksymalny rozmiar,
      // podany w pliku konfiguracyjnym
      case 1: {echo 'Rozmiar pliku jest zbyt duży.'; break;} 

      // jest większy niż wartość pola formularza 
      // MAX_FILE_SIZE
      case 2: {echo 'Rozmiar pliku jest zbyt duży.'; break;}

      // plik nie został wysłany w całości
      case 3: {echo 'Plik wysłany tylko częściowo.'; break;}

      // plik nie został wysłany
      case 4: {echo 'Nie wysłano żadnego pliku.'; break;}

      // pozostałe błędy
      default: {echo 'Wystąpił błąd podczas wysyłania.';
        break;}
    }
    return false;
  }
  return true;
}


function sprawdz_typ($key)
{
    if ($_FILES['fotki']['type'][$key]!= 'image/jpeg')
    {
        echo 'nie właściwy format pliku, proszę wybrać plik w formacie JPG';
        return false;
    }
    return true;
}

function zapisz_plik($key)
{
    global $nazwa_pliku;    

        $filess = glob("./../wnetrza_img/wnetrze_*.jpg");
        if (is_array($filess) && count($filess) > 0) {
    foreach ($filess as $filename) {
        $files[] = $filename;
    }
} else {
    $files[] = './../wnetrza_img/wnetrze_0.jpg';
}

    if (!empty($files)) {

    $ostatni = $files[count($files)-1];
    $pokaz_ostatni = explode("wnetrze_", $ostatni);
    $ostatni_czysty = explode(".jpg", $pokaz_ostatni[1]);
    $dodawanie = $ostatni_czysty[0] +1;
    $nazwa_pliku = "wnetrze_$dodawanie.jpg";
    $lokalizacja = "./../wnetrza_img/$nazwa_pliku";
    }
    else $lokalizacja = "./../wnetrza_img/wnetrze_0.jpg";


  if(is_uploaded_file($_FILES['fotki']['tmp_name'][$key]))
  {
    if(!move_uploaded_file($_FILES['fotki']['tmp_name'][$key], $lokalizacja))
    {
      echo 'problem: Nie udało się skopiować pliku do katalogu.';
        return false;  
    }
  }
  else
  {
    echo 'problem: Możliwy atak podczas przesyłania pliku.';
    echo 'Plik nie został zapisany.';
    return false;
  }
  return true;
}

/*----------------START_WYSYLANIE_ZDJEC----------------*/

if (isset($_POST['wyslij'])) {
    if  (!empty($_FILES['fotki']['name'])) {
        foreach($_FILES['fotki']['tmp_name'] as $key => $tmp_name ) {
            if (sprawdz_bledy($key) && sprawdz_typ($key)) {
                zapisz_plik($key);
            }
        }
    }
}

/*----------------KONIEC_WYSYLANIE_ZDJECI----------------*/

?>

You information helped me and now I added argument in every function and now it works, but only for 10 files, I don't know why :/

Upvotes: 1

Views: 148

Answers (1)

Marc B
Marc B

Reputation: 360672

Your code is totally broken

if (sprawdz_bledy('$fotki') && sprawdz_typ('$fotki')) {
                  ^--    ^--

single-quoted strings (') do NOT interpret variables, so you're passing a literal $, f, o, etc... to your function. You do this in multiple places throughout the code.

Then the function itself:

function sprawdz_bledy()

does not accept any arguments, so even if $fotki was passed correctly, you throw away the value.

Within that function, you've hardcoded all of the $_FILES parameters, so your external foreach() loop is utterly pointless:

if ($_FILES['fotki']['error'] > 0)

Given you're doing a foreach loop on $_FILES, you probably wanted something more like:

function sprawdz_bledy($name, $id) {
   if ($_FILEs[$name]['error'][$id] > 0) {

Upvotes: 1

Related Questions