2017-06-21 6 views
2

WordPressでアニメーション化されたgifイメージのイメージのサイズ変更を無効にする2つのPHP関数を実装しようとしています。ファイルのMIMEタイプがgifの場合は、アップロードを無効にするにはsolutionがありますが、これでは不十分です。 GIFは単なる画像でもあります。 だから私はこのファイルをアニメーションgifであるかどうかをチェックするPHPスクリプトと組み合わせると思いますが、これはsolutionです。これは私のテーマファイルにこの関数をエコーすると言うと動作しますが、functions.phpの中で使用すると機能しないようです。アニメーションgifの場合はイメージのサイズ変更を無効にする

/** 
* Detects animated GIF from given file pointer resource or filename. 
* 
* @param resource|string $file File pointer resource or filename 
* @return bool 
*/ 
function is_animated_gif($file) 
{ 
    $fp = null; 

    if (is_string($file)) { 
     $fp = fopen($file, "rb"); 
    } else { 
     $fp = $file; 

     /* Make sure that we are at the beginning of the file */ 
     fseek($fp, 0); 
    } 

    if (fread($fp, 3) !== "GIF") { 
     fclose($fp); 

     return false; 
    } 

    $frames = 0; 

    while (!feof($fp) && $frames < 2) { 
     if (fread($fp, 1) === "\x00") { 
      /* Some of the animated GIFs do not contain graphic control extension (starts with 21 f9) */ 
      if (fread($fp, 1) === "\x21" || fread($fp, 2) === "\x21\xf9") { 
       $frames++; 
      } 
     } 
    } 

    fclose($fp); 

    return $frames > 1; 
} 

function disable_upload_sizes($sizes, $metadata) { 

    $uploads = wp_upload_dir(); 
    $upload_path = $uploads['baseurl']; 
    $relative_path = $metadata['file']; 
    $file_url = $upload_path . $relative_path; 

    if(is_animated_gif($file_url)) { 
    $sizes = array(); 
    } 

    // Return sizes you want to create from image (None if image is gif.) 
    return $sizes; 
} 
add_filter('intermediate_image_sizes_advanced', 'disable_upload_sizes', 10, 2); 

私はここで間違っていますが、これは機能していません。

+0

'or' gifのための条件と同様にこの行を追加する必要があります:'もし(!のfread($ fpは、3)== "GIF")を{ ' –

+0

うーん...しかし、私はしたいですアニメーション化されたファイルタイプのgifをフィルタリングするには、なぜ条件を追加するのか、それは何ですか? – r1987

+0

私は '(fread($ fp、3)!==" GIF "|| fread($ fp、3)!==" gif "){' –

答えて

3

コードは動作しますが、$file_urlにエラーがあります。

それは$file_url = $upload_path . '/' . $relative_path;

関連する問題