douxin8749 2015-03-03 15:33
浏览 18
已采纳

PHP强制下载在文档的开头添加2行

i would like to dowload generated file from php. It works but it adds 2 empty lines in the begining of file. I tried to download file via winscp and compared them and this file which was downloaded via php has 2 empty lines in header. I am lost 2 days with this bug and I am unable to solve this. Could you please help me ? :)

Thanks

<?php
include 'connect.php';
function trsgen($mid=null)
{
if(isset($mid) && $mid!=null)
    {
    include 'connect_oo.php';
    $query="My query;";
    $result=$conn->query($query);
    $File=$mid . '.trs';
    $myfile = fopen($File, "w");
    $i=1;
    if($result->num_rows > 0)
        {
        while($row = $result->fetch_assoc())
                {
                if(isset($i) && $i==1)
                {
                $nameqry="another query;";
                $nameresult=$conn->query($nameqry);
                if($nameresult->num_rows == 1)
                {
                $name = $nameresult->fetch_assoc();
                $medianame=$name["media_name"];
                }
                else
                {
                $medianame=null;
                }
                $timeqry="SELECT distinct etime FROM subtitles where media_id=$mid order by stime DESC LIMIT 1;";
                $timeresult=$conn->query($timeqry);
                if($timeresult->num_rows == 1)
                {
                $time = $timeresult->fetch_assoc();
                $endtime=$time["etime"];
                }
                else
                {
                $endtime='1.0';
                }
                $hla1='<?xml version="1.0" encoding="UTF-8"?>'.PHP_EOL;
                $hla2='<!DOCTYPE Trans SYSTEM "trans-14.dtd">'.PHP_EOL;
                $hla3='<Trans scribe="tommy" audio_filename="'.$medianame.'" version="1" version_date="150302">'.PHP_EOL;
                $hla4='<Episode>'.PHP_EOL;
                $hla5='<Section type="report" startTime="0" endTime="'.$endtime.'">'.PHP_EOL;
                $hla6='<Turn startTime="0" endTime="'.$endtime.'">'.PHP_EOL;
                fwrite($myfile, $hla1);
                fwrite($myfile, $hla2);
                fwrite($myfile, $hla3);
                fwrite($myfile, $hla4);
                fwrite($myfile, $hla5);
                fwrite($myfile, $hla6);
                }
                $stime='<Sync time="'.$row["stime"].'"/>'.PHP_EOL;
                $text=$row["text"].PHP_EOL;
                $etime='<Sync time="'.$row["etime"].'"/>'.PHP_EOL;
                fwrite($myfile, $stime);
                fwrite($myfile, $text);
                fwrite($myfile, $etime);
                if($result->num_rows == $i)
                {
                $tail1='</Turn>'.PHP_EOL;
                $tail2='</Section>'.PHP_EOL;
                $tail3='</Episode>'.PHP_EOL;
                $tail4='</Trans> '.PHP_EOL;
                fwrite($myfile, $tail1);
                fwrite($myfile, $tail2);
                fwrite($myfile, $tail3);
                fwrite($myfile, $tail4);
                }
                $i++;
                }
        fclose($myfile);
        $conn->close();
        $file = __DIR__ . '/'.$mid.'.trs' ;
        header('Content-disposition: attachment; filename='.$File.'');
        header('Content-type: application/trs');
        header("Content-length: ".filesize($file));
        readfile($file);
        unlink($File);
        }
    }
}
?>
<?php
if(isset($_POST["mid"]) && !empty($_POST["mid"]))
{trsgen($_POST["mid"]);}
?>

<form action="" method="POST">
<select name="mid">
<?php
$query1="SELECT * FROM media where media_disabled!=1 ORDER BY mid DESC;";
$result1=$conn->query($query1);
if($result1->num_rows > 0)
        {
        while($row1 = $result1->fetch_assoc())
                {       
                echo '<option value="'.$row1["mid"].'">'.$row1["mid"].'-'.$row1["media_name"].'</option>';
                }
        }
$conn->close();
?>
<input type="submit" value="Generuj trs subor"></input>
</select>
</form>
  • 写回答

2条回答 默认 最新

  • doucongqian6644 2015-03-05 09:30
    关注

    I figured it out by myself.

    I have created separate file just for download of file download.php.

    In main php:

    ...
    ...
    fclose($myfile);
    $conn->close();
    header("Location: http://sub.radio9.sk/tmp/trsgen/download?mid=$mid");
    }
    

    and in download.php

    <?php
    if(isset($_GET["mid"]) && !empty($_GET["mid"]))
        {
            $mid=$_GET["mid"];
            $file=$mid.'.trs';
            header('Content-disposition: attachment; filename='.$file.'');
            header('Content-type: application/download');
            header("Content-length: ".filesize($file));
            readfile($file);
            unlink($file);
        }
    ?>
    

    Then two empty lines disappeared. :)

    本回答被题主选为最佳回答 , 对您是否有帮助呢?
    评论
查看更多回答(1条)

报告相同问题?

悬赏问题

  • ¥15 基于卷积神经网络的声纹识别
  • ¥15 Python中的request,如何使用ssr节点,通过代理requests网页。本人在泰国,需要用大陆ip才能玩网页游戏,合法合规。
  • ¥100 为什么这个恒流源电路不能恒流?
  • ¥15 有偿求跨组件数据流路径图
  • ¥15 写一个方法checkPerson,入参实体类Person,出参布尔值
  • ¥15 我想咨询一下路面纹理三维点云数据处理的一些问题,上传的坐标文件里是怎么对无序点进行编号的,以及xy坐标在处理的时候是进行整体模型分片处理的吗
  • ¥15 CSAPPattacklab
  • ¥15 一直显示正在等待HID—ISP
  • ¥15 Python turtle 画图
  • ¥15 stm32开发clion时遇到的编译问题