PHP - 检查是否在浏览器中打印了某些内容

时间:2010-10-13 14:14:29

标签: php printing download header

如何查看是否在浏览器中打印了某些内容?我已经尝试过headers_sent但它是标题... 如果没有打印我想下载文件:

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

谢谢。

3 个答案:

答案 0 :(得分:1)

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

示例:

<?php

ob_start();

echo 'something';

$output = ob_get_contents();

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

答案 1 :(得分:0)

简短的回答是你不能。将数据发送到客户端后,您无法找到对该数据执行的操作。

This question有一些解决方法的想法,但它们都不是故障安全的。

答案 2 :(得分:0)

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

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