Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: [PHP] upload plików
Forum PHP.pl > Forum > Przedszkole
gosc25
Dlaczego te instrukcje na lokalu mi działają a na serwerze nie?

  1. $location = 'upload/ ' . basename($_FILES['userfile']['name']);
  2.  
  3.  
  4. if (move_uploaded_file($_FILES['userfile']['tmp_name'], $location))
  5. {
  6. (...)
  7. }
  8.  
  9.  


Probowałem też tak:

  1. $location = $_SERVER['DOCUMENT_ROOT'].'/upload/'.$_FILES['userfile']['name'];


Komunikat o błędach:

Warning: move_uploaded_file() [function.move-uploaded-file]: Filename cannot be empty in /virtual/c/o/xxxx.xx.xx/wyslij.php on line 22

Warning: move_uploaded_file() [function.move-uploaded-file]: Unable to move '/virtual/tmp/phpasdcWU' to '' in /virtual/c/o/xxxx.xx.xx/wyslij.php on line 22

Proszę o pomoc. Pozdrawiam.
kielich
USTAW CHMOD dla Katalogu na prawa zapisu
i pokaz linie z błedem
gosc25
Mam wbite 777, błąd ten sam
tehaha
wydaje mi się, że problemem jest to basename(), bo ono zwraca nazwę pliku bez rozszerzenia, a żeby zapisać plik potrzebna jest nazwa z rozszerzeniem, sprawdź bez tego basename()
gosc25
usunąłem na funkcje basename
  1. $location = 'upload/ ' . $_FILES['userfile']['name'];


ale to samo jest, błąd w linii z funkcja move_uploaded_file(). Jakby zwracał nazwe bez rozszerzenia to lokalnie też by nie poszło.
Może ktoś mi zarzuci swój kod z serwera?
marcio
Jestes pewny ze formularz w html'u wyglada prawidlowo?Napewno pole gdzie podajesz plik nazywa sie userfile?
tehaha
słuszna uwaga , daj echo $location i zobacz czy ta nazwa jest poprawna
kielich
  1. $site_name = $_SERVER['HTTP_HOST'];
  2. $url_dir = "http://".$_SERVER['HTTP_HOST'].dirname($_SERVER['PHP_SELF']);
  3. $url_this = "http://".$_SERVER['HTTP_HOST'].$_SERVER['PHP_SELF'];
  4.  
  5. $upload_dir = "foto/";
  6. $upload_url = $url_dir."/foto/";
  7.  
  8.  
  9. function do_upload($upload_dir, $upload_url) {
  10. $temp_name = $_FILES['userfile']['tmp_name'];
  11. $file_name = $_FILES['userfile']['name'];
  12. $file_type = $_FILES['userfile']['type'];
  13. $file_size = $_FILES['userfile']['size'];
  14. $result = $_FILES['userfile']['error'];
  15. $file_url = $upload_url.$file_name;
  16. $file_path = $upload_dir.$random.'_'.$file_name;
  17.  
  18.  
  19. if ( $file_name =="") {
  20. $message ='Załaduj swoje zdjęcie.</span>';
  21. return $message;
  22. }
  23.  
  24. else if ( $file_size > 500000) {
  25. $message = 'Plik nie może być większy niż 500KB.</span>';
  26. return $message;
  27. }
  28.  
  29. else if ( $file_type != "image/jpeg" ) {
  30. $message = 'Możesz ładować tylko pliki z rozszerzeniem JPG.</span>' ;
  31. return $message;
  32. }
  33.  
  34. $result = move_uploaded_file($temp_name, $file_path);


przerób sobie według własnych potrzeb .smile.gif
gosc25
formularz mam dobrze z nazwami

  1. <form enctype="multipart/form-data" action="wyslij.php" method="POST">
  2. <input type="hidden" name="MAX_FILE_SIZE" value="10000000" />
  3. <p>Załaduj ten plik: <input name="userfile" type="file" />
  4. <input type="submit" value="Wyslij" /><br>
  5. <select name="wybor">
  6. <option value = "a">zzzzzz
  7. <option value = "b">zzzzzzzz
  8. <option value = "c">zzzzzzz
  9. <option value = "d">zzzzz
  10. <option value = "e">zzzzzzzzz
  11. </select>
  12.  
  13. </form>


ale już chyba wiem gdzie jest problem bo echo zmiennej $location nie chce wyświetlić
marcio
Zrob w na samym poczatku pliku wyslis.php:
  1. print_r($_FILES)

Aha i czy napewno plik nie przekracza wielkosci z pola hidden lub z php.ini?
gosc25
nie wiem czy dobrze ale dopisałem to print_r($_FILES)

wyrzuciło:

Array ( [userfile] => Array ( [name] => zzz.txt [type] => text/plain [tmp_name] => /virtual/tmp/php8ka93v [error] => 0 [size] => 2372 ) )

-----
Na teraz to sądzę, że coś ze ścieżką w $location, inna powinna być lokalnie i na serwerze.
Dobra ja na razie muszę wyjść, jeszcze się nie poddaje i będę z tym wałczył winksmiley.jpg Tymczasem dzięki za wszystkie sugestie. Jakby co będę pisał.
marcio
Wszystko jest ok.
Wiec zmien to:
  1. $location = 'upload/ ' . $_FILES['userfile']['name'];

Na:
  1. $location = './upload/ '.$_FILES['userfile']['name'];

Lub:
  1. $location = '/upload/ '.$_FILES['userfile']['name'];
gosc25
Poradziłem sobie:

Zamiast:
  1. if (move_uploaded_file($_FILES['userfile']['tmp_name'], $location ))
  2. {
  3. $upload->zawartosc ='<p> Plik został załadowany poprawnie...</p>';
  4.  
  5. }


to:
  1. if (move_uploaded_file($_FILES['userfile']['tmp_name'], $_SERVER['DOCUMENT_ROOT'].'/upload/'.$_FILES['userfile']['name'] ))
  2. {
  3. $upload->zawartosc ='<p> Plik został załadowany poprawnie...</p>';
  4.  
  5. }


Po prostu do $location przed ścieżką na początku trzeba dopisać : $_SERVER['DOCUMENT_ROOT'],

albo 2 argument funkcji move_uploaded_file nie może być zmienna tylko dokładną ścieżką - za chwile sobie obczaje.
marcio
Argumentem moze byc i zmienna jak i sciezka, i tak w zmiennej ktora przekazujesz znajduje sie sciezka :]

Co do DOCUMENT_ROOT to wcale go tam nie musi byc jak uzyjesz jeden z path'y ktore podalem tez bedzie dzialalo.
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.