• Najnowsze pytania
  • Bez odpowiedzi
  • Zadaj pytanie
  • Kategorie
  • Tagi
  • Zdobyte punkty
  • Ekipa ninja
  • IRC
  • FAQ
  • Regulamin
  • Książki warte uwagi

question-closed Upload wiele plików PHP, uploaduje się tylko jeden plik

0 głosów
305 wizyt
pytanie zadane 8 lipca 2017 w PHP przez Paweł Antyporowicz Stary wyjadacz (11,470 p.)
zamknięte 8 lipca 2017 przez Arkadiusz Waluk

Witam,

rzućcie okiem na kod i doradźcie coś, żeby mi uploadowało wszystkie wybrane pliki zamiast tylko jednego.
Oto mój kod:
 

    public function reArrayFiles(&$file_post)
    {
        $arr = array();
        $file_count = count($file_post['name']);
        $file_keys = array_keys($file_post);

        for ($i=0; $i<$file_count; $i++) {
            foreach ($file_keys as $key) {
                $arr[$i][$key] = $file_post[$key][$i];
            }
        }
        return $arr;

    public function addPhotos($files)
    {
        if($this->checkUploadErrors($files)===true) {
            $photos = $this->reArrayFiles($files);
            foreach($photos as $key){
                $uid=uniqid();
                $ext=pathinfo($key['name'],PATHINFO_EXTENSION);
                $fileName='img_'.$uid.'.'.$ext;
                $imagine=new Imagine\Gd\Imagine();
                $mode=Imagine\Image\ImageInterface::THUMBNAIL_OUTBOUND;
                $size=new Imagine\Image\Box(200, 200);
                $imagine->open($key['tmp_name'])
                    ->thumbnail($size,$mode)
                    ->save(__DIR__.'/../../img/'.$fileName);
                //return $fileName;
             }
         }
    }

 

komentarz zamknięcia: "Nie wiem co zrobiłem ale zaczęło działać"

2 odpowiedzi

+1 głos
odpowiedź 8 lipca 2017 przez CzikaCarry Szeryf (75,340 p.)

Coś zdziałamy. Po 17 linijce dodaj linijkę:

var_dump($photos);

I powiedz co zostało wyplute na ekran, to pomoże w detekcji błędu. A poza tym to nie domknąłeś funkcji reArrayFiles :)

komentarz 8 lipca 2017 przez CzikaCarry Szeryf (75,340 p.)

Znalazłem mój bardzo stary kod do zapisu wielu plików, porównaj sobie z nim :)

            $max = self::Max();
            $uploads_dir = 'img';
            define('SITE_ROOT', realpath(dirname(__FILE__)));
            foreach ($_FILES["image"]["error"] as $key => $error) {
​​​​​​//tutaj obsługa błędu
               $max++;
               $tmp_name = $_FILES["image"]["tmp_name"][$key];
               $array = explode('.', $_FILES['image']['name'][$key]);
               $extension = end($array);
               move_uploaded_file($tmp_name, SITE_ROOT . '/' . "$uploads_dir/" . $_POST['id'] . "/$max" . '.' . $extension);
               chmod(SITE_ROOT . '/' . "$uploads_dir/" . $_POST['id'] . "/$max" . '.' . $extension, 0644);
               }

 

komentarz 8 lipca 2017 przez Paweł Antyporowicz Stary wyjadacz (11,470 p.)
Funkcje reArrayFiles, źle przekopiowałem a dokładnie bez klamry zamykającej.
Wartość photos, przechowuje tablicę z wysyłanymi plikami, a funkcja reArrayFiles odpowiada, za je poukładanie, żeby dostęp do tablicy był wygodniejszy.

W wartości photos jest zapisane wiele zmiennych a zapisuje tylko jeden obrazek.
0 głosów
odpowiedź 8 lipca 2017 przez Paweł Antyporowicz Stary wyjadacz (11,470 p.)
Nie wiem co zrobiłem ale zaczęło działać... :D
Dzięki za pomoc :P

Podobne pytania

0 głosów
1 odpowiedź 339 wizyt
pytanie zadane 11 listopada 2018 w C i C++ przez XezolPL Obywatel (1,530 p.)
+1 głos
0 odpowiedzi 352 wizyt
0 głosów
0 odpowiedzi 251 wizyt
pytanie zadane 3 marca 2020 w C# przez Krutek Początkujący (330 p.)

93,740 zapytań

142,675 odpowiedzi

323,294 komentarzy

63,319 pasjonatów

Motyw:

Akcja Pajacyk

Pajacyk od wielu lat dożywia dzieci. Pomóż klikając w zielony brzuszek na stronie. Dziękujemy! ♡

Oto polecana książka warta uwagi.
Pełną listę książek znajdziesz tutaj

Twierdza Linux. Bezpieczeństwo dla dociekliwych

Aby uzyskać rabat -10%, użyjcie kodu pasja-linux, wpisując go w specjalne pole w koszyku.

...