Ik heb een upload script.
Maar nu heb ik het probleem als ik een plaatje upload vb jeroen.jpg en enkele dagen later load ik nog eens een ander plaatje met de naam jeroen.jpg
vervangt hij deze.
Is het mogelijk elk plaatje een unieke naam te geven?
of is dit niet mogelijk
alvast bedankt
PHP Code:
<?php
// A list of permitted file extensions
$allowed = array('png', 'jpg', 'gif','zip');
if(isset($_FILES['upl']) && $_FILES['upl']['error'] == 0){
$extension = pathinfo($_FILES['upl']['name'], PATHINFO_EXTENSION);
if(!in_array(strtolower($extension), $allowed)){
echo '{"status":"error"}';
exit;
}
if(move_uploaded_file($_FILES['upl']['tmp_name'], 'uploads/'.$_FILES['upl']['name'])){
echo '{"status":"success"}';
exit;
}
}
echo '{"status":"error"}';
exit;
- Php rename
-
24-01-2015, 22:46 #1
- Berichten
- 161
- Lid sinds
- 13 Jaar
Php rename
-
-
25-01-2015, 09:25 #2
- Berichten
- 153
- Lid sinds
- 14 Jaar
Re: Php rename
Ik zou ze gewoon opslaan onder hun hash, dus MD5 of SHA1
-
25-01-2015, 09:55 #3
- Berichten
- 115
- Lid sinds
- 11 Jaar
Re: Php rename
Even servertijd in je naam opnemen ofzo en anders een check of het bestand al bestaand zo ja + 1 toevoegen
-
25-01-2015, 10:08 #4
- Berichten
- 153
- Lid sinds
- 14 Jaar
Re: Php rename
En wat nou als je een aantal uploads op hetzelfde moment krijgt? Wat nou als twee uploads tegelijk concluderen dat 'plaatje.jpg' al bestaat en naar 'plaatje2.jpg' gaan schrijven? Je creëert race-condities met zo' n aanpak, ik zou dat afraden. Je creëert ook allemaal vervelend recursief werk, je moet immers rekening houden met het geval dat een gegenereerde bestandsnaam met nummer al bestaat.
Ik zou er echt voor kiezen om op te slaan onder de hash van de bestandsnaam, dan ben je er in een keer goed van af. Ik zou dan gelijk voor SHA gaan, dan is de kans op collisions afgerond 0.
-
25-01-2015, 10:27 #5
- Berichten
- 115
- Lid sinds
- 11 Jaar
Re: Php rename
En 2 keer de zelfde naam in hash is nogsteeds 2 keer de zelfde uitkomst tenzij je er een nog een extra waarde bij doet die uniek is zoals servertijd
-
25-01-2015, 10:28 #6
- Berichten
- 153
- Lid sinds
- 14 Jaar
Re: Php rename
Ah, misschien had ik wat explicieter moeten zijn: Ik bedoelde natuurlijk een hash van de bestandsinhoud, niet van de bestandsnaam. Anders werkt het inderdaad voor geen meter. ;)
PS: De servertijd is echt niet uniek bij grotere bezoekersaantallen, ik zou daar niet op steunen. Voor niet cyrptografische toepassingen, zou ik dan eerder keizen voor de functie 'uniqueid()' van PHP zelf.
-
25-01-2015, 13:40 #7
- Berichten
- 31
- Lid sinds
- 13 Jaar
Re: Php rename
Wat het script ook nodig heeft is extra security checks, je controleert op dit moment alleen
de extensie. Maar zie nergens dat de mime info en header info wordt gecontroleerd. Ik zou
dit wel doen anders is je website zo lek als een mandje.
-
26-01-2015, 05:34 #8
- Berichten
- 1.263
- Lid sinds
- 16 Jaar
Re: Php rename
Ah, misschien had ik wat explicieter moeten zijn: Ik bedoelde natuurlijk een hash van de bestandsinhoud, niet van de bestandsnaam. Anders werkt het inderdaad voor geen meter. ;)
PS: De servertijd is echt niet uniek bij grotere bezoekersaantallen, ik zou daar niet op steunen. Voor niet cyrptografische toepassingen, zou ik dan eerder keizen voor de functie 'uniqueid()' van PHP zelf.
Je komt niet heel snugger over zo...
-
26-01-2015, 07:10 #9
- Berichten
- 153
- Lid sinds
- 14 Jaar
Re: Php rename
Bedankt voor je opbouwende kritiek...
Uniqueid() heeft een tweede parameter die je zou helpen op een uniek id uit te moeten komen. Ik heb er overigens zelf geen ervaring mee. Zelf zou ik voor een GUUID gaan, of gewoon de hash van de file content.Laatst aangepast door Henry Been : 26-01-2015 om 07:16
-
26-01-2015, 10:13 #10
64BitsWebhosting.EU
- Berichten
- 2.085
- Lid sinds
- 18 Jaar
Re: Php rename
Het ligt er ook een beetje aan hoeveel images het worden. Elke server kan traag worden op het moment dat je een heleboel (vele duizenden) images in 1 directory hebt.
Nu zal dit hier misschien niet het geval zijn, maar mocht je het tegenkomen, dan is het handig om de images direct in een (random) subdirectory op te slaan.
Dan kun je met de diepte van die subdir structuur (bv images/ab/cd/ef/naam.jpg) een beetje spelen en een goede inschatting maken hoeveel images je in het diepste nivo gaat krijgen.
In dat geval kun je eventueel nog besluiten om het image onder zijn eigen naam op te slaan, omdat de kans dat 2 exact dezelfde images in dezelfde subdir komen erg klein kan zijn. Indien je met een nivo van amper 3 levels hebt met max 256 subdirs zit je al op 1:16 miljoen.
Je zult dan natuurlijk wel die bucket (ab/cd/ef) ergens in je database moeten bijhouden bij de metadata van je image.
Wij gebruiken dit op marktplaatsen met ruim 150 miljoen foto's en ik heb nog geen collision gezien.
Plaats een
- + Advertentie
- + Onderwerp
Marktplaats
Webmasterforum
- Websites algemeen
- Sitechecks
- Marketing
- Domeinen algemeen
- Waardebepaling
- CMS
- Wordpress
- Joomla
- Magento
- Google algemeen
- SEO
- Analytics
- Adsense
- Adwords
- HTML / XHTML
- CSS
- Programmeren
- PHP
- Javascript
- JQuery
- MySQL
- Ondernemen algemeen
- Belastingen
- Juridisch
- Grafisch ontwerp
- Hosting Algemeen
- Hardware Info
- Offtopic