upload zdjec

Odpowiedz Nowy wątek
nwebi
2011-11-12 22:43
nwebi
0

Czy zna ktos szybki i dzialajacy kod na upload plikow w php ? Uzywam czegos takiego:

$plik_tmp = $_FILES['zdj_1']['xx']; 
$plik_nazwa = $_FILES['zdj_1']['zdj_1']; 
        move_uploaded_file($plik_tmp, "foto/$plik_nazwa");  

a zdj_1 to pole type=file w formularzu. Ale na serwerze nie pojawiaja sie zadne nowe pliki. Z gory dziekuje

Pozostało 580 znaków

2011-11-13 10:41

Rejestracja: 8 lat temu

Ostatnio: 1 rok temu

0

Hej
Moze sie nie znam ale czy to przypadkiem nie powinno wygladac jakos tak:
skrypt1.php

<?php
$nazwa_obrazka = $_FILES['zdjecie']['name'];
if(is_uploaded_file($_FILES['zdjecie']['tmp_name']))
{
$przenoszenie = move_uploaded_file($_FILES['zdjecie']['tmp_name'],$_SERVER['DOCUMENT_ROOT'].'/zdjecia/'.$nazwa_obrazka);
if(!$przenoszenie)
{
echo "Przenoszenie pliku nie powiodlo sie";
}
else
{
echo "Plik zostal przeniesiony pomyslnie";
}
}
else
{
echo "Nie dodales zadnego pliku";
}
?>

A zeby nie bylo pozniejszych watpliwosci to kod HTML do tego powinien wygladac tak:
index.html

<form action="skrypt1.php" method="post" enctype="multipart/form-data">
<input type="file" name="zdjecie"/>
<input type="submit" value="Wyslij"/>
</form>

Dla pewnosci mozesz tez ustawic chmody na 777

Pozostało 580 znaków

2011-11-13 17:28
Moderator

Rejestracja: 13 lat temu

Ostatnio: 1 miesiąc temu

Lokalizacja: Rzeszów

0

zwróć uwagę, że w ten sposób można przesyłać dowolne pliki, w tym php. ktoś przygotuje odpowiedni kod kasujący wszystko, wyśle go, uruchomi i żegnajcie dane


Pozostało 580 znaków

2011-11-13 18:40

Rejestracja: 8 lat temu

Ostatnio: 1 rok temu

0

hmm... co racja to racja.
Przepraszam ale pisalem na szybko i nie zwrocilem juz na to uwagi.
Wiec poprawiony kod powinien wygaldac tak:

<?php
$nazwa_obrazka = $_FILES['zdjecie']['name'];
if(is_uploaded_file($_FILES['zdjecie']['tmp_name']))
{
    if(isset($_FILES['zdjecie']['type']))
    {
        $typ = $_FILES['zdjecie']['type'];
        if($typ == "application/x-php")
        {
            echo "Podales niepoprawny plik";
        }
        else
        {
            $przenoszenie = move_uploaded_file($_FILES['zdjecie']['tmp_name'],$_SERVER['DOCUMENT_ROOT'].'/zdjecia/'.$nazwa_obrazka);
        if(!$przenoszenie)
            echo "Dodawanie pliku nie powiodlo sie";
        else
            echo "Dodawanie pliku powiodlo sie";
        }
    }
}
else
    echo "Nie dodales zadnego pliku";

?>

Tak wlasnie wyglada moja skromna, zrobiona na szybko filtracja rozszerzen:

$typ = $_FILES['zdjecie']['type'];
        if($typ == "application/x-php")
        {
            echo "Podales niepoprawny plik";
        }

Mozesz dodac jeszcze filtracja przed roznymi formatami:
PHP - application/x-php
HTML - text/html
JavaScript - application/javascript
CSS - text/css
SQL - text/x-sql

Mozesz sobie sprawdzac odpowiedniki roznych formatow, wystarczy ze napiszesz:

echo $_FILES['zdjecie']['type'];

I dodawaj pliki z roznymi rozszerzeniami na localhoscie zeby dowiedziec sie jak sie nazywaja a potem mozesz ustawic filtracje nie niechciane przez Ciebie.

Pozostało 580 znaków

2011-11-13 20:55
Moderator

Rejestracja: 13 lat temu

Ostatnio: 1 miesiąc temu

Lokalizacja: Rzeszów

0

@Eluzive: wtf? sprawdzasz typ mime?

1) o ile pamiętam - podczas uploadu pochodzi one z przeglądarki użytkownika = można je podstawić....
2) php może mieć różne typy, nie tylko application/x-php = skrypt Ci to przepuści....

Mam nadzieję, że nie programujesz aplikacji bazujących na protokole http, skoro nie masz o nim pojęcia


Pozostało 580 znaków

2011-11-13 22:07

Rejestracja: 8 lat temu

Ostatnio: 1 rok temu

0

No coz tak prawde mowiac to jeszcze wcale nie programuje bo wczoraj zaczalem sie uczyc, takze sam wiesz jak to jest na poczatku, w kazdym badz razie dzieki za wytkniecie mojej pomylki, bo to na bledach uczy sie czlowiek i przepraszam za wykazanie sie brakiem wiedzy, teraz juz wiem, ze za pomoca skryptu w Perlu latwo mozna zmienic MIME-type. Mysle ze to rozwiazanie

$typ = substr($obrazek_nazwa, strrpos($obrazek_nazwa, '.') + 1);
if($typ == "php")
    echo "Przeslales nieprawidlowy plik";

Zamiast tego:

 $typ = $_FILES['zdjecie']['type'];
                if($typ == "application/x-php")
                {
                        echo "Podales niepoprawny plik";
                }

Powinno dzialac poprawnie i nie mozna juz na nie zaingerowac. Znowu wykazalem sie brakiem wiedzy?

ja zawsze robię $typ = end(explode('.', $nazwa_pliku)); i sorry za opiernicz, ale nie wiedziałem, że dopiero zaczynasz, a błędy były BARDZO poważne (w końcu to podstawa). - dzek69 2011-11-13 23:13
aa, i lepiej ODRZUCAĆ wszystkie pliki nie pasujące do akceptowanych przez nas, niż przyjmować wszystkie pliki, oprócz tych "zbanowanych" - pliki php5, php4 na 90% też się wykonają jako php. W dodatku może być ich dużo więcej, w końcu wszystko zależy od konfiguracji serwera. Więc lepiej zrobić potem: if (!in_array($typ, array('jpg', 'jpeg', 'gif', 'png'))) { echo 'zly plik'; } else { / dobry plik / } - dzek69 2011-11-13 23:17

Pozostało 580 znaków

2011-11-13 22:14

Rejestracja: 12 lat temu

Ostatnio: 9 miesięcy temu

1

podczas uploadu pochodzi one z przeglądarki użytkownika = można je podstawić....

Zapamiętaj: NIGDY, NIGDY, NIGDY nie wolno ufać użytkownikowi. Użytkownik to skurwiel - zawsze kłamał, zawsze kłamie i zawsze będzie kłamał. Musisz zawsze sprawdzać czy mówi prawdę. Skoro typ MIME pochodzi wyłącznie od użytkownika i nie jest weryfikowany, to oznacza że równie dobrze odpowiednio spreparowaną przeglądarkę mogę ci przesłać plik .php z innym typem MIME i twój skrypt to łyknie. Jeśli już chcesz sprawdzaj rozszerzenie pliku, który otrzymujesz. Bardziej profesjonalnym rozwiązaniem byłoby zapisywanie jak leci wszystkiego (nawet plików .php), odebranie dostępu do katalogu w którym są pliki i serwowanie ich przez inny skrypt typu force download.


Women were the reason I became a monk - and, ah, the reason I switched back...
edytowany 1x, ostatnio: Demonical Monk, 2011-11-13 22:15
Drugi House :] - madmike 2011-11-13 22:16
Nie wiem, nie oglądam. - Demonical Monk 2011-11-13 22:16

Pozostało 580 znaków

Odpowiedz

1 użytkowników online, w tym zalogowanych: 0, gości: 1, botów: 0