Cache total do W3, arquivos do RackSpace Cloud e downloads forçados [closed]

4

Estou usando a conexão CDN do W3 Total Cache com o RackSpace CloudFiles para atender a até cem arquivos de mídia. Meu objetivo é fazer com que os arquivos sejam baixados no navegador do usuário, em vez de transmitir. De acordo com a Documentação do CloudFiles (http://docs.rackspacecloud.com/files/api/v1/cf-devguide-20111115.pdf), posso definir os cabeçalhos de disposição de conteúdo.

Alguém sabe como isso pode ser feito por meio do W3 Total Cache ou, talvez, por aí? Ou, como alternativa, você sabe de outra maneira de forçar os downloads de arquivos atendidos por meio do CDN?

    
por Jonathan Wold 14.02.2012 / 13:35

1 resposta

6

Isso pode ser dividido em uma tarefa simples, adicionando um filtro personalizado.

Você precisará adicionar o seguinte ao método _send_request dentro da classe CF_Http na linha 1283 cloudfiles_http.php.

$headers = $this->_make_headers($hdrs);
//Add this line below
$headers = apply_filters('cloudfiles_headers', $headers, $url_path, $method);

Isso lhe dará acesso aos cabeçalhos de um plug-in, em vez de fazer grandes edições no W3TC.

Dentro do seu plugin, você pode criar uma função como esta:

add_filter('cloudfiles_headers', 'wpse_42273_cloudfiles_headers', 0, 3);
function wpse_42273_cloudfiles_headers($headers, $url_path, $method){
    if($method != 'GET')
         return $headers;
    if(preg_match_all('~^.*/(.+\.(jpg|jpeg|png|gif|pdf|doc|docx|csv))$~i', $url_path, $matches)){
        $filename = $matches[1][0];
        $headers[] = "Content-Disposition: attachment; filename=$filename";
    }
    return $headers;
}

Isso adicionará o cabeçalho apropriado para forçar o download se o W3TC estiver buscando um objeto com uma extensão de arquivo listada na expressão regular acima. Essa é uma boa maneira de controlar quais arquivos são exibidos no navegador e quais arquivos devem ser baixados.

Você pode experimentar isso em um plug-in que criei para sua conveniência. Isso pode precisar de alguns ajustes, mas é assim que sinto que você deve abordar a questão.

Faça o download do plug-in aqui: enlace

Como nota final, isso obviamente edita o núcleo do plugin W3TC (embora com apenas uma linha de código). Esta não é uma prática recomendada, mas funcionará para você. Isso significa que qualquer atualização substituirá suas alterações. Pode ser prudente renomear o plug-in (criar um fork no seu sistema) para que o WordPress não tente atualizá-lo.

Espero que isso ajude você!

    
por Brian Fegter 24.02.2012 / 05:12