2010-10-13 75 views
0

如何检查浏览器中是否打印了某些东西?我试过headers_sent但它的头...... 如果没有印我想下载一个文件:PHP - 检查浏览器中是否有东西被打印

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

谢谢。

+1

headers_sent是你需要的 – 2010-10-13 14:17:30

+0

你的代码应该按原样工作。如果您输出了任何东西(假设您没有启用输出缓冲),'headers_sent'将返回true,因为您第一次执行PHP会为您发送适当的标头。 – meagar 2010-10-13 14:21:42

+0

headers_sent不起作用:<?php echo'hi'; echo headers_sent(); //没有输出,所以它是假的??> – thomas 2010-10-13 15:01:11

回答

0

简短的答案是你不能。在您将数据发送给客户端后,您无法找出该数据的完成情况。

This question有一些解决方法的想法,但没有一个是靠近自动防故障的。

+0

我认为OP的意思是“有没有办法找出是否已经输出到标准输出。”,而不是打印到物理介质。 – 2010-10-13 14:17:42

+0

@nikc是的,你是对的。我被“打印” – 2010-10-13 14:22:05

0

您可以使用PHP Output control functions来检查是否有任何输出到浏览器。

例子:

<?php 

ob_start(); 

echo 'something'; 

$output = ob_get_contents(); 

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

我不知道,如果输出已经启动检测任何方式。我认为headers_sent是一种检测的方法,因为PHP在运行到执行脚本的第一个输出时会发送标题。

如果您需要控制何时开始输出,您应该查看output buffering control

+0

分心了,不需要知道。阅读手册页就足够了 – 2010-10-13 14:21:58

+0

@Col:哪个手册页会是?关于在'headers_sent'手册页上检测发送输出没有明确的声明。我对PHP的行为的解释应该是正确的,以及函数如何用于派生信息。评论中的价值在哪里? – 2010-10-14 06:19:55