[php] przesyłanie plików

Odpowiedz Nowy wątek
2006-11-03 17:56
0

Mam formularz z dynamicznie generowanymi w javascripcie polami file o nazwach "file1", "file2", "file3" itd. Przed wysłaniem formularza srypt generuje jeszcze niewidzialny input o nazwie "file" przekazujący ilość wygenerowanych inputów.
Oto kod odpowiedzialny za zapis plików na serwerze:

$bledy = null;
for($i=0; $i<$_POST["file"]; $i++) {
    if($_POST["file".($i+1)]!="") {
        if (is_uploaded_file($_FILES["file".($i+1)]["tmp_name"])) {
            global $limit;
            $limit_przekroczony = null;
            if ($this->pliki+$_FILES["file".($i+1)]["size"]<$limit)
            move_uploaded_file($_FILES["file".($i+1)]["tmp_name"],
            $this->katalog."/pliki/".$_FILES["file".($i+1)]["name"]);
            else $bledy[] = "limit_dyskowy";
        }
        else $bledy[] = "blad_przeslania";
    }
}

kod obsługi błędów:

if($bledy) foreach($bledy as $i) {
    if($i=="limit_dyskowy") $komunikat = "Nie masz wystarczającej ilości miejsca na dysku!\n";
    else $komunikat = "Błąd podczas przesłania pliku!\n";
}
if(!isset($komunikat)) $komunikat = "Twoje dane zostały zaktualizowane.";
else $komunikat = nl2br(rtrim($komunikat));
return $komunikat;

i za każdym razem wyskakuje "Błąd podczas przesłania pliku!", dlaczego?


It's not just about livin' forever Johny.
The trick is livin' with yourself forever.

Pozostało 580 znaków

2006-11-03 19:33
0

w pierwszej linijce chyba powinno być
$i<count($_POST["file"])


Hey ho!

Pozostało 580 znaków

2006-11-04 01:21
0

nie...
Johny, weź rzuć na to okiem jak możesz ;]


It's not just about livin' forever Johny.
The trick is livin' with yourself forever.

Pozostało 580 znaków

2006-11-04 01:34
0

Ze ja?

Hmm, sprawdz co masz w $_POST i $_FILES i jakie to ma wartosci, tak dla pewnosci, bo tak na pierwszy rzut oka to wyglada ok.

foreach($_POST as $key => $value)
  echo "$key=>$value<br>";

I jeszcze jedno, w tablicy bledy masz tyle samo elementow co uploadowanych plikow?

pozdrawiam
johny


You need to learn how to walk
before you can run

Pozostało 580 znaków

2006-11-04 02:33
0

dzięki Johny'emu okazało się, że nie ma wogóle tablicy $_FILES i doszedłem do mojego głupiego błędu - miałem w atrybucie enctype tagu form napisane "multipart-form/data" zamiast "multipart/form-data", poprawiłem i sprawdziłem jeszcze raz, wypisało coś takiego $_FILES:file1=>Array$_POST:file=>1nie wyskakuje już żaden błąd, ale nadal nie działa - przesłany plik nie zapisuje się w katalogu, katalogi tworzę w ten sposób:

mkdir($this->katalog, 0742);
mkdir($this->katalog."pliki/", 0742);

@Johny: elementów w tablicy $bledy jest tyle co błędów


It's not just about livin' forever Johny.
The trick is livin' with yourself forever.

Pozostało 580 znaków

2006-11-04 08:16
0

Poczulem sie jak wywolany do tablicy :) gdziez te piekne czasy ;-)

Rozumiem, ze katalogi sie tworza?
Zobacz co zwraca move_uploaded_file, powinno byc true - jesli nie, to sprawdz czy parametry jakie podajesz sa w porzadku. Bo skoro nie ma juz bledu, to rozumiem, ze tego ifa z limitem przelazi?

pozdrawiam
johny


You need to learn how to walk
before you can run

Pozostało 580 znaków

2006-11-04 14:24
0

jak pryszłeś na forum żeby spytać tylko johny'ego to nie mogłeś mu na priv napisać ?

co masz w $this->katalog ?
move_uploaded_file działa czasami tylko kiedy mu się poda w parametrach ścieżki bezwzględne

nie łatwiej napisać
for($i=1; $i<=$_POST['file']; $i++) {

wtedy nie musiałbyś wszędzie dodawać jedynki do $i

obejrzyj dokładnie tablicę $_FILES

print_r($_FILES);

i jak wyżej - sprawdź co zwraca move_uploaded_file

fajnie że grupa ma uprawnienie odczytu a wszyscy inni zapisu


Dwie zasady gwarantujące sukces:
1. Nigdy nie mów nikomu wszystkiego<span style="color: white">

Pozostało 580 znaków

2006-11-04 15:01
0

@Johny: tak, katalogi się tworzą, ifa z limitem przełazi i zrobiłem ifa na move_uploaded_file, którego też przełazi
@Adamo: a co? zazdrosny jesteś? :-D Johny był jako jedyny na forum więc zwróciłem się do niego...
w tablicy $_FILES jest:Array ( [file1] => Array ( [name] => ciapson.gif [type] => image/gif [tmp_name] => /tmp/phpkOY96j [error] => 0 [size] => 16211 )więc chyba wszystko dobrze...

Adamo napisał(a)

fajnie że grupa ma uprawnienie odczytu a wszyscy inni zapisu
a nie 7 - właściciel, 4 - grupa, 2 - wszyscy?


It's not just about livin' forever Johny.
The trick is livin' with yourself forever.

Pozostało 580 znaków

2006-11-04 15:18
0

no zazdrosny jestem
tak, 7 (odczyt + zapis + wykonanie) - właściciel, 4 (odczyt) - grupa, 2 (zapis) - wszyscy, zgadza się

nie odpowiedziałeś co zwraca move_uploaded_file

a te foldery to się w ogóle tworzą ? zdaje się że mkdir działa tylko kiedy dostnie nazwę folderu bez slasha na końcu a w obu nazwach masz slasha na końcu, a jeśli nie masz to w takim razie drugi folder się nie utworzy bo zamiast /costam/pliki się utworzy /costampliki


Dwie zasady gwarantujące sukces:
1. Nigdy nie mów nikomu wszystkiego<span style="color: white">

Pozostało 580 znaków

2006-11-04 15:21
0
ciapek888 napisał(a)

a nie 7 - właściciel, 4 - grupa, 2 - wszyscy?

Owszem, ale 2 to wlasnie prawo zapisu. Sprobuj ustawic prawa na 774 i zobacz czy wtedy sie pliki wrzuca. Prawdopodobnie to dlatego, ze grupa nie ma zapisu - jak pisal Adamo.

PS. @Adamo: mi tam nie przeszkadza, moje ego zostalo mile polechtane ;)

pozdrawiam
johny


You need to learn how to walk
before you can run

Pozostało 580 znaków

2006-11-04 15:57
0
Adamo napisał(a)

nie odpowiedziałeś co zwraca move_uploaded_file

ciapek888 napisał(a)

i zrobiłem ifa na move_uploaded_file, którego też przełazi

@Johny: zrobiłem katalogi na 774 i nadal to samo :-[


It's not just about livin' forever Johny.
The trick is livin' with yourself forever.

Pozostało 580 znaków

Odpowiedz
Liczba odpowiedzi na stronę

1 użytkowników online, w tym zalogowanych: 0, gości: 1, botów: 0