Php BLOB下载被截断为1 MB脚本适用于小于1 MB的文件

Php BLOB下载被截断为1 MB脚本适用于小于1 MB的文件,php,mysql,blob,Php,Mysql,Blob,我最近提出并解决了一个关于将大于2MB的.PDF文件作为blob上传到MySQL数据库的问题。我不得不更改php.ini文件和MySQLs最大数据包设置中的一些设置。然而,修复这个问题使我发现了脚本中的一个新问题 现在,由于我可以将文件上载到BLOB数据库,我尝试下载该文件以进行测试。当我打开.PDF文件时,我收到了以下错误:无法加载文档(错误3)'file:///tmp/test-13.pdf'. 经过进一步调查,我发现正在下载的文件test.pdf只有1MB,比数据库中2MB多一点的假定大

我最近提出并解决了一个关于将大于2MB的.PDF文件作为blob上传到MySQL数据库的问题。我不得不更改php.ini文件和MySQLs最大数据包设置中的一些设置。然而,修复这个问题使我发现了脚本中的一个新问题

现在,由于我可以将文件上载到BLOB数据库,我尝试下载该文件以进行测试。当我打开.PDF文件时,我收到了以下错误:无法加载文档(错误3)'file:///tmp/test-13.pdf'. 经过进一步调查,我发现正在下载的文件test.pdf只有1MB,比数据库中2MB多一点的假定大小的一半略小。这显然是错误的原因

下面的代码是我用于从数据库下载文件的脚本的一部分。它位于脚本的最顶端,对于小于1MB的文件可以完美地工作

我在想,也许我的一些标题陈述错了?我很困惑该怎么办。我搜索了php.ini,没有发现我认为需要更改的设置,MySQL的最大数据包设置是4MB,所以应该下载2MB

谢谢您的帮助。

根据():

最大尺寸 BLOB或文本对象由 它的类型,但最大的价值你 实际上可以在 客户端和服务器由 可用内存量和 通信缓冲区的大小。 您可以更改消息缓冲区大小 通过更改 max_允许_数据包变量,但您 必须对服务器和服务器执行 您的客户计划


根据()最大允许数据包的默认值是1048576。

我实际上解决了这个问题。我更改了php.ini和my.cnf中推荐的所有值,但我还需要更改PDO的设置

我改变了: PDO::MYSQL\u ATTR\u MAX\u BUFFER\u SIZE(整数) 最大缓冲区大小。默认为1个MiB


但是,在创建PDO对象以使其工作时,必须对其进行设置。现在一切都好了。

您是否仔细检查了数据库中的大小设置是否正确?我还没有检查,但我会在星期一回去工作时检查。我已经让数据库管理员将服务器端允许的最大数据包的值更改为4MB。在客户端是否也有需要更改的内容?
 foreach($_REQUEST as $key => $value)
 {
 if ($value == 'Open')
   {
    header();
    session_start();
    $dbh = new PDO('mysql:host='.$_SESSION['OpsDBServer'].'.ops.tns.its.psu.edu;  
           dbname='.$_SESSION['OpsDB'], $_SESSION['yoM'], $_SESSION['aMa']);
    $id = $key;
    $sqlDownload = "SELECT name, type, content, size  FROM upload WHERE 
    id='".$id."'";
    $result = $dbh->query($sqlDownload);

    $download = $result->fetchAll();
    $type = $download[0]['type'];
    $size = $download[0]['size'];
    $name = $download[0]['name'];
    $content = $download[0]['content'];

    header("Content-type: $type");
    header("Content-Disposition: inline; filename=$name");
    header("Content-length: $size");
    header("Cache-Control: maxage=1");
    header("Pragma: public");

    echo $content;

    exit;
   }
 }