Upload files Deny animated GIFs (using PHP / Zend Framework)

I think I want users to be able to upload static GIFs, but not animated ones. let's say for an avatar, as they may look ... unprofessional and distracting. is there any way in php or zend framework that i can check the file upload this way?

+3
source share
2 answers

You can use gd to save your images. With the gif-type of files, only the first frame from the gif file is saved, if it is animated. For details on how to use it, see imagegif .

+1

PHP: imagecreatefromgif - :

I wrote two alternate versions of ZeBadger is_ani() function, for determining if a gif file is animated

Original:
http://us.php.net/manual/en/function.imagecreatefromgif.php#59787

The first alternative version is just as memory intensive as the original, and more CPU intensive, but far simpler:

<?php
function is_ani($filename) {
    return (bool)preg_match('#(\x00\x21\xF9\x04.{4}\x00\x2C.*){2,}#s', file_get_contents($filename));
}
?>

The second alternative is about as CPU intensive as the original function, but uses less memory (and may also result in less disk activity)

<?php
function is_ani($filename) {
    if(!($fh = @fopen($filename, 'rb')))
        return false;
    $count = 0;
    //an animated gif contains multiple "frames", with each frame having a
    //header made up of:
    // * a static 4-byte sequence (\x00\x21\xF9\x04)
    // * 4 variable bytes
    // * a static 2-byte sequence (\x00\x2C)

    // We read through the file til we reach the end of the file, or we've found
    // at least 2 frame headers
    while(!feof($fh) && $count < 2)
        $chunk = fread($fh, 1024 * 100); //read 100kb at a time
        $count += preg_match_all('#\x00\x21\xF9\x04.{4}\x00\x2C#s', $chunk, $matches);

    fclose($fh);
    return $count > 1;
}
?>
0

Source: https://habr.com/ru/post/1757120/


All Articles