php header <! - Core Error - >和文件已损坏

时间:2015-06-20 03:56:57

标签: php nginx header smarty

自从我将PHP更新到版本5.4.41后,我遇到了问题。

我正在使用php 5.4.41在nginx服务器上运行。

我制作了一个PHP代码,允许我检索文件并下载它。但是因为我更新了我的PHP代码所有我试图下载的文件都被破坏了。所以我上传了一个txt文件,看看发生了什么。

EX:如果我在下载后将测试的文本文件上传到内部,它将成为

<!--core error-->test

这里是完整的代码

<?php

require_once("include.php");
if(!xml2php("customer")) {
$smarty->assign('error_msg',"Error in language file");
}

//Grab the key from the url
$key = $VAR['key'];

if ($VAR['escape'] == 1) {

if (isset($key)) {

$q = "SELECT * FROM ".PRFX."TABLE_CUSTOMER_BACKUP WHERE     CUSTOMER_BACKUP_KEY=".$db->qstr($key);

if(!$rs = $db->Execute($q)) {
    force_page('core', 'error&error_msg=MySQL Error: '.$db-    >ErrorMsg().'&menu=1&type=database');
    exit;
    } else {

    $customer_backup_filename = $rs->fields['CUSTOMER_BACKUP_FILENAME'];
    $customer_backup_ext = $rs->fields['CUSTOMER_BACKUP_EXT'];
    $customer_backup_file_link = $rs->fields['CUSTOMER_BACKUP_FILE_LINK'];
    $customer_backup_filetype = $rs->fields['CUSTOMER_BACKUP_FILETYPE'];

    }
        if(empty($customer_backup_file_link)){

        force_page('core', 'error&error_msg=This key is not valid');
        exit;
        }

} else {
    force_page('core', 'error&error_msg=This key is not valid');
    exit;
    }

$fakeFileName= $customer_backup_filename.".".$customer_backup_ext;

$file = $customer_backup_file_link;



if (isset($customer_backup_file_link, $customer_backup_ext,      $customer_backup_filename, $customer_backup_filetype) &&      file_exists($customer_backup_file_link)){
     ignore_user_abort(true);
    set_time_limit(0); // disable the time limit for this script

    header("Cache-Control: public");
    header("Content-Description: File Transfer");
    header("Content-Type: ".$customer_backup_filetype);
    header("Content-Disposition: attachment; filename=".$fakeFileName);
    header("Content-Length: ".filesize($file));
    header("Content-Transfer-Encoding: binary");

    readfile($file);

} else {
    force_page('core', 'error&error_msg=There was a problem downloading your  file. Please contact your administrator.');
    exit;
}

} else { 
force_page('core', 'error&error_msg=There was a problem downloading your   file. Please contact your administrator.');
exit;
}

$smarty->display('customer'.SEP.'download.tpl');

//exit;

?>

我发现是否把//放在

前面
header("Content-Type: ".$customer_backup_filetype);
header("Content-Disposition: attachment; filename=".$fakeFileName);

忽略它,文件将显示在浏览器中而不会出现问题

我需要一些帮助,我已经在这个问题上工作了2天,但一无所获。

更新:

我发现如果我试图逃脱智能模板引擎,它将无法解决同样的问题。但是,如果我加载smarty模板引擎,文本将显示没有错误。

http://www.exemple.com/index.php?page=customer:download&key=1414830421&escape=1 //逃离智能模板引擎

2 个答案:

答案 0 :(得分:0)

<!--core error-->必须来自某个地方:

readfile($file);

由于这是您的内容所在的行,因此测试&#39;写完后会显示。

我的猜测是,来源是以下之一:

  • include.php
  • xml2php()
  • $ DB-&GT;执行()

也许您可以在代码中添加额外的输出,以便将其缩小到写入<!--core error-->的行。

答案 1 :(得分:0)

我忘了输入代码

    ob_clean();
    flush();