De extentie van een file
Ik heb een kleine vraag.
Als ik een video of foto upload en deze in een post meegeef, Hoe lees ik dan van die post af welke extentie die file heeft?
bijv: ik upload test.jpg
$_POST['blaat'] = 'test.jpg';
hoe kan ik dat jpg in een variable krijgen? want ik moet namelijk de soort extentie apart in de database zetten.
Bij voorbaard dank
Second. :)
end(explode(".", $_POST['blaat']))
Code (php)
1
2
3
4
2
3
4
<?php
$filename = basename($file['uploaded_file']['name']);
$ext = strtolower(substr($filename, strrpos($filename, '.') + 1));
?>
$filename = basename($file['uploaded_file']['name']);
$ext = strtolower(substr($filename, strrpos($filename, '.') + 1));
?>
Gewijzigd op 21/07/2010 12:49:51 door wesley Overdijk
pathinfo() geeft meer dan je wilt weten, en is niet eens helemaal correct ook:
Gebruik fileinfo als je echt naar de inhoud (MIME type) van een bestand wilt kijken. En zelfs dan zullen er ongetwijfeld nog mazen in de wet zitten.
gebruik de getimagesize() functie, deze zal OF een array teruggeven OF false als het geen goeie afbeelding is,
Dit kan dus heel mooi zo:
Code (php)
1
2
3
4
5
6
7
8
9
2
3
4
5
6
7
8
9
<?php
if(getimagesize($_FILES['bestand']['tmp_name'])){
// het is een goeie afbeelding! Haal de extensie maar op:
$extensie = end(explode('.', $_FILES['bestand']['name']));
// verder met je code
} else {
// fout!
}
?>
if(getimagesize($_FILES['bestand']['tmp_name'])){
// het is een goeie afbeelding! Haal de extensie maar op:
$extensie = end(explode('.', $_FILES['bestand']['name']));
// verder met je code
} else {
// fout!
}
?>
Johan Dam op 22/07/2010 08:34:04:
het MIME type is ietsjes moeilijker te neppen dan extensie,
gebruik de getimagesize() functie, deze zal OF een array teruggeven OF false als het geen goeie afbeelding is,
Dit kan dus heel mooi zo:
gebruik de getimagesize() functie, deze zal OF een array teruggeven OF false als het geen goeie afbeelding is,
Dit kan dus heel mooi zo:
Code (php)
1
2
3
4
5
6
7
8
9
2
3
4
5
6
7
8
9
<?php
if(getimagesize($_FILES['bestand']['tmp_name'])){
// het is een goeie afbeelding! Haal de extensie maar op:
$extensie = end(explode('.', $_FILES['bestand']['name']));
// verder met je code
} else {
// fout!
}
?>
if(getimagesize($_FILES['bestand']['tmp_name'])){
// het is een goeie afbeelding! Haal de extensie maar op:
$extensie = end(explode('.', $_FILES['bestand']['name']));
// verder met je code
} else {
// fout!
}
?>
Precies andersom, de MIME-type is juist hartstikke makkelijk te neppen, de extensie is wat lastiger. Door gebruik te maken van de NULL-byte kun je bij sommige systemen een extensie faken, maar niet bij allemaal.. MIME-type word namelijk met de browser meegegeven, dus die kan je veranderen. Extensie overigens ook, maar als je alleen een plaatje mag uploaden, kun je er wel code in zetten, maar die word niet uitgevoerd. (Tenzij je een heel slecht geconfigureerde server hebt...)
Alleen denk ik toch dat een extensie makkelijker te neppen is, (bestands-naam wijzigen is niet erg moeilijk immers) MIME is ook niet moeilijk, maar daar heb je in mijn ogen toch iets meer kennis voor nodig.
Maar goed, gewoon niet vertrouwen, content-sniffing is beter, ook niet water dicht maar toch beter dan MIME / extensie
Meeste upload-systemen controleren de type door te kijken naar de MIME-type, en die zijn makkelijk te faken. Dan kun je dus wél een PHP-file uploaden als plaatje (content-type: text/php veranderen naar content-type: image/jpeg) en vervolgens ook echt code uitvoeren...
Maar sowieso, waarom zou je zo'n soort controle doen op een afbeelding? (bij andere bestanden snap ik het nog) Beter is om te controleren of het echt een afbeelding is ipv te controleren of het echt een jpeg is
kan het kwaad dat zo'n bestand PHP code bevat.
Als je echt niet zeker bent ervan neem je de upload in een map buiten public_html op, en lees je deze in met readfile.