1
    <?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----------------*/

?>

这是我的代码,我试图在 serwer 上上传一些文件,但循环不想工作,我add [$key]在之后尝试过$FILES['fotki']['tmp_name'],但它也没有帮助。

你能告诉我哪里有问题吗?

//////////////////////////编辑///////////////////////

<?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----------------*/

?>

你的信息帮助了我,现在我在每个函数中添加了参数,现在它可以工作了,但只适用于 10 个文件,我不知道为什么:/

4

1 回答 1

1

你的代码完全坏了

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

单引号字符串 ( ')不会解释变量,因此您将文字$, f,o等...传递给您的函数。您可以在整个代码的多个位置执行此操作。

然后是函数本身:

function sprawdz_bledy()

不接受任何参数,因此即使$fotki正确传递,您也会丢弃该值。

在该函数中,您已经硬编码了所有 $_FILES 参数,因此您的外部 foreach() 循环完全没有意义:

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

鉴于您正在 $_FILES 上执行 foreach 循环,您可能想要更多类似的东西:

function sprawdz_bledy($name, $id) {
   if ($_FILEs[$name]['error'][$id] > 0) {
于 2013-07-05T16:17:10.030 回答