Jag vill ha ett bilduppladdningsscript som är säkert och som funkar i så många fall som möjligt med vissa begränsningar ;) Det som saknas i det jag knåpat ihop hittills är: maxstorlek MB, maxstorlek pixlar, check så att endast .jpg eller .gif tillåts samt att man ska kunna skicka med ett meddelande. Det går inte att hämta form-info från textfält och spara direkt till databas när man kör multiform-data-grej va? Eller är jag kvar i ASP-banor nu då man fick göra på ett speciellt sätt..?
Jag funderar även på hur svårt det är att ordna så att väldigt stora filer sparas om till mindre format direkt i uppladdningen. Har sett att en rad sidor använder det systemet. Vilket är mycket smart då långt ifrån alla vet hur man sparar om en fil till rätt storlek osv.
Blir glad för alla förslag hur jag kan utveckla mitt script :) Eller en länk till ett bra bilduppladdningsscript, trådar om samma ämne osv :) Min kod hittills. (så hoppas vi att wF inte gör om den allt för mycket...)
if(isset($_FILES['userfile']))
{
// mappen där filerna ska hamna
$upload_dir = 'bilder/';
// kolla om en fil har blivit angiven
if(empty($_FILES['userfile']['name']))
die('Var god välj en fil att ladda upp!');
// flytta filen
if(is_uploaded_file($_FILES['userfile']['tmp_name']))
move_uploaded_file($_FILES['userfile']['tmp_name'],$upload_dir.$_FILES['userfile']['name']);
// skriv ut ett meddelande
echo "<b>Filen ".$_FILES['userfile']['name']." har laddats upp!</b><br><br>Sökväg till bilden: \"bilder/".$_FILES['userfile']['name'];
}
// Ta bort STORA bokstäver mellanslag å ä och ö
$_FILES["userfile"]["name"] = strtolower($_FILES["userfile"]["name"]);
$_FILES["userfile"]["name"] = str_replace(' ', '_', $_FILES["userfile"]["name"]);
$_FILES["userfile"]["name"] = str_replace('å', 'a', $_FILES["userfile"]["name"]);
$_FILES["userfile"]["name"] = str_replace('ä', 'a', $_FILES["userfile"]["name"]);
$_FILES["userfile"]["name"] = str_replace('ö', 'o', $_FILES["userfile"]["name"]);
$fil_storlek = $_FILES['userfile']['size'];
$fil_typ = substr($_FILES["userfile"]["name"], -4, 4);
// Godkänn storleken (307200 bytes = 300 kb)
if ($fil_storlek > 307200) {
$reg_error[] = 0;
}
// Godkänn filändelsen
if ($fil_typ != ".jpg" && $fil_typ != ".gif" && $fil_typ != "jpeg") {
$reg_error[] = 1;
}
// errorlista
$error_list[0] = "Bilden är för stor. Får max vara 300kb.";
$error_list[1] = "Bilden är av fel filtyp. Måste vara JPG, JPEG eller GIF.";
$error_list[2] = "Bilden är för bred. Får max vara 600px.";
$error_list[3] = "Bilden är för hög. Får max vara 600px.";
if (isset($reg_error)){
// Någon uppgift är fel, skriv ut felmeddelande...
echo "Något blev fel:<br>\n";
echo "<ul>\n";
for ($i=0; $i<sizeof($reg_error); $i++) {
echo "<li>{$error_list[$reg_error[$i]]}</li>\n";
}
echo "</ul>\n";
echo "<br><a href=\"javascript:history.back()\">Tillbaka</a>\n";
exit;
}
Att skicka med information från samma formulär är inga problem även om det formuläret är satt till enctype="multipart/form-data"
Jag menar. Det händer väl att det laddas upp filer utan ändelse i filnamnet. Och om den bara går på ändelsen så kan man väl ladda upp nån annan typ av fil fast med t ex .jpg som ändelse? Vilket inte vore så lyckat.
Ja, jag har läst otaliga artiklar och forumsinlägg ang hur man bäst kollar filtyp, och alla har haft olika syner på saken.
Så vilket sätt som är bäst vet jag faktiskt inte.