2010-10-13 7 views
0

Comment puis-je vérifier si quelque chose était imprimé dans le navigateur? J'ai essayé headers_sent mais il est pour les en-têtes ... Si rien n'a été imprimé que je veux télécharger un fichier:PHP - Vérifie si quelque chose était imprimé dans le navigateur

public function download() { 
    $file = null; 
    $line = null; 

    if(headers_sent($file, $line)) { 
     /* generic exception... change that... */ 
     throw new Exception('Headers was sent before in file ' . $file . ', line #' . $line); 
    } 

    header('Content-Description: File Transfer'); 
    header('Content-Type: ' . $this->mime); 
    header('Content-Disposition: attachment; filename=' . $this->name); 
    header('Content-Transfer-Encoding: binary'); 
    header('Expires: 0'); 
    header('Cache-Control: must-revalidate, post-check=0, pre-check=0'); 
    header('Pragma: public'); 
    header('Content-Length: ' . $this->size); 
    readfile($this->path); 

Merci.

+1

headers_sent est ce qu'il vous faut –

+0

Votre code devrait fonctionner tel quel. 'headers_sent' retournera vrai si vous avez sorti quelque chose (à condition que vous n'ayez pas de tampon de sortie activé), car la première fois que vous le faites, PHP enverra les en-têtes appropriés pour vous. – meagar

+0

headers_sent ne fonctionne pas: thomas

Répondre

0

La réponse courte est que vous ne pouvez pas. Après avoir envoyé des données au client, vous n'avez aucune chance de savoir ce qui est fait avec ces données.

This question a des idées de contournement, mais aucune d'entre elles n'est proche de la sécurité intégrée.

+0

Je pense que l'OP signifie "Y at-il un moyen de savoir si quelque chose était déjà sorti sur stdout.", pas d'impression sur un support physique. –

+0

@nikc oui, vous avez raison. J'ai été distrait par le "print" –

0

Vous pouvez utiliser PHP Output control functions pour vérifier s'il existe une sortie dans le navigateur.

Exemple:

<?php 

ob_start(); 

echo 'something'; 

$output = ob_get_contents(); 

if (!empty($output)) 
{ 
    die('something was printed'); 
} 
else 
{ 
    readfile(); 
} 
0

Je ne connais aucun moyen de détecter si la sortie est déjà commencé. Je suppose que headers_sent est un moyen de détecter cela, car PHP enverra les en-têtes lorsqu'il sera exécuté dans la première sortie du script d'exécution.

Si vous avez besoin de contrôler quand la sortie est démarrée, vous devriez probablement regarder dans output buffering control.

+0

pas besoin de savoir. lire une page de manuel est suffisant –

+0

@Col: quelle page de manuel serait-ce? Il n'y a pas de déclaration explicite sur la détection de la sortie envoyée sur la page de manuel 'headers_sent'. Mon explication du comportement de PHP devrait être correcte et comment la fonction peut être utilisée pour dériver cette information. Où est la valeur dans votre commentaire? –

Questions connexes