0A在使用PHP检索时预先添加到blob

0A在使用PHP检索时预先添加到blob,php,mysql,pdo,binary,blob,Php,Mysql,Pdo,Binary,Blob,不管是好是坏,我将二进制信息存储在数据库表中,检索时遇到问题。每个BLOB在检索时都有一个新行,至少,我相信是在检索时,因为表中的二进制对象与源文件的大小完全相同 我搜索了一个与我类似的问题,但我发现最近的一个问题是,我使用的是PDO而不是mysql,并且在打开之前检查了空行 以下是存储在一个单独文件中的检索函数,我将其包括在测试中: (在raw.php中): 下面是我在一个单独的文件中测试它的代码: <?php include 'core/init.php'; // Contains

不管是好是坏,我将二进制信息存储在数据库表中,检索时遇到问题。每个BLOB在检索时都有一个新行,至少,我相信是在检索时,因为表中的二进制对象与源文件的大小完全相同

我搜索了一个与我类似的问题,但我发现最近的一个问题是,我使用的是PDO而不是mysql,并且在打开之前检查了空行 以下是存储在一个单独文件中的检索函数,我将其包括在测试中:

(在raw.php中):

下面是我在一个单独的文件中测试它的代码:

<?php 
include 'core/init.php'; // Contains protect_page() and includes for return_raw_rawid
protect_page();
$blob_id = 20;
$blob = return_raw_rawid($blob_id);
$data = ltrim($blob[0]['file_data']);
$name = ltrim($blob[0]['filename']);
$size = ltrim($blob[0]['file_size']);
$type = ltrim($blob[0]['mime_type']);
header("Content-type: $type");
header("Content-length: $size");
header("Content-disposition: attachment; filename=$name");
header("Content-Description: PHP Generated Data");
echo $data;

您确定这4行标题被正确执行了吗?0x0A是换行符。在core/init.php中可以有一个换行符触发输出,并且永远不会执行头。当display_errors/error_reporting关闭时,您将永远看不到关于“未发送标题-输出从第X行开始…”的警告

谢谢你的回复。它一定是我在init.php中包含的内容。我取出了所有分离到其他文件中的函数,并将所有需要的东西放在一个地方。我想我需要做的是重新评估如何从MySQL检索这些数据。现在,为了确定还有什么可能触发输出……在某些有限的情况下,将文件存储在数据库中是有用的,但作为一个通用存储系统,它所导致的问题远远超过了次要用途所能弥补的。对于这个项目,我的需求要求我将数据存储在BLOB中。我发现我的问题的解决方案是清除输出缓冲区,事实上,您是对的,我在init中包含了触发输出的内容。通过在includes之后立即添加“ob_clean();”,我解决了我的问题。谢谢你给我指明了正确的方向!
<?php 
include 'core/init.php'; // Contains protect_page() and includes for return_raw_rawid
protect_page();
$blob_id = 20;
$blob = return_raw_rawid($blob_id);
$data = ltrim($blob[0]['file_data']);
$name = ltrim($blob[0]['filename']);
$size = ltrim($blob[0]['file_size']);
$type = ltrim($blob[0]['mime_type']);
header("Content-type: $type");
header("Content-length: $size");
header("Content-disposition: attachment; filename=$name");
header("Content-Description: PHP Generated Data");
echo $data;
cmp original_file downloaded_file