• Jetzt anmelden. Es dauert nur 2 Minuten und ist kostenlos!

Bilder Upload exif imagetype

lokoroko

Mitglied
Hallo,

ich habe aktuell ein kleines Problem mit meinem Code der zum Bilder hochladen dient. Das hochladen von Bilddateien an sich funktioniert super. Doch bei manchen Bildern kommt selten folgende Fehlermeldung:

Warning: exif_imagetype(): Filename cannot be empty in /Library/WebServer/Documents/PHPversion/Bilder_upload.php on line 39
Nur der Upload von Bilddateien ist gestattet

Hier der dazugehörige Code :)

Code:
<?php
error_reporting(E_ALL);
session_start();
if(!isset($_SESSION['userid'])) {
    die('Bitte zuerst <a href="Mac_Version1.php">einloggen</a>');
}
$userid = $_SESSION['userid'];

if(!isset($_SESSION['userprofilbild'])) {
    echo "";
}

$Kategorie = $_POST["Kategorie"];
if ($Kategorie == "0") {
    die ("<p style='font-family: Raleway; color: red; font-size: 30px;'>Bitte Kategorie auswählen, zur&uumlck zur <a href='loogin.php'>Startseite</a></p>");
}

if ($Kategorie == "Lifestyle") {
$upload_folder = 'upload/'; //Das Upload-Verzeichnis
$filename = "bild_user".$userid.$Kategorie;
$extension = strtolower(pathinfo($_FILES['datei']['name'], PATHINFO_EXTENSION));

 
//Überprüfung der Dateiendung
$allowed_extensions = array('png', 'jpg', 'jpeg', 'gif',);
if(!in_array($extension, $allowed_extensions)) {
    die("Ungültige Dateiendung. Nur png, jpg, jpeg und gif-Dateien sind erlaubt");
}
 
//Überprüfung der Dateigröße
$max_size = 4000*1024; //4000 MB
if($_FILES['datei']['size'] > $max_size) {
    die("Bitte keine Dateien größer 4mb hochladen");
}

//Überprüfung dass das Bild keine Fehler enthält
if(function_exists('exif_imagetype')) { //Die exif_imagetype-Funktion erfordert die exif-Erweiterung auf dem Server
    $allowed_types = array(IMAGETYPE_PNG, IMAGETYPE_JPEG, IMAGETYPE_GIF,);
    $detected_type = exif_imagetype($_FILES['datei']['tmp_name']);
    if(!in_array($detected_type, $allowed_types)) {
        die("Nur der Upload von Bilddateien ist gestattet");
    }
}
 
//Pfad zum Upload
$new_path = $upload_folder.$filename.'.'.$extension;
//Neuer Dateiname falls die Datei bereits existiert
if(file_exists($new_path)) { //Falls Datei existiert, hänge eine Zahl an den Dateinamen
    $Anzahl = 1;
    do {
        $new_path = $upload_folder.$filename.$Anzahl.'.'.$extension;
        $Anzahl++;
    } while(file_exists($new_path));
}
?>
<?php
// Bildtitel ist neu
$Bildtitel = $_POST["Bildtitel"];  
   
$pdo = new PDO('mysql:host=localhost;dbname=Datenbank_NEU', 'root', 'lehar456');
$statement = $pdo->prepare("INSERT INTO bildtabelle (id ,user_id, bildtitel, path, lifestyle, mode, sport, politik, timestamp) VALUES (NULL, '$userid', '$Bildtitel', '$new_path', '$new_path', '', '', '', CURRENT_TIMESTAMP)");
$statement->execute();
?>
<?php
//Alles okay, verschiebe Datei an neuen Pfad
move_uploaded_file($_FILES['datei']['tmp_name'], $new_path);
echo '<p style="font-family: Raleway;">Bild erfolgreich hochgeladen, zur&uumlck zur <a href="loogin.php">Startseite</a></p>';
}

if ($Kategorie == "Mode") {
$upload_folder = 'upload/'; //Das Upload-Verzeichnis
$filename = "bild_user".$userid.$Kategorie;
$extension = strtolower(pathinfo($_FILES['datei']['name'], PATHINFO_EXTENSION));

 
//Überprüfung der Dateiendung
$allowed_extensions = array('png', 'jpg', 'jpeg', 'gif',);
if(!in_array($extension, $allowed_extensions)) {
    die("Ungültige Dateiendung. Nur png, jpg, jpeg und gif-Dateien sind erlaubt");
}
 
//Überprüfung der Dateigröße
$max_size = 4000*1024; //4000 MB
if($_FILES['datei']['size'] > $max_size) {
    die("Bitte keine Dateien größer 4mb hochladen");
}

//Überprüfung dass das Bild keine Fehler enthält
if(function_exists('exif_imagetype')) { //Die exif_imagetype-Funktion erfordert die exif-Erweiterung auf dem Server
    $allowed_types = array(IMAGETYPE_PNG, IMAGETYPE_JPEG, IMAGETYPE_GIF,);
    $detected_type = exif_imagetype($_FILES['datei']['tmp_name']);
    if(!in_array($detected_type, $allowed_types)) {
        die("Nur der Upload von Bilddateien ist gestattet");
    }
}
 
//Pfad zum Upload
$new_path = $upload_folder.$filename.'.'.$extension;
//Neuer Dateiname falls die Datei bereits existiert
if(file_exists($new_path)) { //Falls Datei existiert, hänge eine Zahl an den Dateinamen
    $Anzahl = 1;
    do {
        $new_path = $upload_folder.$filename.$Anzahl.'.'.$extension;
        $Anzahl++;
    } while(file_exists($new_path));
}
?>
<?php
// Bildtitel ist neu
$Bildtitel = $_POST["Bildtitel"];  
   
$pdo = new PDO('mysql:host=localhost;dbname=Datenbank_NEU', 'root', 'lehar456');
$statement = $pdo->prepare("INSERT INTO bildtabelle (id ,user_id, bildtitel, path, lifestyle, mode, sport, politik, timestamp) VALUES (NULL, '$userid', '$Bildtitel', '$new_path', '', '$new_path', '', '', CURRENT_TIMESTAMP)");
$statement->execute();
?>
<?php
//Alles okay, verschiebe Datei an neuen Pfad
move_uploaded_file($_FILES['datei']['tmp_name'], $new_path);
echo '<p style="font-family: Raleway;">Bild erfolgreich hochgeladen, zur&uumlck zur <a href="loogin.php">Startseite</a></p>';
}

if ($Kategorie == "Sport") {
$upload_folder = 'upload/'; //Das Upload-Verzeichnis
$filename = "bild_user".$userid.$Kategorie;
$extension = strtolower(pathinfo($_FILES['datei']['name'], PATHINFO_EXTENSION));

 
//Überprüfung der Dateiendung
$allowed_extensions = array('png', 'jpg', 'jpeg', 'gif',);
if(!in_array($extension, $allowed_extensions)) {
    die("Ungültige Dateiendung. Nur png, jpg, jpeg und gif-Dateien sind erlaubt");
}
 
//Überprüfung der Dateigröße
$max_size = 4000*1024; //4000 MB
if($_FILES['datei']['size'] > $max_size) {
    die("Bitte keine Dateien größer 4mb hochladen");
}

//Überprüfung dass das Bild keine Fehler enthält
if(function_exists('exif_imagetype')) { //Die exif_imagetype-Funktion erfordert die exif-Erweiterung auf dem Server
    $allowed_types = array(IMAGETYPE_PNG, IMAGETYPE_JPEG, IMAGETYPE_GIF,);
    $detected_type = exif_imagetype($_FILES['datei']['tmp_name']);
    if(!in_array($detected_type, $allowed_types)) {
        die("Nur der Upload von Bilddateien ist gestattet");
    }
}
 
//Pfad zum Upload
$new_path = $upload_folder.$filename.'.'.$extension;
//Neuer Dateiname falls die Datei bereits existiert
if(file_exists($new_path)) { //Falls Datei existiert, hänge eine Zahl an den Dateinamen
    $Anzahl = 1;
    do {
        $new_path = $upload_folder.$filename.$Anzahl.'.'.$extension;
        $Anzahl++;
    } while(file_exists($new_path));
}
?>
<?php
// Bildtitel ist neu
$Bildtitel = $_POST["Bildtitel"];  
   
$pdo = new PDO('mysql:host=localhost;dbname=Datenbank_NEU', 'root', 'lehar456');
$statement = $pdo->prepare("INSERT INTO bildtabelle (id ,user_id, bildtitel, path, lifestyle, mode, sport, politik, timestamp) VALUES (NULL, '$userid', '$Bildtitel', '$new_path', '', '', '$new_path', '', CURRENT_TIMESTAMP)");
$statement->execute();
?>
<?php
//Alles okay, verschiebe Datei an neuen Pfad
move_uploaded_file($_FILES['datei']['tmp_name'], $new_path);
echo '<p style="font-family: Raleway;">Bild erfolgreich hochgeladen, zur&uumlck zur <a href="loogin.php">Startseite</a></p>';
}

if ($Kategorie == "Politik") {
$upload_folder = 'upload/'; //Das Upload-Verzeichnis
$filename = "bild_user".$userid.$Kategorie;
$extension = strtolower(pathinfo($_FILES['datei']['name'], PATHINFO_EXTENSION));

 
//Überprüfung der Dateiendung
$allowed_extensions = array('png', 'jpg', 'jpeg', 'gif',);
if(!in_array($extension, $allowed_extensions)) {
    die("Ungültige Dateiendung. Nur png, jpg, jpeg und gif-Dateien sind erlaubt");
}
 
//Überprüfung der Dateigröße
$max_size = 4000*1024; //4000 MB
if($_FILES['datei']['size'] > $max_size) {
    die("Bitte keine Dateien größer 4mb hochladen");
}

//Überprüfung dass das Bild keine Fehler enthält
if(function_exists('exif_imagetype')) { //Die exif_imagetype-Funktion erfordert die exif-Erweiterung auf dem Server
    $allowed_types = array(IMAGETYPE_PNG, IMAGETYPE_JPEG, IMAGETYPE_GIF,);
    $detected_type = exif_imagetype($_FILES['datei']['tmp_name']);
    if(!in_array($detected_type, $allowed_types)) {
        die("Nur der Upload von Bilddateien ist gestattet");
    }
}
 
//Pfad zum Upload
$new_path = $upload_folder.$filename.'.'.$extension;
//Neuer Dateiname falls die Datei bereits existiert
if(file_exists($new_path)) { //Falls Datei existiert, hänge eine Zahl an den Dateinamen
    $Anzahl = 1;
    do {
        $new_path = $upload_folder.$filename.$Anzahl.'.'.$extension;
        $Anzahl++;
    } while(file_exists($new_path));
}
               
?>
<?php
// Bildtitel ist neu
$Bildtitel = $_POST["Bildtitel"];  
   
$pdo = new PDO('mysql:host=localhost;dbname=Datenbank_NEU', 'root', 'fisch456');
$statement = $pdo->prepare("INSERT INTO bildtabelle (id ,user_id,  bildtitel, path, lifestyle, mode, sport, politik, timestamp) VALUES (NULL, '$userid', '$Bildtitel','$new_path', '', '', '', '$new_path', CURRENT_TIMESTAMP)");
$statement->execute();
?>
<?php
//Alles okay, verschiebe Datei an neuen Pfad
move_uploaded_file($_FILES['datei']['tmp_name'], $new_path);
echo '<p style="font-family: Raleway;">Bild erfolgreich hochgeladen, zur&uumlck zur <a href="loogin.php">Startseite</a></p>';
}
?>

Hat einer ne Ahnung was ich tun kann um das Problem zu beheben. Ich habs bei mir im Code schon im Kommentar stehen aber wie genau gehe ich hier bei vor ?
 

m.scatello

Senior HTML'ler
An welcher Stelle würdest du $_FILES['datei']['error'] wie einbauen ?
Also, bei deinen JavaScript-Problemen hat dir Sempervivum ja so ziemlich alles vorgekaut, ich bin da kein Freund von. Ich erwarte grundsätzlich eine gewisse Form von Eigeninitiative. Außerdem sollte man eigentlich von alleine darauf kommen, wenn man den Fehler abfangen sollte. Mal so zum nachdenken:

Macht es Sinn die Extension, die Dateigröße, etc. zu prüfen, wenn es bei dem Upload einen Fehler gegeben hat?
 

lokoroko

Mitglied
Ja macht es da, wie oben schon geschrieben, dieser Fehler nur sehr selten und bei einer bestimmten Art von Fotos auftaucht aber ansonsten alles fabelhaft funktioniert. Genau deswegen provozierte ich diesen Fehler absichtlich um herauszufinden was das Problem bei diesen Bildern ist. Das Problem hat sich aber erledigt da ich den Fehler gefunden habe :D

Du schreibst immer super viel und gerne aber deine php.net Links und deine Error-Reporting Tipps waren bisher nie wirklich hilfreich ;) Wenn du selbst nicht weißt wie man das Problem löst, dann wär es vielleicht besser nichts zu schreiben. Sempervivum ist einer der User der mit seinen Ratschlägen immer super hilft und mit dem es wirklich Spaß macht sich auszutauschen, bei dem lernt man außerdem auch was :D Ich selbst bringe mir alles selber bei und manchmal probiert man hier und da aber es will dann nicht so wie man selbst will und dann sucht man Hilfe in einem Forum :)
 

m.scatello

Senior HTML'ler
Du schreibst immer super viel und gerne aber deine php.net Links und deine Error-Reporting Tipps waren bisher nie wirklich hilfreich
Tja, dann liegt das aber an dir. Wenn du die Doku nicht verstehst und nicht richtig debuggen kannst, dann ist Programmieren nicht das richtige Hobby für dich.

Wenn du selbst nicht weißt wie man das Problem löst, dann wär es vielleicht besser nichts zu schreiben.
Haha, der ist gut! So ein popeliger Upload ist nun wirklich nichts besonderes, wenn man sich mit den Grundlagen ernsthaft auseinander setzt.

Sempervivum ist einer der User der mit seinen Ratschlägen immer super hilft
Das streite ich auch nicht ab

und mit dem es wirklich Spaß macht sich auszutauschen
Klar, besonders weil er ja sogar Quellcodes liefert und man selber weniger machen muss

aber es will dann nicht so wie man selbst will
Weil dir ganz einfach die nötigen Grundlagen fehlen und du nicht richtig debuggen kannst
 

Aaron3219

Senior HTML'ler
Ich muss m.scatello (in großen Teilen) zustimmen. m.scatello hat d
ir eine sinnvolle Hilfestellung mit Link gegeben. Wenn du sie nicht verstanden hast, ist es vielleicht trotzdem das richtige Hobby für dich, aber dann fehlen dir Grundlagen. Schau dir dann also am besten andere Links und Videos an, wie man so etwas einbindet.

Sempervivum ist einer der User der mit seinen Ratschlägen immer super hilft und mit dem es wirklich Spaß macht sich auszutauschen, bei dem lernt man außerdem auch was
Also lernen tust du dabei relativ wenig (sofern du dir! Es ist ja nur ein copy-pasten. Bringe dir doch mal bei, wie man Links, die man nicht versteht trotzdem löst (Stichwort Google/Youtube/etc.).

So zur Lösung des Problems:
$_FILES['userfile']['error'] prüft nach Fehlern beim Dateiupload. Je nach Fehler gibt es dann eine andere Fehlermeldung aus. Bei keiner Fehlermeldung gibt es UPLOAD_ERR_OK aus. Jetzt müsste eigentlich schon klar sein was gemacht werden muss. Eine if-Abfrage, ob der UPLOAD_ERR_OK ausgegeben wurde.
Code:
if ($_FILES['file']['error'] === UPLOAD_ERR_OK) {
// Wenn upload erfolgreich
} else {
// Wenn nicht erfolgreich
}
Jetzt habe ich dir den Code eigentlich schon wieder gegeben. WO der nun eingebunden werden muss, solltest du nun wirklich selber wissen!

Edit:
Mir ist gerade aufgefallen, dass EXAKT der selbe Code auf EXAKT der Seite geschrieben ist, die m.scatello eingeschickt hat (http://de2.php.net/manual/de/features.file-upload.errors.php).
Also bitte auch lesen.
 
Zuletzt bearbeitet:

lokoroko

Mitglied
Das Problem hat sich aber erledigt da ich den Fehler gefunden habe :D

So zur Lösung des Problems:
$_FILES['userfile']['error'] prüft nach Fehlern beim Dateiupload. Je nach Fehler gibt es dann eine andere Fehlermeldung aus. Bei keiner Fehlermeldung gibt es UPLOAD_ERR_OK aus. Jetzt müsste eigentlich schon klar sein was gemacht werden muss. Eine if-Abfrage, ob der UPLOAD_ERR_OK ausgegeben wurde.
Jetzt habe ich dir den Code eigentlich schon wieder gegeben. WO der nun eingebunden werden muss, solltest du nun wirklich selber wissen!

Daher vielen Dank das du nochmal daran anknüpfen wolltest aber der Fehler ist außer Welt und dein Code mir auch schon mehr als bekannt ;) Davon auszugehen das ich mir die Links nicht durchlese und diese nicht verstehe oder nur darauf warte das andere einen Code posten halte ich ohnehin für Fatal.

Wie viel ich mir bei dem Austausch mit Sempervivum notiere, aufschreibe und nebenbei noch recherchiere kann auch keiner wissen somit sollte ich am besten wissen wie viel ich dabei lerne oder ? :)

Mir muss hier keiner irgendeinen kompletten Code posten. Und wenn es für einige hier so ein Problem darstellt mal Code zu posten, etwas zu erklären oder zu erläutern dann bitte ich meine Themen in Zukunft zu ignorieren. Ich komme immer zum Ziel :D
Das soll jetzt aber auch das letzte gewesen sein das ich zu dem Thema gesagt habe :)
 
Werbung:
Oben