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

Permalänk

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."; } } ?>

Permalänk
Medlem
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));

Visa signatur

AW3423DW QD-OLED - Ryzen 5800x - MSI Gaming Trio X 3090 - 64GB 3600@cl16 - Samsung 980 Pro 2TB/WD Black SN850 2TB

Permalänk
Medlem

@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.

Visa signatur

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

Permalänk
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.

Permalänk
Medlem

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.

Visa signatur

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 8700K, Antec kühler 620, Asus ROG Strix Z370-I Gaming, Corsair Vengeance RGB DDR4-2666 2x16GB RAM, ASUS GTX 1070

Permalänk
Medlem

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

Visa signatur

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!