PHP:尝试使pdf文件可下载

PHP:尝试使pdf文件可下载,php,Php,我尝试在用户成功提交表单后下载PDF文件 我使用了中的代码,但pdf文件的内容将作为gebrish字符输出,而不是下载对话框弹出 下载代码是从函数中调用的 function phpfmg_thankyou(){ phpfmg_redirect_js(); //include('get_file.php'); $pdf_file = "{$_SERVER['DOCUMENT_ROOT']}/secured_assets/CRE_White_Paper_Release_01

我尝试在用户成功提交表单后下载PDF文件

我使用了中的代码,但pdf文件的内容将作为gebrish字符输出,而不是下载对话框弹出

下载代码是从函数中调用的

function phpfmg_thankyou(){
    phpfmg_redirect_js();

    //include('get_file.php');
    $pdf_file = "{$_SERVER['DOCUMENT_ROOT']}/secured_assets/CRE_White_Paper_Release_01-15-2013.pdf";
    if( file_exists( $pdf_file ) ){
        header("Content-Type: application/octet-stream");
        header("Content-Disposition: attachment; filename=" . Urlencode('CRE_White_Paper_Release_01-15-2013.pdf'));   
        header("Content-Type: application/force-download");
        header("Content-Type: application/download");
        header("Content-Description: File Transfer");            
        header("Content-Length: " . Filesize($pdf_file));
        flush(); // this doesn't really matter.
        $fp = fopen($pdf_file, "r");
        while (!feof($fp)){
            echo fread($fp, 65536);
            flush(); // this is essential for large downloads
        } 
        fclose($fp);

    }

?>

<!-- [Your confirmation message goes here] -->
    <br>

    <div style="padding: 1em; background: #CDD7B6;">    
        <b>Your inquiry has been received. Thank you!</b>
        <p><a title="FREE White Paper Commercial Real Estate Expectations" href="secured_assets/CRE_White_Paper_Release_01-15-2013.pdf">Click Here</a> to get your FREE copy of White Paper Commercial Real Estate Expectations</p>
    </div>

<?php



} // end of function phpfmg_thankyou()
函数phpfmg_thankyou(){ phpfmg_重定向_js(); //包括('get_file.php'); $pdf_file=“{$_SERVER['DOCUMENT_ROOT']}/secured_assets/CRE_White_Paper_Release_01-15-2013.pdf”; 如果(文件存在($pdf文件)){ 标题(“内容类型:应用程序/八位字节流”); 标题(“内容处置:附件;文件名=“.Urlencode('CRE_White_Paper_Release_01-15-2013.pdf')); 标题(“内容类型:应用程序/强制下载”); 标题(“内容类型:应用程序/下载”); 标题(“内容描述:文件传输”); 标题(“内容长度:”.Filesize($pdf_文件)); flush();//这并不重要。 $fp=fopen($pdf_文件,“r”); 而(!feof($fp)){ echo-fread($fp,65536); flush();//这对于大型下载非常重要 } fclose($fp); } ?>
您的询盘已收到,谢谢! 获取免费的商业地产期望白皮书


这只是一种预感,但请尝试删除PHP中的所有HTML代码:

<!-- [Your confirmation message goes here] -->
    <br>

    <div style="padding: 1em; background: #CDD7B6;">    
        <b>Your inquiry has been received. Thank you!</b>
        <p><a title="FREE White Paper Commercial Real Estate Expectations" href="secured_assets/CRE_White_Paper_Release_01-15-2013.pdf">Click Here</a> to get your FREE copy of White Paper Commercial Real Estate Expectations</p>
    </div>


您的询盘已收到,谢谢! 获取免费的商业地产期望白皮书

添加这样的内容(我认为)会让你的客户认为HTML是PDF文件的一部分。PDF文件被压缩,任何非标准数据都会像你描述的那样把整个事情弄得乱七八糟

浏览器会自动将您带回下载文件之前的原始页面(如果文件设置为自动下载)

因此,如果您想要感谢,您可以设置一个PHP页面,上面写着“Thankyu”,然后将浏览器重定向到实际的下载PHP页面。当下载发生时,仍然会显示您的感谢

我肯定不是PHP专业人士,所以如果我在这方面有错,请告诉我,我会删除答案


在尝试下载该文件之前,我建议尝试让php文件假装它是pdf文件。这样可以减少出错的情况。一旦php输出pdf文件,您只需在现有代码中添加适当的标题即可自动下载。

谢谢大家的支持输入。我可以通过在提交后重定向到另一个页面,并将下载代码放在重定向页面中来解决此问题。

显示您在此处使用的代码。看起来您忘记发送/错误发送内容类型标题。例如,
标题(“内容类型:应用程序/八位字节流”)
您能给我们看一下您的代码吗?尤其重要的是,您要给我们看文件顶部和
标题(…)之间的每一行(甚至是空白)
call。我假设你的标题无法发送,因为已经有输出了……我在pdf之后也看到HTML了吗?这个函数在哪里调用?文件肯定不是在这里被提供的。而且,既然HTML表明它链接到了正确的文件名,用户应该单击,为什么还要通过PHP提供文件?使用app仅适用于应用程序/八位字节流和应用程序/八位字节流。