[PHP] extensie van plaatje onbekend, wat is het netst?

Pagina: 1
Acties:

Onderwerpen


Acties:
  • 0 Henk 'm!

  • gizmo9003
  • Registratie: November 2000
  • Laatst online: 20-09 13:10

gizmo9003

Go For It!

Topicstarter
In een script laat ik plaatjes laden, waarbij de filename gegeneerd wordt aan de hand van gegevens uit een database. Maar de plaatjes kunnen verschillende extensies hebben (jpg, JPG, tif, etc)...

Hoe kan ik nu het netste controleren welke extensie het plaatje heeft, om deze weer te laten geven?

Ik heb zelf iets bedacht, maar heb het idee dat het netter kan. (in $filename zit de naam, zonder extensie)

code:
1
2
3
4
5
6
7
8
9
$filenamejpg = $filename . ".jpg";
$filenametif  = $filename . ".tif";

if ( is_file( $filenamejpg) )
 echo "<img ....... blabla";
else if ( is_file( $filenametif))
 echo "<img ......";

etc

tjah..


Acties:
  • 0 Henk 'm!

  • SchizoDuckie
  • Registratie: April 2001
  • Laatst online: 18-02 23:12

SchizoDuckie

Kwaak

voeg een extra kolom toe, met danwel de extensie danwel de content-type ?
Als je deze niet hebt klopt je db model niet.

Stop uploading passwords to Github!


Acties:
  • 0 Henk 'm!

  • Icelus
  • Registratie: Januari 2004
  • Niet online
Zie getimagesize en exif_imagetype functies om het bestandstype te achterhalen.

Edit: dacht dat je uploads zonder extensie binnenkreeg.
Je wilt de extensie forceren o.i.d? (Dus altijd .jpg en niet .JPG of .jpeg?)

[ Voor 24% gewijzigd door Icelus op 24-07-2008 11:50 ]

Developer Accused Of Unreadable Code Refuses To Comment


Acties:
  • 0 Henk 'm!

  • Spider.007
  • Registratie: December 2000
  • Niet online

Spider.007

* Tetragrammaton

---
Prozium - The great nepenthe. Opiate of our masses. Glue of our great society. Salve and salvation, it has delivered us from pathos, from sorrow, the deepest chasms of melancholy and hate


Acties:
  • 0 Henk 'm!

  • gizmo9003
  • Registratie: November 2000
  • Laatst online: 20-09 13:10

gizmo9003

Go For It!

Topicstarter
voeg een extra kolom toe, met danwel de extensie danwel de content-type ?
Als je deze niet hebt klopt je db model niet.
Dit is niet mogelijk. Gaat om een ledenbestand met ruim 2000 records, plaatjes zijn pasfoto's en komen random binnen. Echt een kloteklus om die 2000 records met de hand nog eens na te lopen.
Je wilt de extensie forceren o.i.d? (Dus altijd .jpg en niet .JPG of .jpeg?)
Nee, ik wil dat php in de folder kijkt, of het bestand met een bepaalde naam bestaat. Maar php weet de extensie niet, dus die zal meerdere bestanden moeten proberen.

tjah..


Acties:
  • 0 Henk 'm!

  • Noork
  • Registratie: Juni 2001
  • Niet online
Je slaat dus niet op wat voor type plaatje het is? Lijkt me wat omslachtig om elke keer de header te moeten controleren om een extensie te kiezen. Kun je beter niet direct de volledige bestandsnaam opslaan?

[edit]ah ik heb het nogmaals gelezen en begrijp het nu beter. Je wilt dus door de map loopen om te kijken of de betreffende bestandsnaam bestaat. Tja, niet echt handig (ook niet voor de performance), maar een loopje d.m.v. een array o.i.d. lijkt me het handigst. Wel zou ik dit toch in de toekomst proberen te veranderen. 2000 bestanden renamen in een loop, lijkt me geen bereklus.

Zoiets dus:
code:
1
2
3
4
5
6
$arr=array("tif", "jpg", "jpeg");
foreach ($arr as $value)
{
    if ( is_file( $filename.".".$value) )
    echo "<img ....... blabla";
}


[edit2]De glob functie die spider geeft, lijkt me veel geschikter trouwens. Kende ik nog niet.

[ Voor 67% gewijzigd door Noork op 24-07-2008 12:08 ]


Acties:
  • 0 Henk 'm!

  • MrOizo2005
  • Registratie: September 2003
  • Laatst online: 20-09 18:42
Je zou een loop kunnen maken met het gebruik van ImageMagick.
voorbeeld wat je kan doen op de linux shell.

"convert image001 image001.jpg"

Dan checked ImageMagick automatisch de huidige formaat en zet deze om naar een jpg.
Dat is het enigste wat ik me kan bedenken, alleen niet elke server heeft standaard ImageMagick

edit: lees nu het bericht door en zie dat dit niet echt hetgeen is voor de TS, wellicht kan hij hier evengoed iets mee. Ik dacht nml dat de extensie niet bekend was als in geen extentie

[ Voor 22% gewijzigd door MrOizo2005 op 24-07-2008 12:07 ]

Also known as Oizopower | When Life Gives You Questions, Google has Answers


Acties:
  • 0 Henk 'm!

  • Schonhose
  • Registratie: April 2000
  • Laatst online: 17-09 20:01

Schonhose

Retro Icoon

gizmo9003 schreef op donderdag 24 juli 2008 @ 11:57:
Echt een kloteklus om die 2000 records met de hand nog eens na te lopen.
Ja, met de hand wel. Echter, waarom geen scriptje dat loopt door de folder met images? En dan met de bovengenoemde functies: getimagesize en exif_imagetype bepalen wat het bestandstype is en deze vervolgens met een mooie update statement in de juiste rij te knallen? Ik neem aan dat je je bestandsnaam in de db hebt, dus het is een gevalletje UPDATE ... WHERE filename='$actieve_filename_uit_de_loop'
Nee, ik wil dat php in de folder kijkt, of het bestand met een bepaalde naam bestaat. Maar php weet de extensie niet, dus die zal meerdere bestanden moeten proberen.
Heb je al gekeken wat Spider.007 aandroeg?

"The thing under my bed waiting to grab my ankle isn't real. I know that, and I also know that if I'm careful to keep my foot under the covers, it will never be able to grab my ankle." - Stephen King
Quinta: 3 januari 2005


Acties:
  • 0 Henk 'm!

  • Janoz
  • Registratie: Oktober 2000
  • Laatst online: 21-09 02:21

Janoz

Moderator Devschuur®

!litemod

Mensen, het gaat hier helemaal niet om het plaatje zelf, maar om de extensie. Om 1 of andere reden heeft de topicstarter alleen maar het deel van de filenaam zonder de extensie in zijn database staan, maar in de map staan de bestanden met extensie.

Ten eerste zou ik wel voor een uitbreiding van de database pleiten. Dit betekent echter neit dat je alles handmatig bij langs moet. Als je nu een oplossing zou vinden voor het extensie probleem dan kun je die 2000 records toch ook gewoon automatisch aanpassen?

Voor het achterhalen van de extensie zou je natuurlijk ook gewoon de bestanden met een dir of ls command kunnen opvragen en dan wildcards gebruiken.

Ken Thompson's famous line from V6 UNIX is equaly applicable to this post:
'You are not expected to understand this'


Acties:
  • 0 Henk 'm!

  • gizmo9003
  • Registratie: November 2000
  • Laatst online: 20-09 13:10

gizmo9003

Go For It!

Topicstarter
Schonhose schreef op donderdag 24 juli 2008 @ 12:06:
[...]
Ja, met de hand wel. Echter, waarom geen scriptje dat loopt door de folder met images? En dan met de bovengenoemde functies: getimagesize en exif_imagetype bepalen wat het bestandstype is en deze vervolgens met een mooie update statement in de juiste rij te knallen? Ik neem aan dat je je bestandsnaam in de db hebt, dus het is een gevalletje UPDATE ... WHERE filename='$actieve_filename_uit_de_loop'

Heb je al gekeken wat Spider.007 aandroeg?
De oplossing van Spider werkt inderdaad ook. Ik ben nog aan het overwegen of ik toch niet alle volledige filenames in de database zal zetten inderdaad. Probleem is dat de pasfoto's ieder jaar aangeleverd worden in een ander formaat. Ik beheer het ledenbestand dan ook niet meer, dus de vraag is maar of de nieuwe beheerder weet hoe hij de juiste extensies in de database krijgt.

tjah..


Acties:
  • 0 Henk 'm!

  • Noork
  • Registratie: Juni 2001
  • Niet online
gizmo9003 schreef op donderdag 24 juli 2008 @ 12:12:
[...]
De oplossing van Spider werkt inderdaad ook. Ik ben nog aan het overwegen of ik toch niet alle volledige filenames in de database zal zetten inderdaad. Probleem is dat de pasfoto's ieder jaar aangeleverd worden in een ander formaat. Ik beheer het ledenbestand dan ook niet meer, dus de vraag is maar of de nieuwe beheerder weet hoe de juiste extensies in de database krijgt.
Ligt er ook aan hoe je de update regelt. Upload je de pasfoto's stuk voor stuk? Dan is het toch niet zo lastig om de volledige bestandsnaam in de db te gooien.

Acties:
  • 0 Henk 'm!

  • Icelus
  • Registratie: Januari 2004
  • Niet online
Janoz schreef op donderdag 24 juli 2008 @ 12:10:
Mensen, het gaat hier helemaal niet om het plaatje zelf, maar om de extensie. Om 1 of andere reden heeft de topicstarter alleen maar het deel van de filenaam zonder de extensie in zijn database staan, maar in de map staan de bestanden met extensie.
Hoe kun je foto.jpg en foto.gif dan uit elkaar houden?

Developer Accused Of Unreadable Code Refuses To Comment


Acties:
  • 0 Henk 'm!

  • gizmo9003
  • Registratie: November 2000
  • Laatst online: 20-09 13:10

gizmo9003

Go For It!

Topicstarter
Noork schreef op donderdag 24 juli 2008 @ 12:13:
[...]

Ligt er ook aan hoe je de update regelt. Upload je de pasfoto's stuk voor stuk? Dan is het toch niet zo lastig om de volledige bestandsnaam in de db te gooien.
De pasfotos komen in 1 grote zip, die vervolgens wordt uitgepakt naar een directory. Ook is het mogelijk dat een persoon op een willekeurig tijdstip een nieuwe pasfoto opstuurt. Het handigste werkt het dan als het script elke extensie controleert.

Anders moet de nieuwe beheerder straks bij iedere nieuwe pasfoto ook een wijziging in de database doen.

tjah..


Acties:
  • 0 Henk 'm!

  • TheBorg
  • Registratie: November 2002
  • Laatst online: 20-09 18:24

TheBorg

Resistance is futile.

Manier 1:
Controleer de eerste 3 a 4 tekens van de data. Gif begint bijv. met "GIF8".
Gegevens kun je hier opzoeken: http://filext.com/file-extension/gif

Manier 2:
Alle plaatjes openen met getimagesize().
http://nl3.php.net/manual/en/function.getimagesize.php

Acties:
  • 0 Henk 'm!

  • gizmo9003
  • Registratie: November 2000
  • Laatst online: 20-09 13:10

gizmo9003

Go For It!

Topicstarter
TheBorg schreef op donderdag 24 juli 2008 @ 12:22:
Manier 1:
Controleer de eerste 3 a 4 tekens van de data. Gif begint bijv. met "GIF8".
Gegevens kun je hier opzoeken: http://filext.com/file-extension/gif

Manier 2:
Alle plaatjes openen met getimagesize().
http://nl3.php.net/manual/en/function.getimagesize.php
Nogmaals: het is dus niet iets eenmaligs!! Pasfotos (en dus extensies) kunnen door het jaar heen ook veranderen. De filename staat ook nergens in de database, maar deze matcht wel altijd een bepaald patroon, Achternaam,Voorletters(studentnr) en die losse gegevens staan wel in de database. Dus een eenmalige scan om alle juiste extensies in de database in te voegen is hier geen oplossing.

Maar ik ben er inmiddels wel aan uit, het werkt nu voor de meest gebruikelijke extensies! Bedankt!

[ Voor 16% gewijzigd door gizmo9003 op 24-07-2008 12:25 ]

tjah..


Acties:
  • 0 Henk 'm!

  • Noork
  • Registratie: Juni 2001
  • Niet online
gizmo9003 schreef op donderdag 24 juli 2008 @ 12:17:
[...]


De pasfotos komen in 1 grote zip, die vervolgens wordt uitgepakt naar een directory. Ook is het mogelijk dat een persoon op een willekeurig tijdstip een nieuwe pasfoto opstuurt. Het handigste werkt het dan als het script elke extensie controleert.

Anders moet de nieuwe beheerder straks bij iedere nieuwe pasfoto ook een wijziging in de database doen.
Dan komen ze toch inclusief extensie? Of knip je die eraf met een scriptje? Hiernaast lijkt het me niet moeilijk om ze allemaal naar 1 formaat te converteren. Scheelt weer gedoe in je code.

Acties:
  • 0 Henk 'm!

  • gizmo9003
  • Registratie: November 2000
  • Laatst online: 20-09 13:10

gizmo9003

Go For It!

Topicstarter
Noork schreef op donderdag 24 juli 2008 @ 12:25:
[...]

Dan komen ze toch inclusief extensie? Of knip je die eraf met een scriptje? Hiernaast lijkt het me niet moeilijk om ze allemaal naar 1 formaat te converteren. Scheelt weer gedoe in je code.
Ze komen met extensie ja.
Maar ik moet rekening houden met het "noob" gehalte van eventueel komende beheerders, die wellicht niet in staat zijn een tif bestand om te zetten naar jpg.

tjah..


Acties:
  • 0 Henk 'm!

  • TeeDee
  • Registratie: Februari 2001
  • Laatst online: 21:07

TeeDee

CQB 241

Je hebt het over PHP, ik zie <img staan (dus clientside meuk) en jij wil daar een TIF afbeelding tonen?

* TeeDee heeft het idee dat je nu een oplossing voor een niet bestaand probleem aan het zoeken ben.

Sla de extensie op en je bent al aardig op weg :) Voor de bestaande, 'extensieloze' afbeelding kan je kijken naar inderdaad glob, en evt. check/dubbelcheck op mimetype (wat sowieso veiliger is).

Of je bent teveel bezig met 'toekomstige' zaken. (hint).

Ik bedoel; noob gehalte van komende beheerders? Lijkt mij dat het juist makkelijk is om met een extensie te werken. Als een 'beheerder' (*) een noob is, wat let je om even het e.e.a. op te notuleren en dat door te geven.

* beheerder als in sysadmin? Zo ja, goeie sysadmin :|

Heart..pumps blood.Has nothing to do with emotion! Bored


Acties:
  • 0 Henk 'm!

  • Janoz
  • Registratie: Oktober 2000
  • Laatst online: 21-09 02:21

Janoz

Moderator Devschuur®

!litemod

Icelus schreef op donderdag 24 juli 2008 @ 12:17:
[...]
Hoe kun je foto.jpg en foto.gif dan uit elkaar houden?
Niet. Ik heb het systeem ook niet bedacht. Het is de realiteit in de situatie van de topicstarter.

Ken Thompson's famous line from V6 UNIX is equaly applicable to this post:
'You are not expected to understand this'


Acties:
  • 0 Henk 'm!

  • Hielko
  • Registratie: Januari 2000
  • Laatst online: 21:56
gizmo9003 schreef op donderdag 24 juli 2008 @ 12:30:
[...]


Ze komen met extensie ja.
Maar ik moet rekening houden met het "noob" gehalte van eventueel komende beheerders, die wellicht niet in staat zijn een tif bestand om te zetten naar jpg.
Als het zo noobproof moet zijn, waarom bestaat dan uberhaupt de mogelijkheid dat men handmatig op de server de foto's kan verwijderen/toevoegen etc?

Acties:
  • 0 Henk 'm!

  • gizmo9003
  • Registratie: November 2000
  • Laatst online: 20-09 13:10

gizmo9003

Go For It!

Topicstarter
Hielko schreef op donderdag 24 juli 2008 @ 13:46:
[...]

Als het zo noobproof moet zijn, waarom bestaat dan uberhaupt de mogelijkheid dat men handmatig op de server de foto's kan verwijderen/toevoegen etc?
Goede vraag ;)
Maar het staat op een dataserver, die gewoon lokaal via \\blabla bereikbaar is. Daarin staat een map "algemeen/pasfotos" waar alle pasfoto's in gaan. Helemaal "buiten het bereik" van de webserver, om het zo maar te noemen. Dus dat is gewoon kopieren/plakken in de windows verkenner.

tjah..


Acties:
  • 0 Henk 'm!

  • TeeDee
  • Registratie: Februari 2001
  • Laatst online: 21:07

TeeDee

CQB 241

En hoe wil je dan een .tif tonen?

Heart..pumps blood.Has nothing to do with emotion! Bored


Acties:
  • 0 Henk 'm!

  • SchizoDuckie
  • Registratie: April 2001
  • Laatst online: 18-02 23:12

SchizoDuckie

Kwaak

gizmo9003 schreef op donderdag 24 juli 2008 @ 15:23:
[...]


Goede vraag ;)
Maar het staat op een dataserver, die gewoon lokaal via \\blabla bereikbaar is. Daarin staat een map "algemeen/pasfotos" waar alle pasfoto's in gaan. Helemaal "buiten het bereik" van de webserver, om het zo maar te noemen. Dus dat is gewoon kopieren/plakken in de windows verkenner.
Ben je niet gewoon sneller klaar als je een batch filetje schrijft wat die bestandjes convert met imagemagick en gelijk kopieert? Die batch file kun je dan gelijk schedulen op de fileserver zodat ie bijv. 1x per nacht draait :) plus, je hoeft je niet druk te maken over nitwit 'beheerders' die niet weten hoe ze een afbeelding omzetten :P

[ Voor 15% gewijzigd door SchizoDuckie op 24-07-2008 16:06 ]

Stop uploading passwords to Github!


Acties:
  • 0 Henk 'm!

  • SWINX
  • Registratie: Juni 2001
  • Laatst online: 23-07 18:19
(jarig!)
gizmo9003 schreef op donderdag 24 juli 2008 @ 12:24:
[...]


Nogmaals: het is dus niet iets eenmaligs!! Pasfotos (en dus extensies) kunnen door het jaar heen ook veranderen. De filename staat ook nergens in de database, maar deze matcht wel altijd een bepaald patroon, Achternaam,Voorletters(studentnr) en die losse gegevens staan wel in de database. Dus een eenmalige scan om alle juiste extensies in de database in te voegen is hier geen oplossing.

Maar ik ben er inmiddels wel aan uit, het werkt nu voor de meest gebruikelijke extensies! Bedankt!
Waarom zou je er niet iets eenmaligs van maken? (zoals in de post hierboven ook wordt gesuggereerd).
Nu heb je een script gemaakt dat vanalles gaat afzoeken op voornaam, achternaam, studentnummer en een willekeurige extensie?

Als je nu eenmalig alles foto's goed zet en bijvoorbeeld allemaal op studentnummer opslaat op schijf, dan is het wel iets eenmaligs. Het enige wat je in je database dan nog zou kunnen opslaan is de extensie, of gebruik de glob functie (een van de eerste reacties in het topic).

Wanneer nieuwe pasfoto's geupload worden, sla je die onder het studentnummer op en je hebt er geen omkijken meer naar toch, of mis ik nu iets....

Mannen komen van Mars Tweakers, vrouwen van Venus Bokt

Pagina: 1