[PHP] Hoe omgaan met uploaden afbeeldingen

Pagina: 1
Acties:

Onderwerpen


Acties:
  • 0 Henk 'm!

  • robertpNL
  • Registratie: Augustus 2003
  • Niet online
Oké, pak de zweep maar en sla mij maar hard als je kan als dit toch eerder is gevraagd, maar toch wil ik het proberen.

Ik vraag mij af hoe ik nou om moet gaan met geuploaded afbeeldingen via een POST. Zo heb ik voor een website een besloten gedeelte waar men bij een nieuwsbericht een afbeelding kan uploaden. Deze wordt dan in een openbare directory geupload (dus bijvoorbeeld /web/images).

Dit bevalt mij niet en ik heb geen flauw idee hoe ik hier het beste mee om moet gaan. Naast het feit dat men kan surfen naar www.xyz.nl/images om alle afbeeldingen te zien (oke, kan ik blokkkeren met een .htaccess file), vraag ik mij af of men deze bestanden via een andere weg kan wijzigen of verwijderen. Want om de afbeeldingen op te slaan, moest ik de chmod voor de directory wijzigen naar 'change'.

Nu ben ik een beetje gaan surfen en lezen, maar er werden voorbeelden gegevens om de bestanden in een directory op te slaan in een niet-openbare map (dus /images bv). Maar dan zou ik met een stream deze bestanden moeten sturen naar de browser? Klopt dit ? Of moet dit op een andere manier?

Maar is het niet handiger om geuploaded afbeeldingen in de mysql database op te slaan? Of zitten hier grote nadelen aan.

Dus alles bij elkaar is mijn vraag, hoe gaan jullie hier mee om. Wat is nou slim?

Acties:
  • 0 Henk 'm!

Verwijderd

Afbeeldingen kun je het beste gewoon opslaan in een publieke dir. Publiek betekend dan gewoon dat iedereen het lezen kan. Je kunt de bestanden alleen wijzigen als je ook echt op de server kan dmv FTP, SSH of telnet (oid).

Opslaan in een database heeft zijn voordelen, maar het is trager.

Ik sla zelf de foto's op, op de harde schijf en rename ze naar een hash + extensie. Die hash staat in de database, samen met de extensie, breedte/hoogte en evt de size. Je moet alleen even een functie bouwen die de foto weer verwijderd op het moment dat je ze weggooid uit je db.

Acties:
  • 0 Henk 'm!

  • Michali
  • Registratie: Juli 2002
  • Laatst online: 29-05 22:54
Ik neem aan dat je niet vraagt naar hoe je een bestand moet uploaden met move_uploaded_file of copy dus daar geef ik dan ook geen antwoord voor :P.

Je kunt hebt met php inderdaad de mogelijkheid om images out te putten naar de browser. Je moet daarvoor in de src attribuut van de img tag een link naar een php bestand geven die dan het plaatje output. Je kunt het Content-Type (mime) van een plaatje opvragen met getimagesize:
PHP:
1
2
3
4
5
$size = getimagesize($image_file);
header("Content-Type: " . $size['mime']);
$fp = fopen($image_file, "r");
print fwrite($fp, filesize($image_file));
fclose($fp);

Dit is hoe je het oplost als de bestanden simpel weg in een directory zet. Je kan ze inderdaad ook in de database zetten, maar daar schijnen wel nadelen aan te zitten. Vooral als de database wat groter wordt kan het een beetje traag worden. Je kunt ook gewoon voor de midden weg gaan. De naam, content-type, breedte, hoogte en bestandsnaam ed. in de database opslaan en zo via een ID naar een plaatje in de directory verwijzen. ipv image.php?file=blaat.jpg zou je dan image.php?id=12 kunnen krijgen. Maar dan is verder natuurlijk wat je zelf gemakkelijker vind om mee te werken. Met die ID's geef je wel weer minder info weg.

Noushka's Magnificent Dream | Unity


Acties:
  • 0 Henk 'm!

  • djluc
  • Registratie: Oktober 2002
  • Laatst online: 14:28
Voor wat extra info kun je ook eens de info over safe mode van PHP lezen. Deze zorgt namelijk vaak nog voor wat problemen. Zo geeft het vaak problemen om bestanden die via ftp zijn geplaatst te verwijderen e.d.

Acties:
  • 0 Henk 'm!

  • Luppie
  • Registratie: September 2001
  • Laatst online: 14-08 07:27

Luppie

www.msxinfo.net

Misschien heb je hier iets aan. Dit is een soortgelijk projectje :

http://celerondude.com/index.php?a=s&id=1

Heb je iets aan mijn antwoord ? Een thumbs-up wordt zeker op prijs gesteld.