Загрузка файлов Запретить анимированные GIF-файлы (с использованием PHP / Zend Framework) - PullRequest
3 голосов
/ 29 июля 2010

Я думаю, я хочу, чтобы пользователи могли загружать статические GIF-файлы, но не анимированные. скажем для аватара, как они могут выглядеть ... непрофессионально и отвлекает. Есть ли способ в PHP или Zend Framework, что я могу проверить загрузку файла таким образом?

Ответы [ 2 ]

1 голос
/ 29 июля 2010

Вы можете использовать библиотеку gd для сохранения ваших изображений. С GIF-типом файлов сохраняется только первый кадр из GIF-файла, если он анимирован. См. imagegif функция для получения дополнительной информации о том, как ее использовать.

0 голосов
/ 31 июля 2010

Форма PHP: imagecreatefromgif - Руководство :

I wrote two alternate versions of ZeBadger's 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;
}
?>
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...