[PHP] Controleren of bestand plaatje is

Pagina: 1
Acties:

Onderwerpen


Acties:
  • 0 Henk 'm!

  • AuC
  • Registratie: Januari 2003
  • Laatst online: 27-04 19:50
Ik als php n00b heb dus een vraagje.

Ik ben bezig met een gallerij script die alle plaatjes in een directory inleest en deze in een tabel zet. Nu is het probleem dat hij alles, dus ook de niet-plaatjes, in een tabel zet. Nu heb ik een functie geschreven die controleert of een bestand een plaatje is:

PHP:
1
2
3
4
5
6
7
8
9
10
11
12
$extension = array(0,0);
$extension = preg_split("/[\s.]+/", $filename);

$ALLOWED = Array('BMP', 'GIF', 'JPG');

foreach($ALLOWED as $ALL) {
    if( strtoupper($extension[1]) == strtoupper($ALL) ){
        echo "$filename is van het type $ALL<br>";
    } else {
        echo "$filename is <u>niet</u> van het type $ALL<br>";
    }
}


Dit komt dus uit mn testscriptje. Nu is het probleem hierbij dat hij bestanden met meerdere punten (bv. Plaatje.Start.jpg) niet kan controleren.

Dus mijn vraag, is er geen betere manier om de extensie van een bestand te achterhalen?

Acties:
  • 0 Henk 'm!

  • KeesV
  • Registratie: September 2001
  • Laatst online: 17-09 17:53

KeesV

Zonder titel

ik zou de filename exploden met de . (punt) als seperator, vervolgens de array omdraaien, en dan het eerste element pakken. Dit komt zo ff gauw bij mij op, maar het kan zijn dat het eenvoudiger cq. sneller kan :)

Ik doe niet aan sigs


Acties:
  • 0 Henk 'm!

  • Sybr_E-N
  • Registratie: December 2001
  • Laatst online: 17-09 22:12
Je kunt ook checken of met een jpeg te maken hebt door de headers ervan op te vragen met behulp van getimagesize();

PHP:
1
2
3
4
5
6
  function isValidJpeg()
  { 
    $temp = 2;
    $temp2 = getimagesize("$this->_highresdir"."$this->_file");
    return ($temp == $temp2[2]);
  }


Voor meer image functions -> http://www.php.net/manual/en/ref.image.php

Acties:
  • 0 Henk 'm!

  • crisp
  • Registratie: Februari 2000
  • Nu online

crisp

Devver

Pixelated

extensie checken is niet altijd even veilig, wellicht heb je hier of hier meer aan :)

Intentionally left blank


Acties:
  • 0 Henk 'm!

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

Spider.007

* Tetragrammaton

PHP:
1
$isIMG = preg_match("/(.*)(\.bmp|\.gif|\.jpg)$/i",$fileName);

zou moeten werken

---
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!

  • AuC
  • Registratie: Januari 2003
  • Laatst online: 27-04 19:50
@crisp: Helaas gebruikt mijn server nog een oudere versie van PHP, en kan ik deze functies dus niet gebruiken. |:(

@Spider.007: Werkt niet.

@Sybr_E-N: Ik ben erg lui :+ en om dit nou voor elke filetype uit te voeren.

Ik heb het nu als volgend opgelost:

PHP:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
function IsImg($file)
{
    $extension = array();
    $extension = explode(".", $file);
    $extension = array_reverse($extension);

    $ALLOWED = Array('BMP', 'GIF', 'JPG');

    foreach($ALLOWED as $ALL) {
        if( strtoupper($extension[0]) == strtoupper($ALL) ){
            return 1;
        }
    }

    return 0;   
}


En dat werkt verder aardig. :)

Acties:
  • 0 Henk 'm!

  • moto-moi
  • Registratie: Juli 2001
  • Laatst online: 09-06-2011

moto-moi

Ja, ik haat jou ook :w

Op wat voor server draait PHP ? Als het *nix is, kun je gaan kijken dmv het magic-type of het een image is.

Zie daarvoor o.a. deze pagina.

God, root, what is difference? | Talga Vassternich | IBM zuigt


Acties:
  • 0 Henk 'm!

Verwijderd

Ik heb vandaag een boekje over php gekocht en ben het net aan het lezen. per ongeluk kwam ik dit al redelijk snel tegen, misschien heb je er wat aan:

//lees bestandstype uit invoer
$file_type = fgets($file, 32);

//stel het bestandstype van een gif vast
define("FT_GIF_IMAGE", 6);

//doe iets als het een gif is
if ($filetype == FT_GIF_IMAGE)
{
//doe maar iets
}

er staat alleen niet in wat de nummers zijn van de bestandstypen voor jpg bmp of png, die moet je dus maar even opzoeken op de site van php. Ik hoop dat je er wat aan hebt en dat het werkt, laat het me in ieder geval weten

edit: volgens mij lees je met dit commando de eerste 4 karakters van een bestand, bij een gif bestand staat er denk ik dus altijd de term "GIF" aan het begin, dus bij gifs kan je het zo ook wel checken, alleen zie ik op de site van php.net dat je wel iedere keer eerst het bestand moet openen (fopen()), dus dit zal wel weer te veel processen kosten.

[ Voor 24% gewijzigd door Verwijderd op 17-04-2003 00:03 ]


Acties:
  • 0 Henk 'm!

  • Apache
  • Registratie: Juli 2000
  • Laatst online: 16-09 10:29

Apache

amateur software devver

If it ain't broken it doesn't have enough features


Acties:
  • 0 Henk 'm!

  • D2k
  • Registratie: Januari 2001
  • Laatst online: 02-09 11:02

D2k

lijkt me niet he?
voortaan toch maar ff lezen voor je post
AuC schreef op 16 april 2003 @ 22:59:
@crisp: Helaas gebruikt mijn server nog een oudere versie van PHP, en kan ik deze functies dus niet gebruiken. |:(

Doet iets met Cloud (MS/IBM)


Acties:
  • 0 Henk 'm!

  • Sybr_E-N
  • Registratie: December 2001
  • Laatst online: 17-09 22:12
AuC schreef op 16 April 2003 @ 22:59:

@Sybr_E-N: Ik ben erg lui :+ en om dit nou voor elke filetype uit te voeren.

En dat werkt verder aardig. :)
Tsjek de manual http://www.php.net/manual/en/function.getimagesize.php :)
Returns an array with 4 elements. Index 0 contains the width of the image in pixels. Index 1 contains the height. Index 2 is a flag indicating the type of the image: 1 = GIF, 2 = JPG, 3 = PNG, 4 = SWF, 5 = PSD, 6 = BMP, 7 = TIFF(intel byte order), 8 = TIFF(motorola byte order), 9 = JPC, 10 = JP2, 11 = JPX, 12 = JB2, 13 = SWC, 14 = IFF
Dus je hoeft ze niet voor elk uit te typen, maar jouw manier zal ook wel werken. Maar als als ik een word document rename naar .jpg ?? Dan gaat jouw functie hopeloos de mist in.

Acties:
  • 0 Henk 'm!

  • BierPul
  • Registratie: Juni 2001
  • Laatst online: 12-09 14:07

BierPul

2 koffie graag

Ik los het altijd zo op werkt prima zelfs als ze de extensie veranderen van het bestand :)

PHP:
1
2
3
4
5
6
7
$MIME = array("image/png","image/gif","image/pjpeg","image/jpeg");
 
if (in_array($_FILES[ 'image' ]['type'], $MIME)) {
        return true;
} else {
        return false;
}


:)

Ja man


Acties:
  • 0 Henk 'm!

  • Slagroom
  • Registratie: Juni 2001
  • Laatst online: 05-10-2024
LOST_GUNT schreef op 17 april 2003 @ 13:06:
Ik los het altijd zo op werkt prima zelfs als ze de extensie veranderen van het bestand :)

PHP:
1
2
3
4
5
6
7
$MIME = array("image/png","image/gif","image/pjpeg","image/jpeg");
 
if (in_array($_FILES[ 'image' ]['type'], $MIME)) {
        return true;
} else {
        return false;
}


:)
wanneer je iets upload werkt dit goed ja, maar hij heeft ze al op een server staan...

Acties:
  • 0 Henk 'm!

  • LuCarD
  • Registratie: Januari 2000
  • Niet online

LuCarD

Certified BUFH

Slagroom schreef op 17 april 2003 @ 14:36:
[...]


wanneer je iets upload werkt dit goed ja, maar hij heeft ze al op een server staan...
Heel goed... alleen wordt de mime type door de browser mee gestuurd en dat is dus ook heel simpel te faken....

TIP of the DAY:
DON'T TRUST THE USER!

TS:
Gebruik gewoon getimagesize. Deze geeft false terug als het geen plaatje is.
dus (uit het hoofdje)
PHP:
1
2
3
4
5
6
if (getimagesize($filename) === false ) { 
 // Geen plaatje
}
else {
 // Wel plaatje
}

Programmer - an organism that turns coffee into software.

Pagina: 1