upload zdjęć

0

Witam napisałem sobie upload plików lecz uploaduje tylko jpeg nie wrzucają się jpg ,png , gif czy to wina apache ? czy błędy w kodzie proszę o pomoc !

<?php
 
if(session_is_registered("user"))
{
 
 
$name=$_SESSION['name'];
 
 
	echo'<!-- pocztek tabelki z newsami --><table align="center" CELLPADDING=0 CELLSPACING=0>
		<tr>
		<td class="topn"></td>
		</tr>
		<td class="tlon">
		<div class="news">';
 
			echo'
<form enctype="multipart/form-data" method="POST"> 
<input type="hidden" name="MAX_FILE_SIZE" value="50000" /> 
<input name="plik1" type="file" /> 
<input type="hidden" name="MAX_FILE_SIZE" value="50000" /> 
<input name="plik" type="file" /> 
<input type="submit" name="submit" value="submit" /> 
</form>
';
 
 
if(isset($_POST["submit"]))
{
	if(is_file($_FILES['plik']['tmp_name']) and is_file($_FILES['plik1']['tmp_name']))
{
  $u_plik = $_FILES['plik']['tmp_name']; 
  $u_nazwa = $_FILES['plik']['name']; 
  $u_rozmiar = $_FILES['plik']['size'];
  $u_typ=$_FILES['plik']['type'];
	$u_plik1 = $_FILES['plik1']['tmp_name']; 
	$u_nazwa1 = $_FILES['plik1']['name']; 
	$u_rozmiar1 = $_FILES['plik1']['size'];
	$u_typ1=$_FILES['plik1']['type'];
 
 
 
 
if(is_uploaded_file($u_plik) and is_uploaded_file($u_plik1)) 
{
 
 
	$tab[]='image/gif';
	$tab[]='image/jpg';
	$tab[]='image/png';
	$tab[]='image/jpeg';
	$tab[]='image/JPEG';
	if(array_search($u_typ,$tab)!==false and array_search($u_typ1,$tab)!==false)
	{
	        $nazwa='przed';
		move_uploaded_file($u_plik,'obraz/'.$nazwa);
		$naz='po';
		move_uploaded_file($u_plik1,'obraz/'.$naz);
 
 
 
 
		// Bibloteka GD
		if (!extension_loaded('gd'))
 	        if (!dl('gd.so'))
   	 	echo "Nie mogę odnaleźć bibioteki GD!";
		/// 
 
		rei('obraz/'.$nazwa,$nazwa);
		//rei('obraz/'.$naz,$naz);
 
 
 
 
	}
	else
	{
		echo"Format pliku jest nie prawidłowy.<br>  ";
 
	}
 
 
} 
	}
 
 
 
       }
 
 
		echo'</div></td>
		<tr>
		<td class="doln"></td>		
		</tr>
		</table> <!-- koniec tabeli z newsami -->
		';	
 
 
 
}
else
{
 
header("location:index.php");
 
}
 
?>
0

bo to się robi sprawdzając rozszerzenie pliku, a nie jego content/type.
content/type jest przysyłany przez przeglądarkę użytkownika i zależy od jego dobrych chęci i konfiguracji systemu. jeśli ma złe zamiary, to wyśle plik php z content/type=image/jpeg i zrobi z Twoim serwisem co tylko będzie chciał.

poza tym - użyj debugera albo chociaż wypisz sobie do którego miejsca dochodzi kod zanim przestanie działać zgodnie z zamierzeniami.
nie używaj tabelek do layoutu! od tego są elementy div/span/ul/li/p i css.
nie możesz liczyć na MAX_FILE_SIZE, to - ponownie - tylko dobra wola użytkownika, zresztą AFAIK żadna przeglądarka nie respektuje tego pola.
i wreszcie - sformatuj porządnie kod, bo to co tu prezentujesz to jeden wielki śmietnik.

0
ŁF napisał(a)

bo to się robi sprawdzając rozszerzenie pliku, a nie jego content/type.
content/type jest przysyłany przez przeglądarkę użytkownika i zależy od jego dobrych chęci i konfiguracji systemu. jeśli ma złe zamiary, to wyśle plik php z content/type=image/jpeg i zrobi z Twoim serwisem co tylko będzie chciał.

poza tym - użyj debugera albo chociaż wypisz sobie do którego miejsca dochodzi kod zanim przestanie działać zgodnie z zamierzeniami.
nie używaj tabelek do layoutu! od tego są elementy div/span/ul/li/p i css.
nie możesz liczyć na MAX_FILE_SIZE, to - ponownie - tylko dobra wola użytkownika, zresztą AFAIK żadna przeglądarka nie respektuje tego pola.
i wreszcie - sformatuj porządnie kod, bo to co tu prezentujesz to jeden wielki śmietnik.

  1. To jest mój kod ja się w nim ort! piszę dla siebie i tak jest dla mnie dobrze więc jedna ort! mniej.
  2. kod html jest z gotowego szablonu i dobrze działa nic się nie ort! więc jest dobrze
  3. Co do MAX_FILE_SIZE to było tylko dla testu uzyte i d.bobrze pokazywało rozmiar uploadowanego pliku więc nie masz chyba racji z tym formatem to na wielu strona zobaczyłem że tak ma być jak zrobiłem na innym forum twierdzili że jest dobrze dawali poprawki ale i te nie zadziałały. WIęc licze że ktoś tutaj pomoże a nie tylko z krytykuje coś co jest nie istotne dla sprawy !
0
ŁF napisał(a)

nie możesz liczyć na MAX_FILE_SIZE, to - ponownie - tylko dobra wola użytkownika, zresztą AFAIK żadna przeglądarka nie respektuje tego pola.

mylisz się, to nie przeglądarki mają respektować to pole tylko php i to robi
możesz sprawdzić - jeżeli php dostanie to pole nie zapisuje pliku do tempa tylko posyła go prosto do nulla a rekord w tablicy $_FILES zawiera pole 'error' ustawione na '2' (UPLOAD_ERR_FORM_SIZE)
oszczędza to miejsce na dysku i chyba jakieś tam zasoby w postaci ramu i czasu procesora też - co może oszczędzić wrogich ataków na stabilność serwera

transferu niestety nie oszczędza bo protokół HTTP jest tak skonstruowany że httpd musi klienta wysłuchać do końca, żeby móc mu odpowiedzieć

aha, MAX_FILE_SIZE musi być pierwszy w formie (a przynajmniej PRZED polem typu file) bo inaczej php dostanie go po pliku i dopiero wtedy zacznie respektować (plik już będzie zapisywany na dysku, czyli nie będzie się to niczym różniło od skasowania z poziomu skryptu .php)

także dodawanie MAX_FILE_SIZE nie jest totalnie bez sensu - ale nie powinno oczywiście zastąpić sprawdzania już w skrypcie php

aha - *wrogich, amatorskich ataków (bo oczywiście można to pole wywalić)

0
istrd__ napisał(a)
  1. To jest mój kod ja się w nim ort! piszę dla siebie i tak jest dla mnie dobrze więc jedna ort! mniej.
  2. kod html jest z gotowego szablonu i dobrze działa nic się nie ort! więc jest dobrze
  3. Co do MAX_FILE_SIZE to było tylko dla testu uzyte i d.bobrze pokazywało rozmiar uploadowanego pliku więc nie masz chyba racji z tym formatem to na wielu strona zobaczyłem że tak ma być jak zrobiłem na innym forum twierdzili że jest dobrze dawali poprawki ale i te nie zadziałały. WIęc licze że ktoś tutaj pomoże a nie tylko z krytykuje coś co jest nie istotne dla sprawy !

nie spinaj się tak. napisałem co jest powodem błędu, napisałem jak możesz to rozwiązać, wytknąłem olbrzymią dziurę w bezpieczeństwie tego, co napisałeś, a ty się jeszcze wozisz. dziecko, trafiłeś na tą stronę, bo nie umiesz czegoś zrobić i szukasz porady u osoby bardziej doświadczonej, więc bądź tak miły i posłuchaj porad kogoś takiego.

ad 1) to, że się w nim orientujesz o niczym nie świadczy - zamiast robić od razu dobrze (lub chociaż poprawnie) tworzysz u siebie złe nawyki. potem będziesz musiał je zmienić, bo żadna osoba odpowiedzialna za projekt nie przyjęłaby takiego kodu.
ad 2) to, że kod jest z szablonu ponownie o niczym nie świadczy. żaden szablon nie musi być poprawny, ten jak widać nie jest - jakby był poprawny, to by działał. nic się nie rozjeżdża? a jeśli samochód jedzie, chociaż dymi, rzęzi i ściąga go w lewą stronę, to znaczy, że wszystko jest dobrze? staraj się poznać zasady dobrego programowania i stosować się do nich, a nie tworzyć własne i jeszcze w dodatku być bezkrytycznym w stosunku do nich.
ad 3) max_file_size nie pokazuje rozmiaru pliku (cóż, pewnie twoja "literówka"), a "format" (zakładam, że masz na myśli content type) nie ma z nim kompletnie nic wspólnego. kłócisz się, chociaż najwyraźniej nie wiesz, co to takiego i z tego powodu nie zrozumiałeś mojego wyjaśnienia problemu. zrozum: to, co sprawdzasz, jest definiowane na komputerze użytkownika (pod windows w rejestrze systemu - np. HKEY_CLASSES_ROOT\jpeg@Content Type); nic nie stoi na przeszkodzie, żeby user dodał klucz .php i wpisał w nim @Content Type=image/jpeg, wtedy będzie mógł uploadować pliki php do twojego systemu. z tego samego powodu nie możesz zakładać, że user będzie mieć wpisy w rejestrze dla tych wszystkich plików - dla pliku png może mieć np. picture/png - i co?

przeczytaj uważniej moją poprzednią odpowiedź, bo rozwiązuje twój problem i być może kilka przyszłych. a jak zadajesz pytania, to słuchaj odpowiedzi.

@gfsdgdfsg: jeśli plik jest i tak uploadowany, to w jaki sposób może oszczędzać jakiekolwiek zasoby (ewentualnie poza dyskiem)? jeśli user może zrobić z wartością takiego pola cokolwiek, to i tak trzeba oprogramować sprawdzanie rozmiaru po stronie serwera. do tego maksymalny rozmiar pliku pojawi się w dwóch miejscach i po jakimś czasie obie liczby mogą się rozjechać (w dobrze napisanym kodzie nie ma to znaczenia, w złym ktoś wpisze dwie liczby z palca, a ktoś inny zapomni poprawić). do tego trzeba sprawdzać na dwa sposoby status uploadu (czy php nie zwrócił błędu i czy plik faktycznie nie przekracza dopuszczalnego rozmiaru). zgadzam się, dla profesjonalnie napisanego kodu nie ma to większego znaczenia, ale akurat php jest bardzo popularne wśród początkujących programistów, którzy robią wiele prostych błędów (patrz kod z pierwszego posta) i nie rozumieją wielu rzeczy. z tego powodu uważam, że używanie max_file_size jest źródłem drobnych dziur w zabezpieczeniach, a content/type obecne w $_FILES pośrednio tworzy dziury tak groźne, że nie powinno być w ogóle obecne w tej strukturze.

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