Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: [PHP]Problem z funkcją uploadownia plików przez formularz
Forum PHP.pl > Forum > Przedszkole
jacusek
Witam.
Na początek chciałem powiedzieć że jestem prawie kompletnie zielony w PHPie. Napisałem taki skrypt:
<?php
$file_dir = 'http:\xampp\uploads';
foreach($_FILES as $plik_nazwa => $plik_tablica) {
echo "ścieżka: ".$plik_tablica["tmp_name"]."<br/>\n";
echo "nazwa: ".$plik_tablica["name"]."<br/>\n";
echo "typ: ".$plik_tablica["type"]."<br/>\n";
echo "rozmiar: ".$plik_tablica["size"]."<br/>\n";
if (is_uploaded_file($plik_tablica["tmp_name"])) {
move_uploaded_file($plik_tablica["tmp_name"],
$file_dir) or die ("Nie można przenieść pliku");
echo "Plik został przeniesiony!<br/><br/>";
}
}
?>
No właśnie. Problem jest w 2. linijce. Kiedy podane jest to w ten sposób zapisuje mi plik, ale pod tą nazwą i w danej lokalizacji. Czyli otrzymuje plik o nazwie uploads bez żadnego rozszerzenia. Jeżeli próbuję zakończyć to w innych sposób (tak jakbym wskazywał mu katalog
$file_dir = 'http:\xampp\uploads\';
to niestety wywołuje mi błąd składni. Kombinowałem już w różne strony, z adresami http i niestety nic to nie daje, a chodzi mi żeby można było przenosić plik do innego katalogu. W niektórych przypadkach (zastosowanie z adresem http) dostaje komunikat HTTP wrapper does not support writeable connections.
Pracuje na maszynie wirtualnej WIN_XP ze środowiskiem XMAPPa.
Z góry dziękuję za pomoc.
InosU31
hmm moim zdaniem masz zle sciezke ustawiona bo :

$file_dir = 'http:\xampp\uploads';

powinno byc zapisane :

$file_dir = 'http://xampp/uploads';

pozatym tam jak robisz to wszystko na localhoscie to nie podawaj pelnej sciezki tylko jak masz plik np. uload.php w katalogu np. "upload" a pliki w "pliki" to w sciezce powinienes dac : $file_dir = "pliki/";

druga sprawa nie wiem czy foreach ci przetworzy ta tablice $_FILES bo ona ma dwa indeksy : jeden to nazwa a drugi wartosc.

$_FILES ['name_z _formularza']['wartosc']

pozatym masz cos takiego :

echo "ścieżka: ".$plik_tablica["tmp_name"]."<br/>\n";

a "tmp_name" to chyba jest nazwa pliku tymczasowego a nie sciezka;-)

i kolejna sprawa jest taka ze on ci pewnie zapisuje pliki jako uploads bo tak mu ta nazwe podales;-)

  1. move_uploaded_file($plik_tablica["tmp_name"],
  2. [u] $file_dir[/u])


zobacz to tak :

  1. $file_dir = "uploads/"; // nazwa katalogu w ktorym beda umieszcane pliki
  2. $nazwa_pliku = "tutaj wstaw jak plik ma sie na serwerze nazywac";
  3. //$_FILES ['name'] - zamiast name wstaw nazwe jaka masz w formularzu dla tego pola
  4. echo "ścieżka: ".$file_dir."<br/>\n";
  5. echo "nazwa: ".$_FILES ['name']['tnp_name']."<br/>\n"; // nazwa tymczasowa
  6. echo "typ: ".$_FILES ['name']['type']."<br/>\n";
  7. echo "rozmiar: ".$_FILES ['name']['size']."<br/>\n";
  8. if (is_uploaded_file($_FILES ['name']['tnp_name']))
  9. {
  10. move_uploaded_file($_FILES ['name']['tnp_name'],
  11. $nazwa_pliku)
  12.  
  13. // ewentualnie
  14. // move_uploaded_file($_FILES ['name']['tnp_name'], $_FILES['name'] ['name']) // to pierwsze name to nazwa z formularza pola name
  15.  
  16. echo "Plik został przeniesiony!<br/><br/>";
  17. }
  18. else echo "Nie mozna przeniesc pliku";
  19.  
  20.  


Pozdrawiam
jacusek
Witam ponownie. Dziękuję za pomoc, ale niestety nadal nie jest to o co mi chodzi. I tak cały czas zapisuje mi to do pliku zamiast do katalogu.
Użyłem też twojego skryptu, ale niestety także nie działa sad.gif - cały czas przenosi plik w niebyt sad.gif
Ba dostaje komunikat że plik się przeniósł, mimo że zrobiłem błąd w ścieżce.
Podam może jeszcze kod html - i może tam robię jakiś błąd. Już szczerze mówiąc nie wiem gdzie szukać. Tak jak pisałem wcześniej dopiero uczę się PHP i stąd może moje głupie pytania:

  1. <meta http-equiv="Content-Type" content="text/html; charset=ISO-8859-2">
  2. <title>Przesyłanie pliku przez formularz</title>
  3. </head>
  4. <form action="wyslij_plik.php" enctype="multipart/form-data" method="post">
  5. <input type="hidden" name="MAX_FILE_SIZE" value="51200">
  6. <p><strong>Pliki do wysłania:</strong>
  7. <input type="file" name="plik"></p>
  8. <p><input type="submit" value="Wyślij"></p>
  9. </form></body></html>


i dodatkowo "nowy" kod php
  1. <?php
  2. $file_dir = 'uploads/';
  3. $nazwa_pliku = "przeniesiony";
  4. $_FILES ['plik'];
  5. echo "ścieżka: ".$file_dir."<br/>\n";
  6. echo "nazwa: ".$_FILES['plik']['tmp_name']."<br/>\n"; // nazwa tymczasowa
  7. echo "typ: ".$_FILES ['plik']['type']."<br/>\n";
  8. echo "rozmiar: ".$_FILES ['plik']['size']."<br/>\n";
  9. if (is_uploaded_file($_FILES ['plik']['tmp_name']))
  10. {
  11. move_uploaded_file($_FILES ['name']['tmp_name'],
  12. $nazwa_pliku);
  13. echo "Plik został przeniesiony!<br/><br/>";
  14. }
  15. else echo "Nie mozna przeniesc pliku";
  16. ?>


W przeglądarce otrzymuje taki komunikat:
ścieżka: uploads/
nazwa: C:\XAMPP\tmp\phpE2.tmp
typ: application/vnd.ms-excel
rozmiar: 38912
Plik został przeniesiony!
Więc niby wszytko w porządku. Tylko gdzie ten plik się podziewa??
Z góry dzięki za pomoc.
Blame
Po pierwsze to bbcode. A po drugie to nie mam pojęcia skąd skrypt ma wiedzieć do jakiego katalogu przenieść plik, skoro mu go nie podajesz?
  1. <?php
  2. $file_dir = 'uploads/';
  3. $nazwa_pliku = "przeniesiony";
  4. $_FILES ['plik'];
  5. echo "ścieżka: ".$file_dir."<br/>\n";
  6. echo "nazwa: ".$_FILES['plik']['tmp_name']."<br/>\n"; // nazwa tymczasowa
  7. echo "typ: ".$_FILES ['plik']['type']."<br/>\n";
  8. echo "rozmiar: ".$_FILES ['plik']['size']."<br/>\n";
  9. if (is_uploaded_file($_FILES ['plik']['tmp_name']))
  10. {
  11. move_uploaded_file($_FILES ['name']['tmp_name'], $file_dir.$nazwa_pliku); //<-tu był błąd
  12. echo "Plik został przeniesiony!<br/><br/>";
  13. }
  14. else echo "Nie mozna przeniesc pliku";
  15. ?>
jacusek
niestety i to nie pomogło. Nadal plik zapisuje się w niebyt, więc już kompletnie nie mam pomysłu gdzie może być błąd. Skrypt oczywiście poprawiłem. Przypuszczam, że błąd jest gdzieś w składni przy katalogu, ale chyba próbowałem już wszystkich wersji zapisu ścieżki do katalogu i nadal nic. sciana.gif
Może jeszcze jakieś propozycje?
thomson89
Nie wiem czy to pomoże. Spróbuj dać " // " na początku sciezki. Bo twoim serwerem, np. jest folder: d:/dysk admin/serwer pliki/
Danie "//" spowoduje cofnięcie się do poczatku katalogów serwera, czyli "będziesz" w katalogu serwer pliki/

Jeżeli folder upload masz w d:/dysk admin/serwer pliki/stronka_1/uploads/
Do zmiennej daj: "//stronka_1/uploads/"

Oraz

i sprawdź errory czy są

aaa, i jeszcze jedno jak masz kod swojej funkjci php "sa8f=43hfubbfvbhar8o34htfbgap"
to dawaj go w bbcody, np:

Kod
[php]sa8f=43hfubbfvbhar8o34htfbgap[/php]


Może pomoze.
InosU31
No witaj

Juz wszystko wiem;-) Znaczy sie mi dziala to poprawnie - o to pliki:

1. Musisz utworzyc plik dwa pliki i folder :

np. (ten pierwszy jest opcjonalny - mozesz nazwac go jak chcesz)

form.htm
  1. <meta http-equiv="Content-Type" content="text/html; charset=ISO-8859-2">
  2. <title>Przesyłanie pliku przez formularz</title>
  3. </head>
  4. <form action="wyslij_plik.php" enctype="multipart/form-data" method="post">
  5. <input type="hidden" name="MAX_FILE_SIZE" value="51200">
  6. <p><strong>Pliki do wysłania:</strong>
  7. <input type="file" name="plik"></p>
  8. <p><input type="submit" value="Wyślij"></p>
  9. </form></body></html>


druki plik to :
wyslij_plik.php - na czas testow niech bedzie sie tak nazywal bo formularz sie do niego odnosi:
  1. <?php
  2.  
  3. $file_dir = 'uploads/';
  4. //$nazwa_pliku = "przeniesiony";
  5. //$_FILES ['plik'];
  6. echo "ścieżka: ".$file_dir."<br/>\n";
  7. echo "nazwa: ".$_FILES['plik']['tmp_name']."<br/>\n"; // nazwa tymczasowa
  8. echo "typ: ".$_FILES ['plik']['type']."<br/>\n";
  9. echo "rozmiar: ".$_FILES ['plik']['size']."<br/>\n";
  10. if (is_uploaded_file($_FILES ['plik']['tmp_name']))
  11. {
  12. move_uploaded_file($_FILES ['plik']['tmp_name'], $file_dir.$_FILES['plik']['name']);
  13. echo "Plik został przeniesiony!<br/><br/>";
  14. }
  15. else echo "Nie mozna przeniesc pliku";
  16.  
  17. echo $file_dir.$_FILES['plik']['name']; // wyswietli nazwe pliku przeniesionego wraz z sciezka
  18. ?>


i katalog o nazwie: uploads - musi sie on znajdowac tam gdzie te pozostale pliki - pozniej sobie inaczej anzwiesz pliki i katalog a narazie sprobuj czy ci zadziala i pozniej napisz;-)

u mnie wszystko ok

Pozdrawiam
jacusek
No wielgachne dzięki. Pół dnia na tym siedziałem. smile.gif.
okazało się, że rzeczywiście zmienna
  1. $nazwa_pliku
w ogóle nie była potrzebna. Na to nie wpadłem wstydnis.gif . Ale początki bywają takie trudne....
Pozdrawiam
To jest wersja lo-fi głównej zawartości. Aby zobaczyć pełną wersję z większą zawartością, obrazkami i formatowaniem proszę kliknij tutaj.
Invision Power Board © 2001-2025 Invision Power Services, Inc.