logo elektroda
logo elektroda
X
logo elektroda
REKLAMA
REKLAMA
Adblock/uBlockOrigin/AdGuard mogą powodować znikanie niektórych postów z powodu nowej reguły.

PHP - upload plików na serwer z poziomu przeglądarki.

Mbeat 08 Kwi 2006 22:21 8115 8
REKLAMA
  • #1 2507489
    Mbeat
    Poziom 21  
    Posty: 643
    Pomógł: 38
    Ocena: 52
    Witam.
    Mam problem. Chcem aby na stronie była możliwość uploadu plików do max. 1,5 MB. Szukałem w internecie skryptów do tego ale nie chcą mi chodzić. Czy mógłby ktoś takie coś zrobić ( z tego co się orientuję to nie jest to skomplikowane). Dodam, że stronę mam na serwerze www.yoyo.pl z funkcją PHP i bazami MySQL.

    Z góry dzięki - za poprawne rozwiązanie problemu przekażę 30 pkt.

    Pozdrawiam.
  • REKLAMA
  • #2 2507544
    tomi140
    Poziom 14  
    Posty: 49
    Pomógł: 8
    Ocena: 14
    Witam. Spróbuj tego :
    W HTML-u

    <HTML>
    <BODY>
    
    <FORM ENCTYPE="multipart/form-data" ACTION="uploader.php3" METHOD=POST>
    <INPUT TYPE="hidden" name="MAX_FILE_SIZE" value="100000">
    Załaduj plik: <INPUT NAME="plik" TYPE="file">
    <INPUT TYPE="submit" VALUE="OK">
    </FORM>
         
    </BODY>
    </HTML>


    W oobnym pliku uploader.php3
    <?
    
    
    if (is_uploaded_file($plik))
    {
       copy($plik, "$uplPath/$plik_name");
       chmod("$uplPath/$plik_name", 0666);
    
       header("Location: $ok");
    }
    else
       header("Location: $blad");
    
    
    ?>


    Może to ci cos pomoże.
    POzdrawiam tomi140
  • #3 2507564
    Mbeat
    Poziom 21  
    Posty: 643
    Pomógł: 38
    Ocena: 52
    <?php 
    if (!$HTTP_POST_FILES['userfile']) { 
    ?> 
    
    <form enctype="multipart/form-data" action="plik.php" method="post"> 
    Podaj nazwę pliku: <input name="userfile" type="file"> 
    <input type="submit" value="Wyślij"> 
    
    <?php 
    } else if (move_uploaded_file($HTTP_POST_FILES['userfile']['tmp_name'], "/katalog/upload".$HTTP_POST_FILES 
    ['userfile']['name'])) 
    { 
        echo "Plik " . $HTTP_POST_FILES['userfile']['name'] . " zapisany. Dziękuję"; 
    } 
    ?> 


    Zrobiłem według tego i wszystko chodzi jak należy. Jak teraz zrobić aby pliki z uploadu wyświetlić na sronie np w tabeli z funkcją pobrania (aby automatycznie były wykrywane i do niej dodawane ?). Zostaje jeszcze kwestia bezpieczeństwa strony.
    Pozdrawiam.
  • REKLAMA
  • #4 2507811
    tomi140
    Poziom 14  
    Posty: 49
    Pomógł: 8
    Ocena: 14
    Po pierwsze musisz przeładować stronę. Jednak strona na której wybierasz plik musi za każdym ładowaniem sprawdzać zawartość folderu w którym zapisujesz dane. Szprawdza czy są jakieś pliki. Jeśli są daje do nich linki.
  • #5 2507875
    Kacza82
    Poziom 14  
    Posty: 95
    Pomógł: 7
    Ocena: 9
    Zrobilem cos takiego kiedys. Moze troche nieudolne ale działa. Jak by co to moge podeslac wszystkie pliki.

    Czesc skryptu php to:
    formularz:
     <form enctype="multipart/form-data" action="wyslij.php" method="post">
    <input type="hidden" name="max_file_size" value="100000000000">
    zaladuj ten plik
    <input name="plikuzytkownika" type="file">
    <input type="submit" value="wyslij">
    </form>';


    A tutaj wyslanie na serwer
    
    if ($_FILES['plikuzytkownika']['error']>0)
    	{ echo 'problem:';
    	switch ($_FILES['plikuzytkownika']['error'])
    		{
    		case 1: echo "rozmiar pliku";break;
    		case 2: echo "rozmiar pliku";break;
    		case 3: echo "plik wyslany czesciowo";break;
    		case 4: echo "nie wyslano zadnego pliku";break;
    		}
    		exit;
    	}
    
    	$lokalizacja="katalog/".$_FILES['plikuzytkownika']['name'];
    		if (is_uploaded_file($_FILES['plikuzytkownika']['tmp_name']))
    		{
    			if(!move_uploaded_file($_FILES['plikuzytkownika']['tmp_name'],$lokalizacja))
    				{echo '<br>problem plik nie moze byc skopiowany';
    				exit;}
    		}
    	else 
    	{echo '<br>blad podczas wysylania pliku: ';
    	echo $_FILES['plikuzytkownika']['name'];
    	}
    	echo '<h2>plik wyslanny</h2>';
    	     
    copy($plikuzytkowinka,$lokalizacja);
  • #6 2507896
    tomi140
    Poziom 14  
    Posty: 49
    Pomógł: 8
    Ocena: 14
    Może to coś pomoże.
    Do kodu ładowania pliku dodaj:
    
    $list = @fopen("lista.txt", "w");
    fputs($list, $HTTP_POST_FILES['userfile']['name'] . "\n");
    fclose($list,):
    


    A do kodu strony w której ma być lista plików:
    
    $kat = /tutaj podaj adres do katalogu z plikami/ ;
    $poz = file("lista.txt");
    foreach($poz as $nazwa){
    $temp = "<a href=" . $kat . $poz . ">" . $poz . "</a><br>" . "\n" ;
    echo $temp ;
    }
    


    Kod pisałem szybko (szczerze to PHP słabo znam) więc mogą być konieczne poprawki.
  • REKLAMA
  • #7 2508370
    Mbeat
    Poziom 21  
    Posty: 643
    Pomógł: 38
    Ocena: 52
    Wstawiłem coś takiego :

    <? 
    @$katalog = opendir('pliki'); 
    if (!$katalog) die ('Nie moge otworzyc folderu'); 
    $roz_graficzne = array('.jpg', '.jpeg', '.gif', '.png'); 
    while($pliki = readdir($katalog)) 
    { 
      if ($pliki != '.' && $pliki != '..') 
      { 
        $rozszerzenie = strtolower(strrchr($pliki, ".")); 
        if(in_array($rozszerzenie, $roz_graficzne)) 
        $lista[] = $pliki; 
      } 
    } 
    ?> 
    <? 
    $id = $_GET['id']; 
    if (!$id) $id=0; 
    if ($id < 0 ) 
        $id = count($lista)-1; 
    if ($id >= count($lista)) 
        $id = 0; 
    echo '<a href="upload.php?id='.($id-1).'">wstecz</a> | '; 
    echo '<a href="upload.php?id='.($id+1).'">dalej</a><br /><br />'; 
    echo 'Nazwa pliku: '.$lista[$id].'<br /><br />'; 
    if ($lista[$id]) 
        echo '<img src="pliki/'.$lista[$id].'"><br/>';ß 
    ?> 



    I wszystko gra. Problem w tym, że przeglądarka nie chce pokazać zdjęcia. Gdy klikne na nie wyświetlony obrazek prawym klawiszem myszki i wybiorę Właściwości pokazana jest dobra ścieżka do pliku graficznego. Natomiast kiedy skopiuję ścieżkę do pliku np. http://www.strona.yoyo.pl/upload/files/zdjecie.jpg wyskakuje komunikat : Możesz nie mieć uprawnień, aby przeglądać ten katalog lub tę stronę przy użyciu podanych poświadczeń.

    Co mam robić ? :|
  • Pomocny post
    #8 2508624
    tomi140
    Poziom 14  
    Posty: 49
    Pomógł: 8
    Ocena: 14
    Musisz nadać wszystkim użytkownikom prawo do przeglądania tego folderu. Zrobisz to z poziomu panelu administracyjnego.

    Ja korzystam z cPanel:
    Wchodze do Menadzera plików,
    Wybieram folder,
    Change Permissions,
    I dla World zaznaczam tylko Read i ewentualnie Execute.
  • REKLAMA
  • #9 2509223
    Mbeat
    Poziom 21  
    Posty: 643
    Pomógł: 38
    Ocena: 52
    Wiem :) Udało mi się już zrobić to co chciałem przy użyciu powyższego kodu który zamieściłem.
    Pozdrawiam.

Podsumowanie tematu

✨ Dyskusja dotyczy implementacji funkcji uploadu plików na serwer z poziomu przeglądarki w PHP, z ograniczeniem rozmiaru do 1,5 MB. Zaproponowano przykładowe formularze HTML z atrybutem enctype="multipart/form-data" oraz skrypty PHP obsługujące przesyłanie plików, wykorzystujące funkcje is_uploaded_file, move_uploaded_file oraz obsługę tablicy $_FILES (lub starszego $HTTP_POST_FILES). Poruszono kwestie zapisu plików na serwerze, nadawania odpowiednich uprawnień (chmod 0666) oraz przekierowań po udanym lub nieudanym uploadzie. Wskazano na potrzebę dynamicznego odczytu katalogu z plikami w celu wyświetlania listy przesłanych plików na stronie, np. w formie tabeli z linkami do pobrania. Zaproponowano także prostą metodę zapisu nazw plików do pliku tekstowego i ich późniejszego wyświetlania. Omówiono kwestie bezpieczeństwa, w tym nadawanie praw dostępu do katalogu z plikami za pomocą panelu administracyjnego (np. cPanel) – ustawienie praw do odczytu i wykonania dla wszystkich użytkowników. Autor potwierdził, że udało mu się zrealizować upload i wyświetlanie plików na serwerze www.yoyo.pl z obsługą PHP i MySQL, korzystając z przedstawionych rozwiązań.
Podsumowanie AI na podstawie dyskusji. Może zawierać błędy.
REKLAMA