Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: Formularz wysyłający pliki na serwer FTP
Forum PHP.pl > Forum > PHP
Kosa_03
Czy poniższy skrypt formularza wysyłającego plik na serwer jest dobry? Pomińmy system uwierzytelnienia który tutaj jest stworzony poprzez dołączenie pewnych części kodu instrukcją require('');

Kod
<?php

session_start();

?>

<html>
<head>
  <meta http-equiv="Content-type" content="text/html; charset=ISO-8859-2" />

<style type="text/css">
<!--
body
{
    font-family: Tahoma;
    font-size: 12px;
    color: #FFFFFF;
    padding-left: 10px;
}
input.przycisk
{
    font-family: Tahoma;
    font-size: 11px;
}
-->
</style>

</head>
<body background="gfx/tekst_tlo.gif">

<?php

require('cos.php');
require('uwierzytelnienie.php');

if($_POST['formularz'] != 'no')
{
    echo '<form enctype="multipart/form-data" action="dodaj_zdjecia.php" method="POST">'
       .   '<input type="hidden" name="MAX_FILE_SIZE" value="5242880">'
       .   '<input type="hidden" name="formularz" value="no">'
       .   '<input type="hidden" name="wyslij" value="yes">'
       .   'Wybierz zdjęcie: <input type="file" name="zdjecie" class="przycisk">'
       .   '<br><br>'
       .   '<input type="submit" value="Wyślij plik" class="przycisk">'
       . '</form>';
}

if($_POST['wyslij'] == 'yes')
{
    if($_FILES['zdjecie']['error'] > 0)
    {
        echo '<font color="#FF0000">Zgodność pliku (Krok 1 z 3):</font> ';
        switch($_FILES['zdjecie']['error'])
        {
            case 1 :
                echo '<font color="#FF0000">Rozmiar pliku przekroczył wartość upload_max_filesize.</font>';
            break;
            case 2 :
                echo '<font color="#FF0000">Rozmiar pliku przekroczył wartość max_file_size (5 MB)</font>.';
            break;
            case 3 :
                echo '<font color="#FF0000">Plik został wysłany tylko częściowo.</font>';
            break;
            case 4 :
                echo '<font color="#FF0000">Nie wysłano żadnego pliku.</font>';
            break;
        }
        exit;
    }
    else
    {
        echo '<font color="#00FF00">Zgodność pliku (Krok 1 z 3): Wynik przebiegł pomyślnie.<br></font>';
    }
    
    if(($_FILES['zdjecie']['type'] == 'image/pjpeg') || ($_FILES['zdjecie']['type'] == 'image/png'))
    {
        echo '<font color="#00FF00">Zgodność pliku (Krok 2 z 3): Wynik przebiegł pomyślnie.<br></font>';
    }
    else
    {
        echo '<font color="#FF0000">Zgodność pliku (Krok 2 z 3): Ten plik nie posiada rozszerzenia *.JPG lub *.PNG.</font>';
        exit;
    }
    
    $lokalizacja = '/Galeria/' . $_FILES['zdjecie']['name'];
    
    if(is_uploaded_file($_FILES['zdjecie']['tmp_name']))
    {
        if((copy($_FILES['zdjecie']['tmp_name'], $lokalizacja)) == false)
        {
            echo '<font color="#FF0000">Zgodność pliku (Krok 3 z 3): Plik nie może zostać skopiowany.</font>';
            exit;
        }
        else
        {
            echo '<font color="#00FF00">Zgodność pliku (Krok 3 z 3): Wynik przebiegł pomyślnie.</font>';
        }
    }
    else
    {
        echo '<font color="#FF0000">Zgodność pliku (Krok 3 z 3): Możliwy atak podczas wysyłania pliku ' . $_FILES['zdjecie']['name'] . '.</font>';
        exit;
    }
}

?>

</body>
</html>


Z góry dziękuję i pozdrawiam winksmiley.jpg )

Piszę ten post dlatego, iż serwer zwraca mi błąd w postaci

Cytat
Zgodność pliku (Krok 1 z 3): Wynik przebiegł pomyślnie.
Zgodność pliku (Krok 2 z 3): Wynik przebiegł pomyślnie.

Warning: copy() [function.copy]: open_basedir restriction in effect. File(/Galeria/kosa.JPG) is not within the allowed path(s): (/home/asot/:/tmp:/usr/local/lib/php/) in /home/asot/domains/2ti.src4u.com/public_html/dodaj_zdjecia.php on line 89

Warning: copy(/Galeria/kosa.JPG) [function.copy]: failed to open stream: Operation not permitted in /home/asot/domains/2ti.src4u.com/public_html/dodaj_zdjecia.php on line 89
Zgodność pliku (Krok 3 z 3): Plik nie może zostać skopiowany.
b_chmura
użyj move_uploaded_file() zamiast copy()

copy() służy chyba jedynie do kopiowania na serwerze
Kosa_03
przy funkcji move_uploaded_file(); wyskakuje mi błąd sad.gif Informacje typu "Zgodność pliku:..." to sam robiłem, w powyższym kodzie (post wyżej) również widać to.

Cytat
Zgodność pliku (Krok 1 z 3): Wynik przebiegł pomyślnie.
Zgodność pliku (Krok 2 z 3): Wynik przebiegł pomyślnie.

Warning: move_uploaded_file() [function.move-uploaded-file]: open_basedir restriction in effect. File(/Galeria/skanuj0001.jpg) is not within the allowed path(s): (/home/asot/:/tmp:/usr/local/lib/php/) in /home/asot/domains/2ti.src4u.com/public_html/dodaj_zdjecia.php on line 89
Zgodność pliku (Krok 3 z 3): Plik nie może zostać skopiowany.


Używając funkcji move_uploaded_file(); wyskakiwał mi taki błąd, poszukałem w necie innego przykładu do wysyłania plików na serwer i pisało copy(); dlatego użyłem funkcji copy(); ...

Jak zrobić do takiego formularza "Progressbar" ? taki pasek informujący na bierząco postęp wysyłanego pliku. Coś typu "Wysłano 1024 kB z 2048 kB (50%) Proędkość wysyłania: 20 kbps Przewidywany czas: 60 sekund"

Proszę o odpowiedź i pozdrawiam smile.gif )
b_chmura
1. a nadałeś odpowiednie prawa katalogowi do którego uploadujesz pliki?
2. Wiem że flash posiada funkcje która potrafi odczytać rozmiar uploadowanego pliku przed jego przekopiowaniem, w php/js nie da rady chyba ze użytkownik sam w formularzu podawałby rozmiar pliku ale chyba nie o to nam chodzi...
Kosa_03
1) Katalog do którego mają zostać przekopiowane pliki to Galeria. Katalog ten posiada atrybuty (CHMOD) ustawione na 777.

2) Dzięki za informacje smile.gif
b_chmura
Cytat
...Niestety nie jest to prawdą. Wystarczy zapoznać się z dokumentacją PHP, aby zdiagnozować problem. Leży on po stronie konfiguracji PHP’a w którym włączone jest ograniczenie open_basedir. Dział 42. dokumentacji PHP opisuje tzw tryb bezpieczny PHP’a w którym można ograniczyć dostęp do plików na serwerze. Komunikat “Warning: open_basedir restriction in effect. File is in wrong directory in /__FILE__ on line __LINE__” mówi tylko o tym, że administrator nie pozwala na dostęp do katalogów systemu...

...
Należy zwrócić się do administratora serwera, aby w pliku php.ini umożliwił zapis do katalogów lub wyłączył restrykcję open_base_dir. To drugie rozwiązanie jest najlepsze, gdyż usunie wyszystkie tego typu błędy...
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.