php header <!-- 核心错误 --> 文件已损坏
php header <!-- Core Error --> and file currupted
自从我将 PHP 更新到版本 5.4.41 后,我遇到了问题。
我 运行 在 php 5.4.41 的 nginx 服务器上。
我制作了一个 php 代码,允许我检索文件并下载它。但是自从我更新了 php 代码后,我尝试下载的所有文件都已损坏。所以我上传了一个 txt 文件,看看发生了什么。
EX:如果我上传一个文本文件,里面有test,下载后会变成
<!--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 模板引擎,它不会工作同样的问题。但是如果我加载 smarty 模板引擎,文本将正确显示。
http://www.exemple.com/index.php?page=customer:download&key=1414830421&escape=1 //转义smarty模板引擎
<!--core error-->
必须起源于之前的某个地方:
readfile($file);
因为这是您的内容 'test' 所在的行,显示在它后面。
我的猜测是,来源是以下之一:
- include.php
- xml2php()
- $db->执行()
也许您可以在代码中添加额外的输出,以将其缩小到写入 <!--core error-->
的行。
忘记输入密码了
ob_clean();
flush();
自从我将 PHP 更新到版本 5.4.41 后,我遇到了问题。
我 运行 在 php 5.4.41 的 nginx 服务器上。
我制作了一个 php 代码,允许我检索文件并下载它。但是自从我更新了 php 代码后,我尝试下载的所有文件都已损坏。所以我上传了一个 txt 文件,看看发生了什么。
EX:如果我上传一个文本文件,里面有test,下载后会变成
<!--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 模板引擎,它不会工作同样的问题。但是如果我加载 smarty 模板引擎,文本将正确显示。
http://www.exemple.com/index.php?page=customer:download&key=1414830421&escape=1 //转义smarty模板引擎
<!--core error-->
必须起源于之前的某个地方:
readfile($file);
因为这是您的内容 'test' 所在的行,显示在它后面。
我的猜测是,来源是以下之一:
- include.php
- xml2php()
- $db->执行()
也许您可以在代码中添加额外的输出,以将其缩小到写入 <!--core error-->
的行。
忘记输入密码了
ob_clean();
flush();