| PHP Developer Forum Hier habt ihr die Möglichkeit, eure Skriptprobleme mit anderen Anwendern zu diskutieren. Seid so fair und beantwortet auch Fragen von anderen Anwendern. Dieses Forum ist sowohl für ANFÄNGER als auch für PHP-Profis! Post your PHP questions here! |
 |

15-06-2006, 18:38
|
|
Natheedo
Newbie
|
|
Registriert seit: Aug 2005
Beiträge: 54
|
|
[PHP5] PHP Upload nur jpg und gif erlauben !?!
Hallo,
ich hab hier ein kleines Privates Upload Skript das ich für paar Sachen auf meinem Webserver nutze, das auch soweit für meine Ansprüche gerecht ist - Nur sind mir in den letzten Tagen vermehrt Dateien aufgefallen die ich nicht hochgeladen habe - Besonders eine "cookie_overflow.php" ...
Das bereitet mir jetzt allmählich Kopfschmerzen, das ich an das Sicherheitsrisiko nicht eher gedacht hab.
Darum ist die Frage, wie ich mein Upoadscript so ergänze (hab vom php selber schreiben leider keine Ahnung) das man lediglich .jpg und .gif. Dateien damit hochladen kann?
Hier das Script :
PHP-Code:
<?php
## pfad von dieser datei aus wo das hochgeladen werden soll
$dir = "../pics/vorlagenpics/bildupload";
$url = "[URL="http://www.DOMAIN.de"]http://www.DOMAIN.de[/URL]";
if($_POST['uppen']){
if(!empty($_FILES['file']['name'])){
// Tmp_name
$tempname = $_FILES['file']['tmp_name'];
$tempname2 = $_FILES['file2']['tmp_name'];
$tempname3 = $_FILES['file3']['tmp_name'];
// Namen der dateien
$name = str_replace(" ","_",$_FILES['file']['name']);
$name2 = str_replace(" ","_",$_FILES['file2']['name']);
$name3 = str_replace(" ","_",$_FILES['file3']['name']);
// typen der dateien
$type = $_FILES['file']['type'];
$type2 = $_FILES['file2']['type'];
$type3 = $_FILES['file3']['type'];
// groeße der dateien
$size = $_FILES['file']['size'];
$size2 = $_FILES['file2']['size'];
$size3 = $_FILES['file3']['size'];
// Dateien kopieren
@copy("$tempname", "$dir/$name");
@copy("$tempname2", "$dir/$name2");
@copy("$tempname3", "$dir/$name3");
// Ueberpruefung
$f1 = file_exists($dir."/".$name);
$f2 = file_exists($dir."/".$name2);
$f3 = file_exists($dir."/".$name3);
if($f1) {
$output = $url."/pics/vorlagenpics/bildupload/".$name;
$ausgabe = htmlentities(stripslashes($output));
}else echo "Upload von Datei 1 fehlgeschlagen!<br>";
if($f2){
$output2 = $url."/pics/vorlagenpics/bildupload/".$name2;
$ausgabe2 = htmlentities(stripslashes($output2));
}else echo "Upload von Datei 2 fehlgeschlagen!<br>";
if($f3){
$output3 = $url."/pics/vorlagenpics/bildupload/".$name3;
$ausgabe3 = htmlentities(stripslashes($output3));
}else echo "Upload von Datei 3 fehlgeschlagen!<br>";
}else echo "Datei muss gewählt werden<br>";
}
#echo "<form enctype=\"multipart/form-data\" action=\"?do=up\" method=\"post\">";
if(isset($output) || isset($output2) || isset($output3)){
if(!empty($name))
echo "<input type=\"text\" size=\"80\" name=\"file\" value=\"$ausgabe\"> <img src=\"pics/haken.gif\" border=\"0\" alt=\"\"><br>";
if(!empty($name2))
echo "<input type=\"text\" size=\"80\" name=\"file2\" value=\"$ausgabe2\"> <img src=\"pics/haken.gif\" border=\"0\" alt=\"\"><br>";
if(!empty($name3))
echo "<input type=\"text\" size=\"80\" name=\"file3\" value=\"$ausgabe3\"> <img src=\"pics/haken.gif\" border=\"0\" alt=\"\"><br>";
}else{
echo "<input type=\"file\" size=\"80\" name=\"file\"><br>";
echo "<input type=\"file\" size=\"80\" name=\"file2\"><br>";
echo "<input type=\"file\" size=\"80\" name=\"file3\"><br>";
}
echo "<br><input type=\"submit\" name = \"uppen\" value=\"Hochladen\"> <span class=\"rot\"> <— Bild auswählen dann auf hochladen klicken!</span>";
?>
Wäre vielleicht bitte jemand so nett und könnte mir da auf die Sprünge helfen?
Ich hab schon folgendes versucht :
PHP-Code:
// Tmp_name
$tempname = $_FILES['file']['tmp_name'];
if(strtolower(substr($tempname, -4)) == ".gif" || strtolower(substr($tempname, -4)) == ".jpg")
{
echo "Dateiendung erlaubt...";
} else {
echo "Dateiendung nicht erlaubt...";
}
$tempname2 = $_FILES['file2']['tmp_name'];
if(strtolower(substr($tempname2, -4)) == ".gif" || strtolower(substr($tempname2, -4)) == ".jpg")
{
echo "Dateiendung erlaubt...";
} else {
echo "Dateiendung nicht erlaubt...";
}
$tempname3 = $_FILES['file3']['tmp_name'];
if(strtolower(substr($tempname3, -4)) == ".gif" || strtolower(substr($tempname3, -4)) == ".jpg")
{
echo "Dateiendung erlaubt...";
} else {
echo "Dateiendung nicht erlaubt...";
}
Allerdings bringt er mir jetzt 3 mal "Dateiendung nicht erlaubt..." und ladet auch nix hoch !?!
Hm ... Irgendwas schein ich verkehrt gemacht zu haben!
Danke !
Natheedo
Geändert von Natheedo (15-06-2006 um 18:50 Uhr)
|

15-06-2006, 19:12
|
|
Slava
PHP Senior
|
|
Registriert seit: Nov 2002
Ort: Köln->Karlsruhe
Beiträge: 1.583
|
|
1)warum suchst du deine endung in $_FILES['file']['tmp_name']; ?
wie wäre es mit dem echo oder print_r($_FILES['file'])?
|

15-06-2006, 19:16
|
 |
onemorenerd
 Moderator
|
|
Registriert seit: Mar 2005
Ort: Berlin
Beiträge: 9.481
|
|
Re: [PHP5] PHP Upload nur jpg und gif erlauben !?!
PHP-Code:
$allowed_ext = array('gif', 'jpg', 'jpeg')
foreach ($_FILES as $file) {
$name = str_replace(' ', '_', $file['name']);
$ext = strtolower(substr($name, strrpos($name, '.')+1));
if (!in_array($ext, $allowed_ext)) {
echo 'Dateiendung '.$ext.' nicht erlaubt!<br />';
echo 'Datei '.$file['name'].' wurde verworfen!<br />';
continue;
}
if (!move_uploaded_file($file['tmp_name'], $dir.'/'.$name)) {
echo 'Fehler beim Hochladen der Datei '.$file['name'].'!<br />';
continue;
}
echo 'Upload der Datei '.$file['name'].' erfolgreich!<br />';
}
|

15-06-2006, 19:30
|
|
Natheedo
Newbie
|
|
Registriert seit: Aug 2005
Beiträge: 54
|
|
Re: Re: [PHP5] PHP Upload nur jpg und gif erlauben !?!
Zitat:
Original geschrieben von onemorenerd
PHP-Code:
$allowed_ext = array('gif', 'jpg', 'jpeg')
foreach ($_FILES as $file) {
$name = str_replace(' ', '_', $file['name']);
$ext = strtolower(substr($name, strrpos($name, '.')+1));
if (!in_array($ext, $allowed_ext)) {
echo 'Dateiendung '.$ext.' nicht erlaubt!<br />';
echo 'Datei '.$file['name'].' wurde verworfen!<br />';
continue;
}
if (!move_uploaded_file($file['tmp_name'], $dir.'/'.$name)) {
echo 'Fehler beim Hochladen der Datei '.$file['name'].'!<br />';
continue;
}
echo 'Upload der Datei '.$file['name'].' erfolgreich!<br />';
}
|
Hm da bekomme ich lediglich einen :
Zitat:
|
Parse error: parse error, unexpected T_FOREACH on line 176
|
Hab ich jetzt was falsch gemacht? Hab dein Script 1:1 so übernommen !?!
Natheedo
|

15-06-2006, 19:37
|
 |
onemorenerd
 Moderator
|
|
Registriert seit: Mar 2005
Ort: Berlin
Beiträge: 9.481
|
|
Vor dem foreach fehlt ein Semikolon.
Aber du wirst gleich in die nächste Fehlermeldung rasseln, denn wenn du mit dieser einfachen nicht klarkommst, kannst du unmöglich wissen, wie und wo du den Codeschnipsel richtig einbauen mußt.
Aber bevor du jetzt fragst, empfehle ich dir erstmal einen tiefen Blick ins Handbuch ( http://php.net/manual). Es enthält auch einen Abschnitt über Fileuploads.
|

15-06-2006, 19:41
|
|
Slava
PHP Senior
|
|
Registriert seit: Nov 2002
Ort: Köln->Karlsruhe
Beiträge: 1.583
|
|
wo ist die 176-te Zeile?
aber ich vermute schon, dass du $_FILES erst mit print_r ausgeben muss.
dieser script wird nur dann funktionieren, wenn du mehrere dateien absendest(glaube ich)
du muss der script auch für den fall vorbereiten, dass es keine oder eine datei angekommen ist
|

15-06-2006, 19:47
|
|
Natheedo
Newbie
|
|
Registriert seit: Aug 2005
Beiträge: 54
|
|
Die 176te Zeile war die 2te Zeile von onemorenerd.
Gut aber wenns so oder so net geht, weil wie du Slava richtig erkannt hast, auch mal nur eine oder eben gar keine absende - Naja muss ich es wohl dabei belassen wie es ist - Dachte das wäre ein kleineres Problem und hab gehofft das mir jemand den Codeschnipsel fertig präsentiert. Weil ich eben noch nicht wirklich PHP kann.
Trotzdem danke !
Natheedo
|

15-06-2006, 20:05
|
|
Slava
PHP Senior
|
|
Registriert seit: Nov 2002
Ort: Köln->Karlsruhe
Beiträge: 1.583
|
|
und ein wenig experementieren?
PHP-Code:
function filecopy($file){
$allowed_ext = array('gif', 'jpg', 'jpeg');
$name = str_replace(' ', '_', $file['name']);
$ext = strtolower(substr($name, strrpos($name, '.')+1));
if (!in_array($ext, $allowed_ext)) {
echo 'Dateiendung '.$ext.' nicht erlaubt!<br />';
echo 'Datei '.$file['name'].' wurde verworfen!<br />';
continue;
}
if (!move_uploaded_file($file['tmp_name'], $dir.'/'.$name)) {
echo 'Fehler beim Hochladen der Datei '.$file['name'].'!<br />';
continue;
}
echo 'Upload der Datei '.$file['name'].' erfolgreich!<br />';
}
$daten=array('file','file2','file3');
foreach($daten as $d){
if(isset($_FILES[$d]))filecopy($_FILES[$d]);
}
|

15-06-2006, 20:24
|
|
Natheedo
Newbie
|
|
Registriert seit: Aug 2005
Beiträge: 54
|
|
Danke aber auch das ging nicht :
Zitat:
Warning: move_uploaded_file() [function.move-uploaded-file]: open_basedir restriction in effect. File(/foto2.jpg) is not within the allowed path(s): (/var/www/html/web108/html/:/var/www/html/web108/phptmp/:/var/www/html/web108/files/:/var/www/html/web108/atd/) in /var/www/html/web108/html/vorlagen/allgemein.php on line 184
Fehler beim Hochladen der Datei foto2.jpg!
Fatal error: Cannot break/continue 1 level in /var/www/html/web108/html/vorlagen/allgemein.php on line 186
|
Wie gesagt ist aber auch net schlimm, ich werds einfach so lassen, bevor sich hier jemand erstmal intensiv damit beschäftigen muss, nur weil ichs nicht kann.
Natheedo
|
|
Aktive Benutzer in diesem Thema: 1 (Registrierte Benutzer: 0, Gäste: 1)
|
|
|
| Themen-Optionen |
|
|
| Thema bewerten |
|
|
Forumregeln
|
Es ist Ihnen nicht erlaubt, neue Themen zu verfassen.
Es ist Ihnen nicht erlaubt, auf Beiträge zu antworten.
Es ist Ihnen nicht erlaubt, Anhänge hochzuladen.
Es ist Ihnen nicht erlaubt, Ihre Beiträge zu bearbeiten.
HTML-Code ist aus.
|
|
|
|
PHP News
|