Nur jpg Upload erlauben

aargau

Erfahrenes Mitglied
Hallo Zusammen,

Ich möchte mit folgendem Script Arbeiten. jedoch möchte ich das man nur JPG Uploaden kann. Kann mir jemand helfen was ich da machen muss? Und ist dies algemein sicher?

PHP:
<?php
require('config.php');
$mb = $b_max/1048576;
$mb = round($mb, 2);

if($upw=="1"){
if(isset($_POST['sendfiles'])){
if($_POST['pwd'] != $pw){
	include("header.php");
	echo "<table width=\"100%\" cellpadding=\"0\" cellspacing=\"0\">
	<tr><td align=\"center\">
	<span class=\"grossschrift\">
	<b>Dateien hochladen</b>
	</span>
	</td></tr>
	<tr><td width=\"100%\" align=\"center\">
	<span class=\"grossschrift\">
	<br>
	Das Passwort fehlt oder ist falsch!<br>
	<br>
	<a href=\"javascript:history.back(1)\" class=\"kleinlink\">&#171 zurück</a>
	<meta http-equiv=\"refresh\" content=\"5; URL=http://www.arne-home.de/index.html\">
	<br><br>
	</td></tr>
	</table>";
	include("footer.php");
	exit;}
	}
}

if($_GET['action'] == 'inhalt') {
	include("header.php");
	echo "<table width=\"100%\" cellpadding=\"0\" cellspacing=\"0\">
	<tr><td align=\"center\">
	<span class=\"grossschrift\"><b>Inhalt des Uploadordners</b></span>
	</td></tr>
	<tr><td width=\"100%\" align=\"center\"><br>";
		$verz=opendir (''.$_SERVER[DOCUMENT_ROOT].'/'.$pfad.'/.');
		while ($File = readdir ($verz)) {
		if($File != '.' && $File != '..' && $File != '.htaccess') {
		echo "<table cellpadding=\"0\" cellspacing=\"0\" width=\"50%\"><tr><td><span class=\"grossschrift\">";
		if($dl_link==1){
			echo "<img width=\"11\" height=\"11\" src=\"./img/li.gif\" alt=\"\" name=\"li\"><a href=\"$pfad/$File\" target=\"_blank\" class=\"grosslink\"> $File</a>";
			}
			else{
				echo "<span class=\"grossschrift\"><img width=\"11\" height=\"11\" src=\"./img/li.gif\" alt=\"\" name=\"li\"> $File</span>";
				}
		echo "</td></tr></table>";}
	   	}
	echo "<br><a href=\"javascript:history.back(-1)\" class=\"kleinlink\">&#171 zurück</a><br><br><a href=\"http://www.arne-home.de\" class=\"kleinlink\" target=\"_blank\">Upload v1.0.3 &copy by Arne</a><br><br></td></tr></table>";
	include("footer.php");
	exit;
}

include("header.php");
?>
<table width="100%" cellpadding="0" cellspacing="0">
<tr><td align="center">
<span class="grossschrift">
<b>Dateien hochladen</b>
</span>
</td></tr>
<tr><td width="100%" align="center">
<span class="grossschrift">
<br>
Die Datei darf nicht größer als <?php echo "$mb"; ?> MB sein.<br>
Wieviele Dateien sollen hochgeladen werden?</span><br>
<br>
<?php if($inhalt==1){ echo "<a href=\"index.php?action=inhalt\" class=\"grosslink\"><b>Inhalt des Uploadordners</b></a><br>";} ?>
<br>
            <form action="<?echo $PHP_SELF ?>" method="post">
<select name="numfiles" class="select"><?php
for ($i=1; $i<=$dateien; $i++) {
echo ("<option value=$i>$i");
}
?></select>
<input type="Submit" value="Anzahl festlegen" name="up" class="button"><br>            </form>
<form enctype="multipart/form-data" method="post" action="<?echo $PHP_SELF ?>">
<?php
if (isset($_POST['up'])){
	echo "<span class=\"grossschrift\"><b>$numfiles</b> ";
	echo $_POST['numfiles'] == '1' ? 'Datei kann' : 'Dateien können';
	echo ' hochgeladen werden.</span><p>';
	for ($i=1; $i<=$_POST['numfiles']; $i++){
		echo "<input type=\"File\" name=\"myfile$i\" class=\"input\"><br>\n";}
		if($upw==1){echo'<br><span class="grossschrift">Passwort</span> <input type="password" name="pwd" class="input">';}
		echo '<br><input type="Submit" name="sendfiles" value="hochladen" class="button"><br><br><a href="http://www.arne-home.de" class="kleinlink" target="_blank">Upload v1.0.3 &copy by Arne</a>';}
if (isset($_POST['sendfiles'])){
	$numsendfiles = count($HTTP_POST_FILES);
	foreach($HTTP_POST_FILES as $strFieldName => $arrPostFiles){
    if ($arrPostFiles['size'] > $b_min && $arrPostFiles['size'] < $b_max){
			$strFileName = $arrPostFiles['name'];
			$strFileTemp = $arrPostFiles['tmp_name'];
			@copy ($strFileTemp, "$_SERVER[DOCUMENT_ROOT]/$pfad/$strFileName");
			echo "<br><span class=\"grossschrift\"><font color=green><b>Datei $strFileName erfolgreich  hochgeladen.</b></font></span><br>";}
	   		else{
	   		echo "<br><span class=\"grossschrift\"><font color=red><b>Die Datei muß größer als $b_min Bytes und kleiner als $mb MB sein!</b></font></span><br>";}
	}
	if ($upmail==1) {
		$ip = $_SERVER["REMOTE_ADDR"];
		$subject = "Upload auf Homepage";
		$body .= "Datum: ".date("d.m.Y, H:i:s")." Uhr\n";
		$body .= "IP: $ip\n";
		$body .= "$numsendfiles Datei(en) wurden hochgeladen\n";
		$body .= $arrPostFiles['name'];
		$body .= "$user";
		@mail($email, $subject, $body, "From: $email");}
}
?>
<br>
</form>
</td></tr>
</table>
 
Hi

mach das einmal so.


PHP:
$type = $_FILES['formulas-datei-name']['type'];  
if($type != "image/pjpeg") { 
    echo "es dürfen nur jpeg Dateien hochgeladen werden."; 
    return 0;
}


Das ist relativ sicher.

sagmal hast du deine Hompage deshalb vom netz genommen?

mfg mike4004
 
Zuletzt bearbeitet:
Hi

dann mach es so.

PHP:
$str = $_FILES['file']['name'];
$str = strtolower($str);
$extension = strrchr($str, '.'); 
if ($extension != "jpeg") {


	//....... 

	}

ich würde dir empfehlen die Datei mit copy($_FILES['file']['tmp_name'], "0rdner/".$_FILES['file']['name']);

ins verzeichniss zu verschieben denn selbest wenn der Dateiname gefälscht ist bekommt die neue Datei die Richtige Endung also jpeg und der php interpreter führt die jpegs nicht aus!

mfg mike
 
Zuletzt bearbeitet:
Hi

dann mach es so.

PHP:
$str = $_FILES['file']['name'];
$str = strtolower($str);
$extension = strrchr($str, '.'); 
if ($extension != "jpeg") {
     //....
}
Hallo,
also ich würde mich da nicht auf die Dateierweiterung verlassen, sondern lieber mit der [phpf]getimagesize[/phpf] Funktion prüfen, ob es sich auch ganz sicher um ein Bild handel.
Wenn du nicht weißt, wie das funktioniert, dann such mal ein wenig im Forum, da findest du bestimmt etwas. ;)

mfg
forsterm
 
Hallo Zusammen, danke für die Antworten. Werde mir das ganze später noch anschauen, bin momentan noch an etwas anderem dran.

sagmal hast du deine Hompage deshalb vom netz genommen?

Nin, hab sie weg genommen weil ich sie eigenlich erst per 24.Dez. Online Stellen will, und ein Server wechsel wird es sehr warscheinlich auch noch geben.


Güsse
Marco

Edit:

Ojee, nun habe ich das nächste Problemchen ;) Ich weis nicht wohin ich den Code schreiben muss. hab ihn mal eingesetzt, aber nach dem hat es alles verschoben (allso Tabellen)
 
Zuletzt bearbeitet:
Da ich nun doch noch einiges im Script geändert habe bearbeite ich diesen beitrag Komplett. Das neue Script macht nun folgendes:

Bild in Originalgrösse in Ordner Laden -> Ohne löschen Verkleinrt in 2. Ordner legen -> Bild ausgabe.

Nun fehlt mir nur noch eines und zwar das ich ein Mail Bekomme wen jemand ein Bild Uploadet. In diesem Mail sollte dan Folgendes sein:

- IP Des Senders
- (Datum / zeit)
- Geuploadetes Bild

Leider habe ich keine ahnung wie man Mails Versendet...

Hier noch das Script im Ganzen wie es derzeit aussieht:

PHP:
<?php if(isset($_POST['send']) && $_POST['send'] == "ja")  
{ $uploaddir = 'upload/user/';  
if (move_uploaded_file($_FILES['picture1']['tmp_name'], $uploaddir . $_FILES['picture1']['name']))  
{  

print "1 Bild erfolgreich hochgeladen.  

\n"; }  
else  
{  
print "Kein Bild hochgeladen";  
}  
}  
?>

<?  
// Datei auf Grösse kontrollieren  

$maxsize = 1044000; // KB  
$maxsize = $maxsize * 1024; // Umwandlung in Byte  

if ($_FILES['picture1']['size'] > $maxsize)  
{  
header ("location: index.php?seite=fehler"); exit;  
}  

// Datei verschieben  



$dir = "upload/";  

if ($_FILES['picture1']['size'] > "0")  
{  

$filename = $_FILES['picture1']['name'];  

move_uploaded_file ($picture, "$dir$filename");  
chmod ("$uploaddir$filename", 0777);  
}  

// Datei auf Typ kontrollieren und wenn nötig wieder löschen  

$fileinfos = getimagesize("$uploaddir$filename");  
$type = $fileinfos[2]; // 2 = JPG  

if ($type != 2)  
{  
unlink("$dir$filename"); // Löschen  
header ("location: index.php"); exit;  
}  

// Thumbnail erstellen  
//////////////////////  

// Anmerkungen:  
//  
// $dir = Pfad für das Verzeichnis, in dem sich das upgeloadete Bild befindet  
// $filename = dateiname.jpg  

// Größe des Bildes auslesen  

$size = getimagesize("$uploaddir$filename");  
$width = $size[0];  
$height = $size[1];  

// Breite des Thumbnails festlegen (Höhe wird automatisch angepasst)  

$width_tn = 500;  
$height_tn = intval($height * $width_tn / $width);  

// Bei GD < 2.0.1: ImageCreateTrueColor -> ImageCreate, ImageCopyResampled -> ImageCopyResized  

$picture = ImageCreateFromJPEG("$uploaddir$filename");  
$picture_tn = ImageCreateTrueColor($width_tn,$height_tn);  
ImageCopyResampled($picture_tn,$picture,0,0,0,0,$width_tn,$height_tn,$width,$height);  

// Endung "_tn" bei Dateiname hinzufügen, vor ".jgp"  

$filename = explode (".", $filename);  
$tn = ".";  

// Thumbnail in $dir mit angepasstem $filename speichern, JPG Qualität: 95  

ImageJPEG($picture_tn,"$dir$filename[0]$tn$filename[1]",85);  

?>
</p>
<p>Dein Bild:<br><img src="<? echo"$dir$filename[0]" ?>" border="0"></p>

Nagut, Mail habe ich hinbekommen, nun geht alles bis auf wenn ein falsches Format Hochgeladen wird geht es nicht so ganz wie es sollte. Anstelle von der Information das Kein Bild hochgeladen worden seie kommen X Feher das es ein ungültigs Bild ist usw... Hier nochmals die Jetztige Datei mit der Mail Funktion:

PHP:
<?php if(isset($_POST['send']) && $_POST['send'] == "ja")  
{ $uploaddir = 'img/upload/';  
if (move_uploaded_file($_FILES['picture1']['tmp_name'], $uploaddir . $_FILES['picture1']['name']))  
{  

print "1 Bild erfolgreich hochgeladen.  

\n"; }  
else  
{  
print "Kein Bild hochgeladen";  
}  
}  
?>
<?  
// Datei auf Grösse kontrollieren  

$maxsize = 1044000; // KB  
$maxsize = $maxsize * 1024; // Umwandlung in Byte  

if ($_FILES['picture1']['size'] > $maxsize)  
{  
header ("location: index.php?seite=fehler"); exit;  
}  

// Datei verschieben  



$dir = "img/userpic/";  

if ($_FILES['picture1']['size'] > "0")  
{  

$filename = $_FILES['picture1']['name'];  

move_uploaded_file ($picture, "$dir$filename");  
chmod ("$uploaddir$filename", 0777);  
}  

// Datei auf Typ kontrollieren und wenn nötig wieder löschen  

$fileinfos = getimagesize("$uploaddir$filename");  
$type = $fileinfos[2]; // 2 = JPG  

if ($type != 2)  
{  
}  

// Thumbnail erstellen  
//////////////////////  

// Anmerkungen:  
//  
// $dir = Pfad für das Verzeichnis, in dem sich das upgeloadete Bild befindet  
// $filename = dateiname.jpg  

// Größe des Bildes auslesen  

$size = getimagesize("$uploaddir$filename");  
$width = $size[0];  
$height = $size[1];  

// Breite des Thumbnails festlegen (Höhe wird automatisch angepasst)  

$width_tn = 500;  
$height_tn = intval($height * $width_tn / $width);  

// Bei GD < 2.0.1: ImageCreateTrueColor -> ImageCreate, ImageCopyResampled -> ImageCopyResized  

$picture = ImageCreateFromJPEG("$uploaddir$filename");  
$picture_tn = ImageCreateTrueColor($width_tn,$height_tn);  
ImageCopyResampled($picture_tn,$picture,0,0,0,0,$width_tn,$height_tn,$width,$height);  

// Endung "_tn" bei Dateiname hinzufügen, vor ".jgp"  

$filename = explode (".", $filename);  
$tn = ".";  

// Thumbnail in $dir mit angepasstem $filename speichern, JPG Qualität: 95  

ImageJPEG($picture_tn,"$dir$filename[0]$tn$filename[1]",85);  
?>
<?
		$empfaenger ="info@";
		$betreff ="UPLOAD VON $ip";
		$from = "From: MV Upload <info@>";
		$ip = $_SERVER["REMOTE_ADDR"];
		$subject = "Upload auf Homepage";
		$body .= "Datum: ".date("d.m.Y, H:i:s")." Uhr\n";
		$body .= "IP: $ip\n";
		$body .= "";
		$body .= $filename['0'];
		$body .= "";
mail($empfaenger, $betreff, $body, $from);
?>
<br><br><img src='<? echo"$dir$filename[0]" ?>' border="0">&nbsp;</p>
(@wurde absichtlich gelöscht)
 
Zuletzt bearbeitet:
Zurück