Cache totale W3, fichiers RackSpace Cloud et téléchargements forcés [fermé]

4

J'utilise la connexion CDN de W3 Total Cache à RackSpace CloudFiles pour servir plusieurs centaines de fichiers multimédias. Mon objectif est de télécharger les fichiers dans le navigateur de l'utilisateur plutôt que de les diffuser. Selon la documentation CloudFiles (http://docs.rackspacecloud.com/files/api/v1/cf-devguide-20111115.pdf), je peux définir les en-têtes de disposition du contenu.

Est-ce que quelqu'un sait comment cela peut être fait avec W3 Total Cache ou peut-être avec? Ou encore, connaissez-vous un autre moyen de forcer les téléchargements pour les fichiers envoyés via le CDN?

    
posée Jonathan Wold 14.02.2012 - 13:35

1 réponse

6

Cela peut être décomposé en une tâche simple en ajoutant un filtre personnalisé.

Vous devrez ajouter les éléments suivants à la méthode _send_request de la classe CF_Http dans la ligne 1283 de cloudfiles_http.php.

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

Cela vous donnera accès aux en-têtes d'un plugin plutôt que de faire de gros changements au W3TC.

Dans votre plugin, vous pouvez créer une fonction comme celle-ci:

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;
}

Ceci ajoutera l'en-tête approprié pour forcer le téléchargement si W3TC récupère un objet avec une extension de fichier indiquée dans la regex ci-dessus. C’est un bon moyen de contrôler quels fichiers sont servis dans le navigateur et quels fichiers doivent être téléchargés.

Vous pouvez essayer ceci dans un plugin que j'ai créé pour votre commodité. Cela nécessitera peut-être quelques ajustements, mais j’ai le sentiment que vous devriez aborder la question.

Téléchargez le plug-in ici: enlace

Pour finir, ceci édite évidemment le noyau du plugin W3TC (bien qu’avec une seule ligne de code). Ce n'est pas une pratique exemplaire, mais cela fonctionnera pour vous. Cela signifie que toute mise à niveau annulera vos modifications. Il peut être prudent de renommer le plugin (créer un fork sur votre système) afin que WordPress n’essaye pas de le mettre à jour.

J'espère que cela vous aide!

    
réponse donnée Brian Fegter 24.02.2012 - 05:12

Lire d'autres questions sur les étiquettes