Uploader plików - wrzuca zawartość strony źródłowej do plików

0

Witam!

Mam problem ze swoim uploader'em. Mianowicie, pliki typu zdjęcia, muzyka, rar/zip wrzuca bez problemu. Problem pojawia się przy wrzucaniu plików tekstowych, typu php/css/txt itd. Na końcu tych plików umieszcza mi kod źródłowy mojej strony, nie mam pojęcia czemu. Mój kod wygląda tak:

if ( !isset($_POST['wrzucaj']) )
{
	$body = '<div style="margin-left: 150px;"><form enctype="multipart/form-data" action="upload.php" method="POST">  
	<input name="plik" width="300" type="file">
	<input type="submit" name="wrzucaj" value="Wgraj">
	</form></div>';
	require_once('page_header.php');
	echo $body;
	require_once('page_footer.php');
	exit;
}
else if ( isset($_POST['wrzucaj']) )
{
	$u_plik = $_FILES['plik']['tmp_name'];
	$u_nazwa = $_FILES['plik']['name']; 
	$u_rozmiar = $_FILES['plik']['size'];
	$u_max_rozmiar = 2*1024*1024; //Maksymalny rozmiar pliku dozwolony do wgrania a bajtach - w przykladzie 2MB
	$rozszerzenie = pathinfo($u_nazwa, PATHINFO_EXTENSION);
	if($u_rozmiar > $u_max_rozmiar)
	{
		require_once('page_header.php');
		echo "Plik jest zbyt duzy!";  
		require_once('page_footer.php');
	}
	else if(is_uploaded_file($u_plik))
	{
		$name = str_replace(' ', '_', $u_nazwa);
		$nazwa = str_replace('.'.$rozszerzenie, '', $name);
		$file_name = $nazwa . '_' . generate_id();
		$file_name_roz = $nazwa . '_' . generate_id() . '.' . $rozszerzenie;
		$id_del = generate_id_delete();
		var_dump($file_name_roz);
		if (move_uploaded_file($u_plik, "upload/$file_name_roz") == TRUE )
		{
			$sql = "INSERT INTO `download` (`file_name`, `file_name_type`, `id_to_delete`) VALUES ('".$file_name."', '".$file_name_roz."', '".$id_del."')";
			$result = mysql_query($sql)
				or die("Nie udalo sie dodac pliku");
			require_once('page_header.php');
			echo "Plik: <b>" . $u_nazwa . "</b> (" . $u_rozmiar . " B) został uploadowany!<br>Link do downloadu: <input type='post' style='width: 400px;' onMouseOver='this.focus(); this.select()' style='cursor: pointer;' onClick='window.open(this.value);' value='" . selfURL() . "/upload/upload.php?download=".$file_name."'><br>Kod na forum: <input type='post' style='width: 400px;' onMouseOver='this.focus(); this.select()' style='cursor: pointer;' onClick='window.open(this.value);' value='[code]" . selfURL() . "/upload/upload.php?download=".$file_name."[/code]'><br>Link do usuniecia: <input type='post' style='width: 400px;' onMouseOver='this.focus(); this.select()' style='cursor: pointer;' onClick='window.open(this.value);' value='" . selfURL() . "/upload/upload.php?delete=".$id_del."'>";
			require_once('page_footer.php');
		}
		else
		{
			require_once('page_header.php');
			echo "Niespodziewany błąd";
			require_once('page_footer.php');
		}
	}
}

Chodzi o ten pierwszy warunek - cała zawartość tego warunku, ląduje w plikach na dole. Dlaczego tak jest? Nikt nie potrafi mi pomóc, a ja sam nie mam pojęcia o co chodzi :/

Pozdr.

0

Doszedłem do jednej rzeczy. Plik tylko przy pobieraniu ma ten badziew. Jak z FTP pobiorę to nie ma tego HTMLa w pliku. Wniosek, ze błąd jest tutaj:

if ( isset($_GET['download']) )
{
	$file_id = htmlspecialchars($_GET['download']);
	$sql = "SELECT * FROM `download` WHERE file_name = '".$file_id."'";
	$result = mysql_query($sql)
		or die("Nie udalo sie pobrac danych");
	$num = mysql_num_rows($result);
	if ( $num > 0 )
	{
		$row = mysql_fetch_assoc($result);
		header('Content-Type: application/x-unknown');
		header('Content-Disposition: attachment; filename="'.$row['file_name_type'].'"');
		readfile('./upload/'.$row['file_name_type'].'');
	}

Tylko gdzie, czemu?

0

Ot kod wykonuje się dalej. Nie pokazałeś całości to Ci nie pokażę gdzie.
Możesz po prostu po readfile(..) dopisać die() i też będzie.

0

Działa, super, dzięki.

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