Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: [PHP] Upload plików
Forum PHP.pl > Forum > Przedszkole
Karpadoor
Hej !

Chiałem nauczyć się uploadować pliki od użytkowników...

ale mam pewien problem:

Znalazłem w Necie Gotowca:

index.html:
  1. <?php
  2. <html>
  3. <body>
  4.  <form action="plik2.php" method="POST" ENCTYPE="multipart/form-data">
  5. <input type="file" name="plik"/>
  6. <input type="submit" value="Wyślij plik"/>
  7.  </form>
  8. </body>
  9. </html>
  10. ?>


plik2.php:
  1. <?php
  2.  
  3. $max_rozmiar = 1024*1024;
  4. if (is_uploaded_file($_FILES['plik']['tmp_name'])) {
  5. if ($_FILES['plik']['size'] > $max_rozmiar) {
  6. echo 'Błąd! Plik jest za duży!';
  7. } else {
  8. echo 'Odebrano plik. Początkowa nazwa:  '.$_FILES['plik']['name'];
  9. echo '<br/>';
  10. if (isset($_FILES['plik']['type'])) {
  11. echo 'Typ: '.$_FILES['plik']['type'].'<br/>';
  12.  }
  13. move_uploaded_file($_FILES['plik']['tmp_name'],
  14. $_SERVER['DOCUMENT_ROOT'].'/foto/'.$_FILES['plik']['name']);
  15. }
  16. } else {
  17.  echo 'Błąd przy przesyłaniu danych!';
  18. }
  19.  
  20. ?>


Co tutaj powinienem zmienić by skrypt działał poprawnie questionmark.gif

///

Czy poda mi ktoś jakiś fajny zaufany skrypcik questionmark.gif ;]
prog112
A co dokładniej nie działa? Jaki błąd wyskakuje?
K4mil94
CHMOD folderu w którym mają się zapisywać foty jest ustawiony na 777 ?
nie wiem o co chodzi
Mam taki "układ" katalogów na serwerze:
admin (dodaj_artykul.php)
glowne (aktualnosci.php)
pliki (tutaj mają być uploadowane pliki) ma chmod 777
Jaką mam wpisać ścieżkę dostępu do zdjęcia w plikach dodaj_artykul.php i aktualnosci.php.
Na razie mam coś takiego w dodaj_artykul.php:
  1. <?php
  2. $tmp_name = $_FILES['zdjecie']['tmp_name'];
  3. $name = $_FILES['zdjecie']['name'];
  4. $sciezka = "../pliki/".$name;
  5.  
  6. move_uploaded_file($tmp_name, $sciezka);
  7. ?>

, a w aktualnosci.php coś takiego:
  1. <?php
  2. $sciezka = $wiersz['N_sciezka'];
  3.  
  4. echo "<img src=\"$sciezka\">";
  5. ?>

Pewnie coś źle tą ścieżkę ustawiam, bo już nie wiem o co chodzi. Jak dobrze ustawię ścieżkę i zapisze mi zdjęcie do katalogu pliki i w bazie danych to już wyświetlić nie chce.
bimo
$sciezka = "../pliki/".$name;

te dwie kropki zamień na jedną
czyli:

$sciezka = "./pliki/".$name;
nic z tego
nic z tego
Warning: move_uploaded_file(./pliki/sruby.jpg) [function.move-uploaded-file]: failed to open stream: No such file or directory in itd.

Warning: move_uploaded_file() [function.move-uploaded-file]: Unable to move itd.
potreb
Jak sam błąd wskazuje lokalizacje nie istnieje. Więc sprawdź dokładnie ../ czy to okey
jestem skołowany
To odpowie mi ktoś jak ma być dobrze, bo już próbowałem takich rzeczy:
$sciezka = "pliki/".$name;
$sciezka = "./pliki/".$name;
$sciezka = "../pliki/".$name;
$sciezka = $_SERVER["DOCUMENT_ROOT"]."/pliki/".$name;
$sciezka = preg_replace("/\/[^\/]+$/", "", $_SERVER["SCRIPT_FILENAME"])."/pliki/".$name;
i nic.
Albo dodaje wpis do bazy danych, a nie dodaje pliku do katalogu albo odwrotnie lub dodaje wpis do bazy i plik do katalogu, ale nie wyświetla na stronie, bo wciąż nie wiem jaką ścieżkę wpisać, a katalog pliki istnieje na ftpie i ma ustawiony chmod 777.
marcio
Zapisuje robacza sciezke do zmienej i potem dodawaj np tak
  1. <?php
  2. $robocze = getcwd();
  3. $sciezka = 'pliki/';
  4. if(substr($robocze, -1, 1) != '/') $robocze .= '/';
  5. //jesli katalog pliki nie istnieje
  6. if(!file_exists($robocze.$sciezka)) {
  7. $umask_r = umask(0);
  8.  $dir = mkdir($robocze.$sciezka, 0777);
  9. umask($umask_r);
  10. }
  11. $pelna_sciezka = $robocze.$sciezka;
  12. $name = $_FILES['up_file']['name'];
  13. $sciezka_do_pliku = $pelna_sciezka.$name;
  14. $uploaded_file = $_FILES['up_file']['tmp_name'];
  15.  
  16. //uploadujesz
  17. if(is_uploaded_file($uploaded_file)) {
  18.  
  19. if(move_uploaded_file($uploaded_file, $sciezka_do_pliku)) {
  20.  
  21.  //reszta dzialan zapis do bazy i potem wyswietlasz
  22.  
  23.  }
  24. }
  25. ?>

Nie wiem czy o to chodzilo tak na szybko ci pokazalem
dalej męczę ten temat
z tego całego kodu nie wiem co robią te wiersze:

$robocze = getcwd();

if(substr($robocze, -1, 1) != '/') $robocze .= '/';

$umask_r = umask(0);
$dir = mkdir($robocze.$sciezka, 0777);
umask($umask_r);

Proszę o przetłumaczenie, co się dzieje, bo bym chciał się czegoś nauczyć, a nie tylko przepisywać gotowy kod. Wiem, że substr wycina z łańcucha jeden znak od końca, ale co znaczą te ukośniki to nie wiem, a z tego co znalazłem w manualu php, to getcwd wskazuje bieżący katalog roboczy, umask najpierw chyba odbiera prawa, a później nadaje utworzonemu katalogowi w tym wskazanym katalogu roboczym co na początku, ale pewien nie jestem, więc proszę o wyjaśnienie.
Piotrwusek
  1. <?php
  2.  
  3. if(!empty($_FILES['plik']))
  4. {
  5.  
  6. $plik_tmp = $_FILES['plik']['tmp_name'];
  7. $plik_nazwa = $_FILES['plik']['name'];
  8. $plik_rozmiar = $_FILES['plik']['size'];
  9.  
  10.  
  11. if(is_uploaded_file($plik_tmp)) {
  12.  move_uploaded_file($plik_tmp, "download/$plik_nazwa");
  13. echo "<center>PLIK: <strong>$plik_nazwa</strong> o rozmiarze 
  14. <strong>$plik_rozmiar bajtów</strong> została przesłana na serwer.<br></center>";
  15. }}
  16. ?>



  1. <br />
  2. <div align="center">
  3. <form enctype="multipart/form-data" action="" method="POST">
  4. Adres pliku: <input type="hidden" name="MAX_FILE_SIZE" value="9000000" />
  5. <input name="plik" type="file" />
  6. <input type="submit" value="Wyślij plik" />
  7. </form>
  8. </div>


Mi ten kod działa jednak wyciągnąłem do z CMS więc może coś uciąłem ale nie sądzę

A teraz objaśnienie

Zacznę nietypowo na końcu masz zwykły formularz gdzie się przesyła plik.

Definiujesz tam maksymalny rozmiar pliku, reszta to podanie ścieżki i przycisk


DALEJ
Jeśli zmienna files'plik' nie jest pusta to:
Na początku odczytujemy dane z formularza dalej
Później wysyła plik na serwer
Pokazuje informacje

katalog download ma mieć chmoda 777 (do zapisu)
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.