web-dev-qa-db-fra.com

Force le téléchargement de pdf ne fonctionne pas quand inclure blog-header.php

J'ai ce code qui fonctionne dans un fichier nommé downloads/download.php:

<?php
header('Content-type: application/octet-stream');
header('Content-Disposition: attachment; filename="file.pdf"');
readfile('file.pdf');
?>

Il invite correctement à télécharger file.pdf.

Je dois suivre les téléchargements, donc je veux utiliser diverses fonctions WP. Pour amener la page à l'intérieur de WP, j'ai ajouté blog-header.php comme suit:

<?php
define('WP_USE_THEMES', false);
require('../wp-blog-header.php');
header('Content-type: application/octet-stream');
header('Content-Disposition: attachment; filename="file.pdf"');
readfile('file.pdf');
?>

Cela retourne un 404. Est-ce que quelqu'un sait pourquoi amener la page à l'intérieur de WP causerait cela?

2
BillyMedia

Je pense que Wordpress a un problème avec l'URL de votre script externe et génère une erreur 404 de la fonction handle_404() dans la classe wp dans /wp-includes/class-wp.php

Vous pouvez essayer de surmonter cela en utilisant par exemple status_header(200)

<?php
define('WP_USE_THEMES', false);
require('../wp-blog-header.php');
status_header(200);
header('Content-type: application/octet-stream');
header('Content-Disposition: attachment; filename="file.pdf"');
readfile('file.pdf');
?>

ps:

Il est informatif de consulter le source de la configuration de la requête Wordpress wp() appelée à partir du fichier wp-blog-header.php.

Cette fonction est définie dans /wp-includes/functions.php et ressemble à ceci

function wp( $query_vars = '' ) {
    ...cut...
    $wp->main( $query_vars );
    ...cut...
}

 function main($query_args = '') {
    ...cut...
      $this->handle_404();
    ...cut...
}

et

 function handle_404() {
    ...cut...
    // Guess it's time to 404.
    $wp_query->set_404();
    status_header( 404 );
    nocache_headers();
    ...cut...
}

provient de la classe wp dans /wp-includes/class-wp.php.

2
birgire