upload zdjec

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

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

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

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.

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

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?

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.

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