gpt4 book ai didi

php - 0A 在使用 PHP 检索时添加到 BLOB

转载 作者:行者123 更新时间:2023-11-29 03:41:13 25 4
gpt4 key购买 nike

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

我搜索过与我的类似的问题,我找到的最接近的是 this但是,我使用的是 PDO 而不是 mysql_* 并且我在打开之前检查了空行

这是存储在我测试中包含的单独文件中的检索函数:

(在 raw.php 中):

function return_raw_rawid($raw_id)  {
$data = array();
$aggregate_data = array();
$sql = "SELECT * FROM `raw` WHERE `raw_id` = :rawid";

try {
$db_obj = dbCore::getInstance();
$query = $db_obj->dbh->prepare($sql);
$query->bindValue(':rawid', $raw_id);

if ($query->execute()) {
while($results = $query->fetch(PDO::FETCH_ASSOC)) {
$data['raw_id'] = $results['raw_id'];
$data['filename'] = $results['filename'];
$data['mime_type'] = $results['mime_type'];
$data['file_size'] = $results['file_size'];
$data['file_data'] = $results['file_data'];
$data['test_id'] = $results['test_id'];
$data['user_id'] = $results['user_id'];
$data['time'] = date('Y-m-d H:i:s', $results['time']);
$aggregate_data[] = $data;
} // while
} // if
$query->closeCursor();

return $aggregate_data;

} catch (PDOException $ex) {
$errors[] = $ex;
} // catch
}

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

<?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;

当我在浏览器中加载此页面时,它会提示我下载由 blob_id 标识并具有正确文件名和类型的文件。但是,在下载并在 ghex 中打开后,我看到第一个字节是“0A”使用

cmp original_file downloaded_file
我确定唯一的区别是第一个字节。谷歌搜索让我找到了我在上面(也许也)自由应用的 ltrim() 函数。

我不能确定这个问题是否是在上传过程中引起的,尽管正如我之前所说,我不相信这是因为 phpmyadmin 中的“file_size”值与源文件完全相同。我不确定在检索函数中使用 aggregate_data 数组可能是罪魁祸首还是什么。

非常感谢任何帮助!

最佳答案

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

关于php - 0A 在使用 PHP 检索时添加到 BLOB,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13586752/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com