Drukowana wersja tematu

Kliknij tu, aby zobaczyć temat w orginalnym formacie

Forum PHP.pl _ Artykuły _ Upload plikow [Cudi]

Napisany przez: Seth 21.03.2004, 23:40:03

Uwagi, pytania zwiazane zwiazane z artykulem Cudiego "http://php.pl/index.php/phppl/artyku_y/dla_pocz_tkuj_cych/upload_plik_w" prosze pisac w tym temacie.

Napisany przez: Sm0key 22.03.2004, 23:20:23

Ja bym proponowal dodanie do tego artykulu obsługi plików poprzez ftp ponieważ ostatnio spotkałem się z kontem na którym powyższy artykuł wyrzucał błedy i nie chcial uploadowac. Dopiero poprzez fopen dało rade uploadować pliki. Ale to tylko moja propozycja rolleyes.gif

Napisany przez: Cudi 23.03.2004, 14:23:24

Artykuł pokazuje najprostszą drogę do uploadu plików, tzn. skorzystanie z wbudowanych w php funkcji. Piszesz o błędach, i teraz dochodze do wniosku że przeoczyłem (a raczej za mało wyraźnie zaznaczyłem) jedną kwestię, prawa dostępu do katalogu do którego chcemy wrzucić pliki. Prawdopodobnie to było przyczyną tych błędów, katalog musi mieć ustawione prawa na 777. Niedługo zrobię poprawkę, bo to dość ważna sprawa, może ona sprawić troche kłopotów początkującym (do których ten art jest kierowany).
Jeśli chodzi o obsługę uploadu plików przez ftp to napewno nie będe tego podpinał pod ten artykuł, może kiedyś dopisze osobną poradę, może zrobi to ktoś inny.
Dzięki za zwrócenie uwagi na dość ważną sprawę, czasami zdarza się że człowiek przeoczy coś co jest dla niego oczywiste winksmiley.jpg

Napisany przez: dooshek 23.03.2004, 23:23:14

Cytat
Artykuł pokazuje najprostszą drogę do uploadu plików, tzn. skorzystanie z wbudowanych w php funkcji.  Piszesz o błędach, i teraz dochodze do wniosku że przeoczyłem (a raczej za mało wyraźnie zaznaczyłem) jedną kwestię, prawa dostępu do katalogu do którego chcemy wrzucić pliki. Prawdopodobnie to było przyczyną tych błędów, katalog musi mieć ustawione prawa na 777. Niedługo zrobię poprawkę, bo to dość ważna sprawa, może ona sprawić troche kłopotów początkującym (do których ten art jest kierowany).
Jeśli chodzi o obsługę uploadu plików przez ftp to napewno nie będe tego podpinał pod ten artykuł, może kiedyś dopisze osobną poradę, może zrobi to ktoś inny.  
Dzięki za zwrócenie uwagi na dość ważną sprawę, czasami zdarza się że człowiek przeoczy coś co jest dla niego oczywiste winksmiley.jpg


No niezupelnie musi miec 777... to moze lepiej nie pisz jak ma byc napisane, ze zawsze musi miec 777.

Napisany przez: Cudi 24.03.2004, 13:51:54

Najprościej jest ustawić na 777 i można być pewnym że nie będzie problemów z zapisem do tego katalogu. Tak może być? smile.gif

Napisany przez: amr 31.03.2004, 03:28:07

przeczytałem, skopiowałem i nic....
wyskakuje tylko:
Upload pliku nie powiódł się!Dodatkowe informacje o uploadowanym pliku:
Array
(
[userfile] => Array
(
[name] => mickey.jpg
[type] => image/pjpeg
[tmp_name] => /tmp/php6lnrdj
[error] => 0
[size] => 18013
)

)

numer błedu 0 (czyli nie ma blędu??).plik sie nie wysyła, atrybuty 777

Napisany przez: g0blin 3.04.2004, 23:38:43

Mam male pytanie zwiazane z tym zagadnieniem, istnieje jakas mozliwosc aby sprawdzic czy plik dotarl w calosci na serwer ? Czyli w skrocie porownac rozmiar tego pliku co chcial przeslac uzytkownik a rzmiar tego co faktycznie dotarlo na serwer.

Napisany przez: KRCreater 6.04.2004, 21:10:56

Cytat
Ja bym proponowal dodanie do tego artykulu obsługi plików poprzez ftp ponieważ ostatnio spotkałem się z kontem na którym powyższy artykuł wyrzucał błedy i nie chcial uploadowac. Dopiero poprzez fopen dało rade uploadować pliki. Ale to tylko moja propozycja rolleyes.gif
Popieram winksmiley.jpg Mam ten sam problem

Napisany przez: LukaszLenart 7.04.2004, 17:47:45

Mysle, ze troche trzeba wyjasnic. Nie wszyscy uzywaja php na Linuxie.
Prawa o ktorych mowa musza byc podane takie aby uzytokwnik na ktorym dziala serwer mial prawo zapisu do danego katalogu. Przewaznie jest to uzytkownik apache, wiec wystarczy tak zmodyfikowac prawa do danego katalogu, aby uzytkownik apache mial tam prawo zapisu i odczytu (czasami trzeba plik uploadowac do uzytkownika ;-))

Druga rzecz to mozna ustawic katalog na pliki poza glowna sciezka serwera WWW (jesli mamy taka mozliwosc). Przewazanie jest tak, ze mamy do dyspozycji konto shellowe, i w katalogu public_html mamy umieszczac swoje strony (vide uczelnie). Mozna utworzyc sobie katalog files na tym samym poziomie co public_html i tam skladowac pliki. Trzeba miec jakis rejestr (np.w bazie danych) o posiadanych plikach (dobrze jest generowac nazwe po uploadzie, bedziemy miec pewnosc ze nikt nam nie nadpisze juz uploadowanego pliku). W rejestrze trzymamy informacje o pliku (orginalna nazwa, wielkosc, typ, odwolanie do ikony questionmark.gif?).

Trzecia rzecz, nie ma co sie sugerowac znacznikiem MAX_FILE_SIZE, nie jest on prawie wcale przestrzegany przez przegladarki (przetestowane na IE, Mozilla, Opera). I jesli ktos nam wysle wiekszy plik niz zdefiniowany w php.ini to dostaniemy brzydki komunikat (mozna jeszcze probowac po stronie Apachea cos zrobic).

Tak czy siak, jest to rzecz do poprawy, ale ogolnie dziala to fajnie ;-)

PS. Do autora, na przyszlosc moze dodac cos od siebie a nie tylko skopiowac manuala do php - bez obrazy ;-)

Napisany przez: It's_me 7.04.2004, 19:27:04

Cytat
PS. Do autora, na przyszlosc moze dodac cos od siebie a nie tylko skopiowac manuala do php - bez obrazy ;-)

ps do Ciebie: moze napiszesz jakis art od siebie a nie tylko krytykujesz ... moze cos o ftp questionmark.gif jezeli posiadasz taka wiedze .... oczywiscie bez obrazy ....

Napisany przez: LukaszLenart 8.04.2004, 09:01:18

Nie ma problemu, nie napisze o ftp bo nie robilem z czyms takim i nie bede sciemniac, tylko np. moge napisac jak generowac sobie tekst w pionie (odwrocony). Moze byc? Do kogo wyslac tekst i w jakim formacie?

Napisany przez: scanner 8.04.2004, 10:39:42

Cytat
jak generowac sobie tekst w pionie (odwrocony).
A jaki to ma związek z php?

Juz któryś raz mówię, - propozycjke tematów do wassago.

Napisany przez: LukaszLenart 8.04.2004, 11:04:42

Nigdy nie spotkales sie z tabele ktora ma 60 naglowkow kolumn, i jak to upchac na stronie, zeby miescilo sie w oknie przegladarki?
Tym bardziej ze nazwy naglowkow sa dlugie, a w wierszach masz tylko krzyzyki. A jedynie IE6 obsluguje CSS zwiazany z pionowym tekstem (ktory nie jest standardem CSS zaakceptowanym przez W3C ;-( )

A co do zwiazku z php, to chodzi o dynamiczne generowanie grafiki w php.

Propozycje tematu przesle do wassego.

Napisany przez: KRCreater 8.04.2004, 12:23:12

JA bym proponaował napisać coś o składni SQL'a.

Napisany przez: LukaszLenart 8.04.2004, 14:10:33

Moze sprecyzuj co chcialbys sie dowiedziec?

Napisany przez: aleksander 9.04.2004, 12:40:38

Bardzo fajny artykuł, przydał mi się do tworzenia panelu administracyjnego.
Rozbudowałem ten skrypt i chciałbym go przedstawić. Być może komuś on się przyda:

  1. <?php
  2. // NAZWA PLIKU - \"upload.php\" 
  3. // FUNKCJE: 
  4. // - UPLOADOWANIE PLIKU (by Cudi) 
  5. // - FILTR DLA WYBRANYCH TYPOW PLIKOW (http://www.dhtml.helion.pl/cgi-bin/listscript.fcgi?id=124) 
  6. // - UPLOADOWANIE DO WYBRANEGO KATALOGU (LISTA TWORZONA DYNAMICZNIE PRZEZ REKURENCYJNĄ FUNKCJ CZYTANIA KATALOGU ( PHPSolutions nr 02/2004) 
  7. // WSZELKIE SUGESTIE PROSZE ZGLASZAC NA GG:3820945
  8. http://www.php.net/echo '<script LANGUAGE=\"JavaScript\">
  9. <!-- Begin
  10. extArray = new Array(\".inc\"\".jpg\"\".gif\"); // TABLICA Z ROZSZERZENIAMI PLIKOW KTORE MAJA BYC AKCEPTOWANE DO WYSLANIA
  11. function LimitAttach(form, file)
  12. {
  13. allowSubmit = false;
  14. if (!file) return;
  15. while (file.indexOf(\"\") != -1)
  16. file = file.slice(file.indexOf(\"\") + 1);
  17. ext = file.slice(file.indexOf(\".\")).toLowerCase();
  18. for (var i = 0; i < extArray.length; i++) {
  19. if (extArray[i] == ext) { allowSubmit = true; break; }
  20. }
  21. if (allowSubmit) form.submit();
  22. else
  23. alert(\"Proszę wysyłać tylko pliki graficzne typu: \"
  24. + (extArray.join(\" \")) + \"nProsze wybrać nowy plik \"
  25. \"i wysłać ponownie.\");
  26. }
  27. // End -->
  28. </script>';
  29. if (!http://www.php.net/isset($_FILES['userfile']['tmp_name']))
  30. {
  31. http://www.php.net/echo &#092;"Tym skryptem możesz wysyłać pliki na serwer. Można wysyłać tylko pliki <script> document.write(extArray.join(' ')); </script>\";
  32. http://www.php.net/echo '<form enctype=\"multipart/form-data\" action=\"upload.php\" method=\"POST\" name=\"form\" >
  33. <input type=\"hidden\" name=\"MAX_FILE_SIZE\" value=\"30000\" />
  34. Plik do wysłania:<br>
  35. <select size=\"1\" name=\"dir\">';
  36. // FUNKCJA CZYTAJĄCA KATALOGI DO POLA SELECT
  37. $z = 1;
  38. function list_dir($chdir)
  39. {
  40. http://www.php.net/global $z;
  41. http://www.php.net/chdir($chdir);
  42. $handle = http://www.php.net/opendir('.');
  43. if ($z==1) // JAKO PIERWSZA POZYCJA POJAWI SIE KATALOG GLOWNY (./)
  44. {
  45. $somepath2 = http://www.php.net/str_replace (&#092;"../\", \"/\", $chdir);
  46. http://www.php.net/echo &#092;"<option value='c:/usr/apache/httpd/html\".$somepath2.\"'>.\".$somepath2.\"</option><br>n\";
  47. //echo \"./\" . $chdir . \"<br>\";
  48. $z = 0;
  49. }
  50. while ($file = http://www.php.net/readdir($handle))
  51. {
  52. if(http://www.php.net/is_dir($file) && $file != &#092;".\" && $file != \"..\") // TU MOZNA WSTAWIC FILTRY, JAKIE KATALOGI NIE MOGA SIE POJAIWC (SKLADNIA: && $file != \"NAZWA_KATALOGU\")
  53. {
  54. $sdirs[] = $file;
  55. }
  56. }
  57. for($i=0; $i<sizeof($sdirs); $i++)
  58. {
  59. $basedir = http://www.php.net/realpath($sdirs[$i]);
  60. $b1 = http://www.php.net/str_replace (&#092;"\" , \"/\", $basedir);
  61. $b2 = http://www.php.net/str_replace (&#092;"c:/usr/apache/httpd/html\", \".\", $b1);
  62. http://www.php.net/echo &#092;"<option value='\".$b1.\"'>\".$b2.\"</option><br>n\";
  63. list_dir($sdirs[$i]);
  64. http://www.php.net/chdir(&#092;"..\");
  65. }
  66. }
  67. list_dir(&#092;".\"); // WYWOLANIE FUNKCJI Z PARAMETREM FOLDERU OD KTOREGO MA ZACZAC SKANOWANIE
  68. // KONIEC FUNKCJI CZYTAJĄCEJA KATALOG
  69.  
  70. http://www.php.net/echo '</select>&nbsp;
  71. <input name=\"userfile\" type=\"file\" />
  72. <input type=button value=\"Wyślij\" onclick=\"LimitAttach(this.form, this.form.userfile.value)\" />
  73. </form>';
  74. }
  75. elseif (http://www.php.net/isset($_FILES['userfile']['tmp_name'])) // UPLOADOWANIE PLIKU
  76. {
  77. if( http://www.php.net/is_uploaded_file( $_FILES['userfile']['tmp_name'] ) )
  78. {
  79. $strUploadDir = $_POST['dir'] . &#092;"/\" . $_FILES['userfile']['name']; // TWORZENIE SCIEZKI BEZWZGLEDNEJ NA PODSTAWIE OPCJI WYBRANEJ W POLU SELECT
  80. if( http://www.php.net/move_uploaded_file( $_FILES['userfile']['tmp_name'], $strUploadDir ) )
  81. {
  82. http://www.php.net/echo 'Plik został pomyślnie uploadowany! <br />';
  83. }
  84. else
  85. {
  86. http://www.php.net/echo 'Upload pliku nie powiódł się!';
  87. }
  88. http://www.php.net/echo 'Dodatkowe informacje o uploadowanym pliku: <pre>' . http://www.php.net/print_r($_FILES, true ) . '</pre>';
  89. http://www.php.net/echo $strUploadDir; // SCIEZKA BEZWZGLENA UPLOADOWANEGO PLIKU
  90. }
  91. else
  92. {
  93. http://www.php.net/echo 'Wystąpił błąd podczas wysyłania pliku na serwer!<br>';
  94. }
  95. }
  96. ?>


Dodam tylko że nic nie jest napisane przeze mnie do końca. Upload plików wziąłem od Cudiego, rekurencyjne czytanie katalogu z psp solutions, a filtr wysyłanych plików z www.dhtml.helion.pl. Jednak wszystkie skrypty zostały zmodyfikowane. Inne bardziej, inne mniej.

Napisany przez: kwiateek 9.04.2004, 12:56:18

Cytat
Dodam tylko że nic nie jest napisane przeze mnie do końca. Upload plików wziąłem od Cudiego, rekurencyjne czytanie katalogu z psp solutions, a filtr wysyłanych plików z www.dhtml.helion.pl. Jednak wszystkie skrypty zostały zmodyfikowane. Inne bardziej, inne mniej.

To może byś to uwzględnił w komentarzach w kodzie.

Pozdrawiam.

Napisany przez: aleksander 9.04.2004, 13:39:27

rzeczywiście, nie pomyślałem o tym. Już poprawione

Napisany przez: Brick 15.04.2004, 14:36:19

A czym się różni właściwie funkcja copy od move_uploaded_file ?
Bo używam z powodzeniem tej pierwszej.

Czy komuś za pomocą takiego skryptu udało się wrzucić większy plik, np 15 czy 20 MB ? Bo mi się to nie udało.

Napisany przez: splatch 15.04.2004, 14:45:35

IMO w manualu jest to samo winksmiley.jpg.

Napisany przez: Krokodyl 23.04.2004, 19:17:15

Witam.
Mam pytanie do tematu dyskusji.
Co w sytuacji kiedy nie ma ustalonej zmiennej
_ENV["TMP"] ?

Tak jest na przykład na www.div.pl
Wszystko chodzi elegancko, "plik uploadował się poprawnie",
ale nie pojawia się w katalogu docelowym (chmod jest ustawiony na 0777).

Czy może wiecie jak taki problem ominąć?
-
[:::K:::]

P.S.
safe_mode == off

Napisany przez: splatch 27.04.2004, 17:39:49

http://splatch.desk.pl/on/a/tekst/pobieranie.html

Napisany przez: pwa 12.05.2004, 18:07:53

mam pytanie w jaki sposob skasowac ten uploadowany plik z wykorzystanie php oczywiscie

Napisany przez: Majdan 12.05.2004, 19:18:15

pwa, jeżeli chodzi Ci o kod php, to pomyliłeś fora.
ODP: [manual:52a2f027b3]unlink[/manual:52a2f027b3]()

Napisany przez: squid 8.08.2004, 19:02:24

Witam!
sprawdzalem kod z artykulu i niby wszystko ladnie tylko ze u mnie nie dziala. W php.ini jest ok, uzywam windy wiec o prawa dostepu nie trzeba sie martwic.
ale ciagle otrzymuje komunnikat :

Cytat
Wystąpił błąd podczas wysyłania pliku na serwer!

bez wzgledu na rozmiar i typ pliku.
formularz wyglada nastepujaco:
  1. <http://december.com/html/4/element/form.html enctype="multipart/form-data" action="test.php" method="POST"> Plik do wysłania: <http://december.com/html/4/element/input.html name="userfile" type="file" /> <http://december.com/html/4/element/input.html type="submit" value="Wyślij" /> </http://december.com/html/4/element/form.html>

plik test.php
  1. <?php
  2. if( http://www.php.net/is_uploaded_file( $_FILES['userfile']['tmp_name'] ) ) 
  3. { 
  4. $strUploadDir = 'D:/htdocs/samochody/' . $_FILES['userfile']['name']; 
  5. if( http://www.php.net/move_uploaded_file( $_FILES['userfile']['tmp_name'], $strUploadDir ) ) 
  6. { 
  7. http://www.php.net/echo 'Plik został pomyślnie uploadowany! <br />'; 
  8. } 
  9. else 
  10. { 
  11. http://www.php.net/echo 'Upload pliku nie powiódł się!'; } http://www.php.net/echo 'Dodatkowe informacje o uploadowanym pliku: <pre>' . http://www.php.net/print_r($_FILES, true ) . '</pre>'; 
  12. } 
  13. else 
  14. { 
  15. http://www.php.net/echo 'Wystąpił błąd podczas wysyłania pliku na serwer!'; 
  16. } 
  17. ?>

kiedy szukalem bledu to sie okazalo ze tablica $_FILES jest pusta. Uzywam php 4.3.6 i apache 2 wiec nie wiem o co chodzi. Macie moze jakis pomysl?

Napisany przez: kirov 10.08.2004, 12:53:32

Cytat
Czy komuś za pomocą takiego skryptu udało się wrzucić większy plik, np 15 czy 20 MB ? Bo mi się to nie udało.


To nie zależy od funkcji tylko w konfiguracji PHP_INI jest tam taki wpis: upload_max_filesize tam sie ustawia max wartosc MB uploadu

Napisany przez: broU 26.08.2004, 13:22:26

Większość opisanych w artykule rzeczy działa mi poprawne , wyjatkiem jest tylko MAX_FILE_SIZE . Obojętnie jaką wartość bym ustawił , to i tak jest ona pomijana . Granicę stanowi tylko 2M ustalone w php.ini . Więc pytam , czy jest jakaś możliwość ustawienie granicy bez modyfikowania php.ini ? Bo teraz , na localhoscie , mam do niego dostęp , ale w przyszłości , na innym serwerze , dostępu może nie być :/

PS: link do komentowania jest nieaktualny tongue.gif

PS2: nasunęło mi sie jeszcze jedno pytanie - otoz co sie stanie z plikiem , jesli zostanie zauploadowany , ale nigdzie go nie przeniesimy ? rozumiem ze bedzie spoczywal w tymczasowym folderze , ale jak dlugo ? odpowiada temu jakas dyrektywa w php.ini ? czy mozna usunac za pomoca unlink plik z tymczasowego miejsca ?

Napisany przez: auto pilot 29.08.2004, 17:44:57

Witam!

A jak można ograniczyć uploadowane pliki tylko do jednego czy dwoch typow (np. gif, czy doc)?

Pozdrawiam!
Auto Pilot

Napisany przez: zYm3N 29.08.2004, 21:07:08

Z tym kodem administacyjnym do wysyłania plików powyżej, to ja bym uważał....

Sprawdzanie poprawności danych za pomocą javascriptu (client-side) jest niebezpieczne. Nie polecam.

Napisany przez: nmi 20.09.2004, 11:25:40

odnosnie tego uploadu

jednym z plikow ktore cchce uploadowac nazywa sie costamdouploadowania-1.jpg
i jak w tym skrypcie zrobic by nazwe tego zmienic np na 0001.jpg

i tak dalej jak costamdouploadowania-34.jpg to 0002.jpg

Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)