PHP fil-uppladningsscript, ignorera versal/gemener i filändelse?

Trädvy Permalänk
Medlem
Plats
Playa del Björnlunda
Registrerad
Mar 2007

PHP fil-uppladningsscript, ignorera versal/gemener i filändelse?

Håller på och försöker lära mig lite html och php och så hittade jag ett enkelt filuppladdningsscript på en PHP guide sida. Provade mig fram och det fungerar. MEN den tillåter enbart filändelse med små bokstäver. Exempelvis fungerar .jpg, men inte JPG.

Hur löser man detta? Vet att det finns "Case Insensitive" men förstår inte hur detta skall implementeras.

Scriptet ser ut såhär idag:

<?php $target_dir = "uploads/"; $target_file = $target_dir . basename($_FILES["fileToUpload"]["name"]); $uploadOk = 1; $imageFileType = pathinfo($target_file,PATHINFO_EXTENSION); // Check if image file is a actual image or fake image if(isset($_POST["submit"])) { $check = getimagesize($_FILES["fileToUpload"]["tmp_name"]); if($check !== false) { echo "File is an image - " . $check["mime"] . "."; $uploadOk = 1; } else { echo "File is not an image."; $uploadOk = 0; } } // Check if file already exists if (file_exists($target_file)) { echo "Sorry, file already exists."; $uploadOk = 0; } // Check file size if ($_FILES["fileToUpload"]["size"] > 5000000) { echo "Sorry, your file is too large."; $uploadOk = 0; } // Allow certain file formats if($imageFileType != "jpg" && $imageFileType != "png" && $imageFileType != "jpeg" && $imageFileType != "gif" && $imageFileType != "ai" && $imageFileType != "eps" && $imageFileType != "pdf" ) { echo "Sorry, only JPG, JPEG, PNG, GIF, AI, EPS & PDF files are allowed."; $uploadOk = 0; } // Check if $uploadOk is set to 0 by an error if ($uploadOk == 0) { echo "Sorry, your file was not uploaded."; // if everything is ok, try to upload file } else { if (move_uploaded_file($_FILES["fileToUpload"]["tmp_name"], $target_file)) { echo "The file ". basename( $_FILES["fileToUpload"]["name"]). " has been uploaded."; } else { echo "Sorry, there was an error uploading your file."; } } ?>

Trädvy Permalänk
Medlem
Plats
Stockholm
Registrerad
Aug 2009
Skrivet av SupaBeast:

Håller på och försöker lära mig lite html och php och så hittade jag ett enkelt filuppladdningsscript på en PHP guide sida. Provade mig fram och det fungerar. MEN den tillåter enbart filändelse med små bokstäver. Exempelvis fungerar .jpg, men inte JPG.

Hur löser man detta? Vet att det finns "Case Insensitive" men förstår inte hur detta skall implementeras.

Scriptet ser ut såhär idag:

<?php $target_dir = "uploads/"; $target_file = $target_dir . basename($_FILES["fileToUpload"]["name"]); $uploadOk = 1; $imageFileType = pathinfo($target_file,PATHINFO_EXTENSION); // Check if image file is a actual image or fake image if(isset($_POST["submit"])) { $check = getimagesize($_FILES["fileToUpload"]["tmp_name"]); if($check !== false) { echo "File is an image - " . $check["mime"] . "."; $uploadOk = 1; } else { echo "File is not an image."; $uploadOk = 0; } } // Check if file already exists if (file_exists($target_file)) { echo "Sorry, file already exists."; $uploadOk = 0; } // Check file size if ($_FILES["fileToUpload"]["size"] > 5000000) { echo "Sorry, your file is too large."; $uploadOk = 0; } // Allow certain file formats if($imageFileType != "jpg" && $imageFileType != "png" && $imageFileType != "jpeg" && $imageFileType != "gif" && $imageFileType != "ai" && $imageFileType != "eps" && $imageFileType != "pdf" ) { echo "Sorry, only JPG, JPEG, PNG, GIF, AI, EPS & PDF files are allowed."; $uploadOk = 0; } // Check if $uploadOk is set to 0 by an error if ($uploadOk == 0) { echo "Sorry, your file was not uploaded."; // if everything is ok, try to upload file } else { if (move_uploaded_file($_FILES["fileToUpload"]["tmp_name"], $target_file)) { echo "The file ". basename( $_FILES["fileToUpload"]["name"]). " has been uploaded."; } else { echo "Sorry, there was an error uploading your file."; } } ?>

Bara ändra

$imageFileType = pathinfo($target_file,PATHINFO_EXTENSION);

till

$imageFileType = mb_strtolower(pathinfo($target_file,PATHINFO_EXTENSION));

7900x @ 4,7ghz - 1080ti @ 2100

Trädvy Permalänk
Medlem
Plats
Östhammar
Registrerad
Sep 2008

@SupaBeast:

Du ska kunna använda funktionen strtolower för att få det att fungera. Redigera 5e raden så den ser ut som nedan.
strtolower gör om strängen till gemener, i exemplet nedan görs det om till gemener innan det sparas i variabeln $imageFileType.

$imageFileType = strtolower(pathinfo($target_file,PATHINFO_EXTENSION));

Mer info om funktionen:
http://php.net/manual/en/function.strtolower.php

edit: to slow... såg också att mb_strtolower antagligen är bättre när jag läsate på om den på php.net, den ska tydligen även klara ÅÄÖ, vilket vad jag förstår att strtolower inte gör.

I'd rather hate you, for everything you are
Then ever love you, for something you are not

Trädvy Permalänk
Medlem
Plats
Playa del Björnlunda
Registrerad
Mar 2007
Skrivet av celoz:

Bara ändra

$imageFileType = pathinfo($target_file,PATHINFO_EXTENSION);

till

$imageFileType = mb_strtolower(pathinfo($target_file,PATHINFO_EXTENSION));

Skrivet av zekel:

@SupaBeast:

Du ska kunna använda funktionen strtolower för att få det att fungera. Redigera 5e raden så den ser ut som nedan.
strtolower gör om strängen till gemener, i exemplet nedan görs det om till gemener innan det sparas i variabeln $imageFileType.

$imageFileType = strtolower(pathinfo($target_file,PATHINFO_EXTENSION));

Mer info om funktionen:
http://php.net/manual/en/function.strtolower.php

edit: to slow... såg också att mb_strtolower antagligen är bättre när jag läsate på om den på php.net, den ska tydligen även klara ÅÄÖ, vilket vad jag förstår att strtolower inte gör.

Tack för svaren "strtolower" fungerade perfekt.

Kanske kan ni svara på hur jag får scriptet att fungera med t.ex ai, eps, pdf som jag försökt lägga till? Dessa får jag bara svar av scriptet att de inte är riktiga bildfiler.

Trädvy Permalänk
Medlem
Plats
Uppsala
Registrerad
Jan 2007

Jag är ingen programmerare, men det är här du vill ta en titt i koden:

$imageFileType = pathinfo($target_file,PATHINFO_EXTENSION); // Check if image file is a actual image or fake image if(isset($_POST["submit"])) { $check = getimagesize($_FILES["fileToUpload"]["tmp_name"]); if($check !== false) { echo "File is an image - " . $check["mime"] . "."; $uploadOk = 1; } else { echo "File is not an image."; $uploadOk = 0; }

Koden tittar i filen för att avgöra om det är en bild eller något annat. Min gissning är att du behöver skapa något som tar hand om detta när det inte är en bild eller göra en annan koll beroende på filändelsen.

HTPC - Bygglogg; http://www.sweclockers.com/album/?id=2902
HTPC - Galleri; http://www.sweclockers.com/galleri/6562-htpc-galleribilder
42U - Bygglogg; http://www.sweclockers.com/galleri/7862-42u-rackskap-i-hemmet
i7 920, Antec kühler 620, Asus P6T-Deluxe, Corsair Dominator 6*2GB 1600Mhz, XFX Core Edition 750W, Nvidia GTX 770

Trädvy Permalänk
Medlem
Plats
Stockholm
Registrerad
Maj 2009

om filen laddas upp med namn öster_2015 så måste du använda mb_strtolower annars kommer det antingen inte se fint ut eller krascha, minns inte vad som händer. vanliga strtolower har inte support för utf-8, mb_strtolower har det däremot

Min dator: Silent Base 600 | 1700X @ 3.9Ghz | MSI Gaming X 1080TI | RM750X | 512Gb M2 | 16Gb 3200mhz Ram | S34E790C @ 3440x1440
Tjejens dator: Define r4 | i5 3570k @ 4.2ghz | GTX Titan | 750w Supernova | 240gb SSD | 32gb ram
Citera/Tagga för svar!