43 votes

Impossible de modifier les informations d'en-tête - les en-têtes ont déjà été envoyés par... Problème avec WordPress

Je rencontre cette erreur et je n'ai aucune idée pour la résoudre.

Impossible de modifier les informations d'en-tête - les en-têtes ont déjà été envoyés par (sortie démarré à /home/ben213/public_html/wp-content/themes/Bendaggers/functions.php:9) dans /home/ben213/public_html/wp-includes/pluggable.php sur la ligne 934

La ligne 9 de mon fichier Functions.php est la suivante :

<?php if(function_exists('register_sidebar'))register_sidebar();?>

alors que mon pluggable.php # 934 est

function wp_redirect($location, $status = 302) {
    global $is_IIS;

    $location = apply_filters('wp_redirect', $location, $status);
    $status = apply_filters('wp_redirect_status', $status, $location);

    if ( !$location ) // allows the wp_redirect filter to cancel a redirect
        return false;

    $location = wp_sanitize_redirect($location);

    if ( !$is_IIS && php_sapi_name() != 'cgi-fcgi' )
        status_header($status); // This causes problems on IIS and some FastCGI setups

    header("Location: $location", true, $status);}
endif;

J'ai du mal à comprendre ce qui se passe car je ne suis pas un programmeur. qu'est-ce qui ne va pas ? aidez-moi s'il vous plaît...

0 votes

Bonjour Paul, Bonjour ! Je suis désolé mais pouvez-vous s'il vous plaît traduire cela en anglais ? alors comment vais-je faire cela ?

0 votes

Qu'est-ce que pluggable.php ? Pourquoi l'avez-vous ? Il semble qu'il devrait être inclus avant functions.php car il essaie de définir les en-têtes HTTP, et ceux-ci doivent être définis avant de commencer à produire du HTML.

0 votes

Je n'en ai aucune idée Paul, tout ce que je sais c'est que <?php if(function_exists('register_sidebar'))register_sidebar();?> est pour widgetizer ma sidebar. Je n'en ai aucune idée, désolé.

89voto

hardy101 Points 726

Votre thème imprime le texte dans le navigateur, mais pour une raison quelconque, WordPress redirige l'utilisateur (avec wp_redirect) en dehors de cette page avant que la page entière ne soit rendue. Vous ne pouvez pas commencer à imprimer la sortie et ensuite rediriger, ou vous obtiendrez l'erreur que vous voyez. C'est ce à quoi Paul Grime voulait en venir dans son commentaire.

Ken White a commenté avec une référence à un post avec un problème similaire. J'ai résolu ce problème dans ma propre expérience en mettant en mémoire tampon la sortie du script.

Dans le fichier de votre thème functions.php (qui est inclus à chaque fois que les pages de votre thème se chargent), mettez ce qui suit :

//allow redirection, even if my theme starts to send output to the browser
add_action('init', 'do_output_buffer');
function do_output_buffer() {
        ob_start();
}

Désormais, même si une partie de votre thème commence à envoyer des données au navigateur, PHP n'enverra pas ce texte avant que la page ne soit entièrement chargée, ce qui permet à WordPress de rediriger les utilisateurs, si nécessaire, dans le cadre de sa propre logique.

1 votes

Merci. Cela a résolu mon problème !

1 votes

@BenDaggers Veuillez marquer cette réponse comme correcte ou expliquer pourquoi elle ne l'était pas. Merci.

0 votes

Merci. Ça marche comme sur des roulettes !

21voto

Pir Fahim Shah Points 1786

Si vous essayez de rediriger vers une autre page depuis votre page actuelle, où vous avez imposé une condition ou sans condition, alors utilisez ce code. Par exemple, vous avez deux pages A.php, & B.php et vous êtes actuellement dans A.php où vous voulez aller à l'autre page B.php en cliquant sur le BOUTON.

   if(isset($_POST['save_btn']))
    {
        //write some of your code here, if necessary
        echo'<script> window.location="B.php"; </script> ';
     }

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X