CJay: PhP rename file

hallo ;D

ich hab ein php script :

<?php  
$allowedExts = array("jpg", "jpeg", "gif", "png");  
$extension = end(explode(".", $_FILES["file"]["name"]));  
if ((($_FILES["file"]["type"] == "image/gif")  
|| ($_FILES["file"]["type"] == "image/jpeg")  
|| ($_FILES["file"]["type"] == "image/png")  
|| ($_FILES["file"]["type"] == "image/pjpeg"))  
&& ($_FILES["file"]["size"] < 200000000)  
&& in_array($extension, $allowedExts))  
  {  
  if ($_FILES["file"]["error"] > 0)  
    {  
    echo "Return Code: " . $_FILES["file"]["error"] . "<br>";  
    }  
  else  
    {  
    echo "Upload: " . $_FILES["file"]["name"] . "<br>";  
    echo "Type: " . $_FILES["file"]["type"] . "<br>";  
    echo "Size: " . (round(($_FILES["file"]["size"] / 1024/1024),2)) . " MB<br>";  
    echo "Temp file: " . $_FILES["file"]["tmp_name"] . "<br>";  
    if (file_exists("upload/" . $_FILES["file"]["name"]))  
      {  
      echo $_FILES["file"]["name"] . " already exists. ";  
      }  
    else  
      {  
      move_uploaded_file($_FILES["file"]["tmp_name"],  
      "upload/" . $_FILES["file"]["name"]);  
      echo "Stored in: " . "upload/" . $_FILES["file"]["name"];  
	   header("Location: index.php");  
      }  
    }  
  }  
else  
  {  
  echo "Invalid file";  
  }  
?>

indas ich eine rename  funktion einbauen wollte es aber nicht geklappt hat D;

ich möchte die File die hochgeladen wird nach dem $_POST["dname"] +endung also+  ".".$extansion benennen.
Kann einer von euch mir da weiterhelfen? ;D

  1. Lieber CJay,

    $allowedExts = array("jpg", "jpeg", "gif", "png");

    $extension = end(explode(".", $_FILES["file"]["name"]));
    if ((($_FILES["file"]["type"] == "image/gif")
    || ($_FILES["file"]["type"] == "image/jpeg")
    || ($_FILES["file"]["type"] == "image/png")
    || ($_FILES["file"]["type"] == "image/pjpeg"))
    && ($_FILES["file"]["size"] < 200000000)
    && in_array($extension, $allowedExts))
      {

      
    das ist unangenehm zu lesen und damit noch unangenehmer zu pflegen! Warum nicht lieber so?  
      
    ~~~php
    $allowed = array(  
        'image/gif'   => array('gif'),  
        'image/jpeg'  => array('jpg', 'jpeg'),  
        'image/pjpeg' => array('jpg', 'jpeg'),  
        'image/png'   => array('png')  
    );  
      
    // (array) $ext: determine file extension  
    preg_match('~[^.]+$~', $_FILES['file']['name'], $ext);  
      
    if ($_FILES['file']['size'] < 200000000  
        // MIME type OK?  
        && in_array($_FILES['file']['type'], array_keys($allowed))  
        // correct file extension for this MIME type?  
        && in_array($ext[0], $allowed[$_FILES['file']['type']])  
    ) {  
        ....  
    }
    

    An Deiner Stelle würde ich die Dateiendung selbst festlegen, egal welchen Bockmist der Uploader vielleicht selbst verursacht hat (z.B. ein jpg-Bild als GIF umbenannt o.ä.). Dazu muss man getimagesize() bemühen, da auf $_FILES[$key]['type'] kein Verlass ist!

    Damit wird das Script etwas einfacher, da man nun nur prüfen muss, ob das Bild eine Höhe und Breite größer null hat:

    $allowed = array(  
        'image/gif'   => 'gif',  
        'image/jpeg'  => 'jpg',  
        'image/pjpeg' => 'jpg',  
        'image/png'   => 'png'  
    );  
      
    $test = getimagesize($_FILES['file']['tmp_name']);  
      
    if ($_FILES['file']['size'] < 200000000  
        // MIME type OK?  
        && in_array($test['mime'], array_keys($allowed))  
        // is it a valid image file?  
        && $test[0] > 0 && $test[1] > 0  
    ) {  
        $ext = $allowed[$test['mime']];  
        ....  
    }
    

    indas ich eine rename  funktion einbauen wollte es aber nicht geklappt hat D;

    Das ist keine Problembeschreibung.

    Liebe Grüße,

    Felix Riesterer.

    --
    ie:% br:> fl:| va:) ls:[ fo:) rl:| n4:? de:> ss:| ch:? js:) mo:} zu:)
  2. ich möchte die File die hochgeladen wird nach dem $_POST["dname"] +endung also+  ".".$extansion benennen.
    Kann einer von euch mir da weiterhelfen? ;D

    Probier mal folgendes aus ob es funktioniert:

    copy($_FILES['file']['tmp_name'],'/dateiname.extension')

    /dateiname.extension entsprechend mit deinen Werten ersetzen.

  3. move_uploaded_file($_FILES["file"]["tmp_name"],
          "upload/" . $_FILES["file"]["name"]);

    Damit gibst du doch schon die Zieldatei (und damit auch ihren Namen) an.
    Sprich, einfach dein $_FILES["file"]["name"] durch den gewünschten Namen ersetzen, ggf. auch vorher noch auf Existenz einer Datei mit dem Namen teste, damit nichts überschrieben wird (ich weiß jetzt nicht genau, ob move_uploaded_file die Dateiüberschreibt, sollte aber im Handbuch nachlesbar sein).

    MfG
    bubble