• Apfeltalk ändert einen Teil seiner Allgemeinen Geschäftsbedingungen (AGB), das Löschen von Useraccounts betreffend.
    Näheres könnt Ihr hier nachlesen: AGB-Änderung
  • Viele hassen ihn, manche schwören auf ihn, wir aber möchten unbedingt sehen, welche Bilder Ihr vor Eurem geistigen Auge bzw. vor der Linse Eures iPhone oder iPad sehen könnt, wenn Ihr dieses Wort hört oder lest. Macht mit und beteiligt Euch an unserem Frühjahrsputz ---> Klick

Dateiendung (jpg, jpeg, png, usw.) beim Upload ändern

ThisIsBeat

Empire
Registriert
02.02.16
Beiträge
85
Hallo Community,

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

$upload_folder = 'upload/'; //Das Upload-Verzeichnis
$filename = "bild_user".$userid;
$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));
}
 
//Alles okay, verschiebe Datei an neuen Pfad
move_uploaded_file($_FILES['datei']['tmp_name'], $new_path);
echo 'Bild erfolgreich hochgeladen, zur&uumlck zur <a href="loogin.php">Startseite</a>';
?>

Also wie bereits in der Überschrift erwähnt möchte ich die Dateiendung jeder hochgeladenen Datei verändern. Jedes hochgeladene Bild soll die Endung .jpg tragen.

Wie ihr im Script sehen könnt beinhaltet die Variable $extension die Endung der hochgeladenen Datei. Ich habe bereits einiges probiert und teilweise hatte es auch geklappt. Bspw. wenn man JPEG Dateien hochgeladen hatte so wurde eine Änderung zu JPG vorgenommen.
Das Format PNG hingegen ließ sich bis jetzt noch nicht umändern.

Ich habe im Netzt recherchiert und bin dabei auf folgendes gestoßen:
Code:
substr_replace($file , 'png', strrpos($file , '.') +1)

Angeblich soll es damit möglich sein die Endung zu verändern doch leider weiß ich in keinsterweise wie ich das ganze in mein Script einbauen muss.

Wäre wirklich super wenn jemand ne Ahnung hätte und mir da weiter helfen könnte :D
 

ottomane

Golden Noble
Registriert
24.08.12
Beiträge
16.384
Eine Datei wird nicht zu einer .jpg-Datei, wenn man nur die Dateinamenserweiterung ändert. Das interne Binärformat ist unterschiedlich.

Wenn du also eine .png-Datei in .jpg umbenennst, hast du immer noch eine .png-Datei, die nur falsch benannt ist.

...falls ich dein Vorhaben richtig verstanden habe.
 

ThisIsBeat

Empire
Registriert
02.02.16
Beiträge
85
@ottomane Ja genau. Es geht mir tatsächlich nur um den Namen. Das interne Binärformat darf ruhig unterschiedlich sein.

Hintergrund:
Beim Auslesen der Dateien ist es für mich einfacher wenn alle hochgeladenen Bilder ein und die selbe Endung haben.
 

ottomane

Golden Noble
Registriert
24.08.12
Beiträge
16.384
Erstaunlich, aber warum nicht ,;)

Bei dem PHP-Problem muss dann leider jemand anders helfen.
 

ThisIsBeat

Empire
Registriert
02.02.16
Beiträge
85
@ottomane aber hey wenn du einen anderen Lösungsansatz hättest wäre ich dir trotzdem sehr dankbar. Mir geht es darum jede Datei auf einen Nenner zu bringen :)
 

mafri

Osnabrücker Reinette
Registriert
30.08.10
Beiträge
976
Vorweg: Ich habe keine Ahnung von php
Wenn ich Deinen Code richtig verstehe ermittelst Du die tatsächliche Extension und merkst sie Dir in $extension
Dann baust Du in $new_Patch den neuen Dateinamen für den Upload zusammen, verwendest hier aber wieder die Original $extension Wenn Du hier konstant .jpg (oder was immer Du haben willst...) verwendest müsste das doch gehen, oder?

Wenn nicht, siehe Zeile eins :eek:
 

ThisIsBeat

Empire
Registriert
02.02.16
Beiträge
85
@mafri genau das habe ich eben auch gedacht. Das ganze funktioniert soweit auch, außer es werden PNG Dateien hochgeladen. Diese behalten ihre Endung :/ Trotzdem Danke :)
 

ThisIsBeat

Empire
Registriert
02.02.16
Beiträge
85
@NorbertM Nun ja, wenn du weißt was ich mache wirst du es eventuell verstehen :)

Code:
<?php
$zahlen = array('', '1', '2', '3', '4', '5', '6', '7', '8', '9', '10');

$zahl[0] = '';
$zahl[] = '1';
$zahl[] = '2';
$zahl[] = '3';
$zahl[] = '4';
$zahl[] = '5';
$zahl[] = '6';
$zahl[] = '7';
$zahl[] = '8';
$zahl[] = '9';
$zahl[] = '10';
 
foreach($zahlen as $zahl) {
    $test1 = "http://192.168.178.61/PHPversion/upload/bild_user" . $userid . $zahl.".jpg";
    if (@getimagesize($test1)) {
        echo "<img class='bild' src='".$test1."' alt='Bild' style='width: 50%; min-width: 100px; max-width: 300px; border-radius: 5px;   border-style: double; border-color: gray; border-width: 1px; margin-left: 40px; margin-top: 25px; height: 300px; margin-bottom: 25px; box-shadow: 0px 8px 20px 0px gray; cursor: pointer; '>";
    } else {
        echo "";
    }
}
?>

Auf meiner Website gibt es diesen Code zum auslesen der Dateien. Das ganze funktioniert wirklich super aber auch nur dann wenn es sich um eine jpg Datei handelt. Für jedes andere einzelne Dateiformat muss ich einen identischen Code erzeugen damit auch diese Bilder ausgegeben werden.

Soweit so gut. Wenn ich das nun aber mache, kommt die Reihenfolge der hochgeladenen Bilder durcheinander...

Wie du in meinem Upload-Script ganz oben sehen kannst werden identische Bilder mit einer Zahl versehen und dabei hochgezählt. Das ganze klappt aber auch nur dann wenn bspw. nur JPG Dateien hochgeladen werden. Für PNG Bilder und alle andere Dateien läuft eine eigene Zählung die genau das selbe wie bei den JPG Dateien macht.

Ich hoffe es ist klar geworden was ich mir dabei denke. Wenn du einen Lösungsansatz hättest wäre ich dir sehr dankbar ;)
 

ThisIsBeat

Empire
Registriert
02.02.16
Beiträge
85
@mafri ja genau. PNG ist das einzige Dateiformat das sich von sowas nicht beeinflussen lässt :/