Загрузка графической загрузки PHP multifile

Вопрос:
    <?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 файлов, я не знаю, почему:/

Лучший ответ:

Ваш код полностью сломан

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

одиночные кавычки (') НЕ интерпретируют переменные, поэтому вы передаете литерал $, f, o и т.д. в свою функцию. Вы делаете это в нескольких местах по всему коду.

Тогда сама функция:

function sprawdz_bledy()

не принимает никаких аргументов, поэтому даже если $fotki был принят правильно, вы выбрасываете значение.

Внутри этой функции вы жестко закодировали все параметры $ _FILES, поэтому ваш внешний цикл foreach() совершенно бессмысленен:

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

Учитывая, что вы делаете цикл foreach на $ _FILES, вы, вероятно, хотели бы что-то большее:

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

Оцените статью
TechArks.Ru
Добавить комментарий