如何在PHP中回显和filedownload

时间:2016-09-26 10:45:36

标签: php download echo

以下代码是我的。

我想下载一个文件并在Php中一起回显。但是代码末尾的echo不起作用,如何修复这段代码?

$filename = trim($conf['savedir']).$_GET['task'].".".$_GET['hash'].".xml";
$downname = $_GET['task'].'.'.$_GET['hash'].'.xml';
$fp = fopen($filename, 'r');
if($fp == null)
{
    echo "Wrong Access1";
} else {
    header('Content-type:text/xml charset=utf-8');
    header('Content-disposition: attachment; filename='.$downname);
    header('Content-length:'.filesize($filename));
    header('Content-transfer-encoding: binary');
    header('Pragma: no-cache');
    header('Expires: 0');
    fpassthru($filename);
    fclose($fp);
    echo $_GET['task'].'.'.$_GET['hash'].'.xml file download.';
}

1 个答案:

答案 0 :(得分:0)

就像@Mark Ba​​cker所说,你不能同时回应和下载相同的请求,但有一些"技巧"回应一些东西并下载文件。

假设您的问题代码位于test.php文件中,并且用户请求包含以下代码的文件:

<script type="text/javascript">
    window.open('test.php?task=<?=$_GET['task']?>&hash=<?=$_GET['hash']?>', '_blank');
</script>
<?php
echo $_GET['task'].'.'.$_GET['hash'].'.xml file download.';

因此,javascript代码会将$ _GET变量传递给test.php,打开一个新窗口进行下载,并在当前窗口中回显您的消息。