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.
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
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
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ć?
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
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.
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 ?).
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 ;-)
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?
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.
JA bym proponaował napisać coś o składni SQL'a.
Moze sprecyzuj co chcialbys sie dowiedziec?
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:
<?php // NAZWA PLIKU - \"upload.php\" // FUNKCJE: // - UPLOADOWANIE PLIKU (by Cudi) // - FILTR DLA WYBRANYCH TYPOW PLIKOW (http://www.dhtml.helion.pl/cgi-bin/listscript.fcgi?id=124) // - UPLOADOWANIE DO WYBRANEGO KATALOGU (LISTA TWORZONA DYNAMICZNIE PRZEZ REKURENCYJNĄ FUNKCJ CZYTANIA KATALOGU ( PHPSolutions nr 02/2004) // WSZELKIE SUGESTIE PROSZE ZGLASZAC NA GG:3820945 http://www.php.net/echo '<script LANGUAGE=\"JavaScript\"> <!-- Begin extArray = new Array(\".inc\", \".jpg\", \".gif\"); // TABLICA Z ROZSZERZENIAMI PLIKOW KTORE MAJA BYC AKCEPTOWANE DO WYSLANIA function LimitAttach(form, file) { allowSubmit = false; if (!file) return; while (file.indexOf(\"\") != -1) file = file.slice(file.indexOf(\"\") + 1); ext = file.slice(file.indexOf(\".\")).toLowerCase(); for (var i = 0; i < extArray.length; i++) { if (extArray[i] == ext) { allowSubmit = true; break; } } if (allowSubmit) form.submit(); else alert(\"Proszę wysyłać tylko pliki graficzne typu: \" + (extArray.join(\" \")) + \"nProsze wybrać nowy plik \" + \"i wysłać ponownie.\"); } // End --> </script>'; if (!http://www.php.net/isset($_FILES['userfile']['tmp_name'])) { http://www.php.net/echo \"Tym skryptem możesz wysyłać pliki na serwer. Można wysyłać tylko pliki <script> document.write(extArray.join(' ')); </script>\"; http://www.php.net/echo '<form enctype=\"multipart/form-data\" action=\"upload.php\" method=\"POST\" name=\"form\" > <input type=\"hidden\" name=\"MAX_FILE_SIZE\" value=\"30000\" /> Plik do wysłania:<br> <select size=\"1\" name=\"dir\">'; // FUNKCJA CZYTAJĄCA KATALOGI DO POLA SELECT $z = 1; function list_dir($chdir) { http://www.php.net/global $z; http://www.php.net/chdir($chdir); $handle = http://www.php.net/opendir('.'); if ($z==1) // JAKO PIERWSZA POZYCJA POJAWI SIE KATALOG GLOWNY (./) { $somepath2 = http://www.php.net/str_replace (\"../\", \"/\", $chdir); http://www.php.net/echo \"<option value='c:/usr/apache/httpd/html\".$somepath2.\"'>.\".$somepath2.\"</option><br>n\"; //echo \"./\" . $chdir . \"<br>\"; $z = 0; } while ($file = http://www.php.net/readdir($handle)) { if(http://www.php.net/is_dir($file) && $file != \".\" && $file != \"..\") // TU MOZNA WSTAWIC FILTRY, JAKIE KATALOGI NIE MOGA SIE POJAIWC (SKLADNIA: && $file != \"NAZWA_KATALOGU\") { $sdirs[] = $file; } } for($i=0; $i<sizeof($sdirs); $i++) { $basedir = http://www.php.net/realpath($sdirs[$i]); $b1 = http://www.php.net/str_replace (\"\" , \"/\", $basedir); $b2 = http://www.php.net/str_replace (\"c:/usr/apache/httpd/html\", \".\", $b1); http://www.php.net/echo \"<option value='\".$b1.\"'>\".$b2.\"</option><br>n\"; list_dir($sdirs[$i]); http://www.php.net/chdir(\"..\"); } } list_dir(\".\"); // WYWOLANIE FUNKCJI Z PARAMETREM FOLDERU OD KTOREGO MA ZACZAC SKANOWANIE // KONIEC FUNKCJI CZYTAJĄCEJA KATALOG http://www.php.net/echo '</select> <input name=\"userfile\" type=\"file\" /> <input type=button value=\"Wyślij\" onclick=\"LimitAttach(this.form, this.form.userfile.value)\" /> </form>'; } elseif (http://www.php.net/isset($_FILES['userfile']['tmp_name'])) // UPLOADOWANIE PLIKU { if( http://www.php.net/is_uploaded_file( $_FILES['userfile']['tmp_name'] ) ) { $strUploadDir = $_POST['dir'] . \"/\" . $_FILES['userfile']['name']; // TWORZENIE SCIEZKI BEZWZGLEDNEJ NA PODSTAWIE OPCJI WYBRANEJ W POLU SELECT if( http://www.php.net/move_uploaded_file( $_FILES['userfile']['tmp_name'], $strUploadDir ) ) { http://www.php.net/echo 'Plik został pomyślnie uploadowany! <br />'; } else { 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>'; http://www.php.net/echo $strUploadDir; // SCIEZKA BEZWZGLENA UPLOADOWANEGO PLIKU } else { http://www.php.net/echo 'Wystąpił błąd podczas wysyłania pliku na serwer!<br>'; } } ?>
rzeczywiście, nie pomyślałem o tym. Już poprawione
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.
IMO w manualu jest to samo .
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
http://splatch.desk.pl/on/a/tekst/pobieranie.html
mam pytanie w jaki sposob skasowac ten uploadowany plik z wykorzystanie php oczywiscie
pwa, jeżeli chodzi Ci o kod php, to pomyliłeś fora.
ODP: [manual:52a2f027b3]unlink[/manual:52a2f027b3]()
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 :
<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>
<?php if( http://www.php.net/is_uploaded_file( $_FILES['userfile']['tmp_name'] ) ) { $strUploadDir = 'D:/htdocs/samochody/' . $_FILES['userfile']['name']; if( http://www.php.net/move_uploaded_file( $_FILES['userfile']['tmp_name'], $strUploadDir ) ) { http://www.php.net/echo 'Plik został pomyślnie uploadowany! <br />'; } else { 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>'; } else { http://www.php.net/echo 'Wystąpił błąd podczas wysyłania pliku na serwer!'; } ?>
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
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 ?
Witam!
A jak można ograniczyć uploadowane pliki tylko do jednego czy dwoch typow (np. gif, czy doc)?
Pozdrawiam!
Auto Pilot
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.
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)