PhP rename file
CJay
- php
1 Felix Riesterer
0 Xileks0 bubble
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
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.
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.
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