【问题标题】:PHP multifile upload graphic checkPHP多文件上传图文检查
【发布时间】:2013-07-03 19:18:10
【问题描述】:
    <?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----------------*/

?>

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

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

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

<?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 个文件,我不知道为什么:/

【问题讨论】:

    标签: php function upload


    【解决方案1】:

    你的代码完全坏了

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

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

    然后是函数本身:

    function sprawdz_bledy()
    

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

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

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

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

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

    【讨论】:

    • 哦,我的错 :) 所以也许我应该做点什么?循环:if (sprawdz_bledy() && sprawdz_typ()) { zapisz_plik();但是什么循环?或者也许你有更好的方法来为所有将要上传的文件启动 3 功能?
    猜你喜欢
    • 2012-03-08
    • 2016-01-25
    • 1970-01-01
    • 2011-07-09
    • 2017-06-11
    • 2017-01-30
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多