在PHP中下载文件时出错

时间:2013-08-29 21:12:21

标签: php

下载文件时出现此错误

特别是pdf文件。

以及下载管理器等程序在下载时无效。

v?-x¢b(°ه-z zڈ÷÷μï½TTکêùQïىxùS - jîآ·×Yï¹oف5 KK÷¾oصتمح+¾|œ:و†lo n“w w w w w w w w w w w w†Æ +أجشƒœرد;-ںê•ؤ...¬RH|ħ镝ے#½= @'X'§¾ذXœtz”†رص0 ALو>“ء²{÷ڈے½} F;âB|کژ¯“كگ咋طPeüpy,¥¼تŒ•MR±瓦特گçي¢âٹ '¬} Fzى3¢e¾NAو^4è¬{j =¤ر³جسâ&lt;¶-5Mz&amp; @ +MYN1¨Cںq)زêذش£M nj] T‡à*×h0ï3D¤6غإQ.μg¥w«ي|م+s“çكûmٍاe¯Œغ½وؤ~لà…½ں$/‡ھ(!·@‡]µظtحîز4»CQeں[°ظ5گ+è’ہù4›MQd™@ں|‡فژd؟×ë×F*xز‘ ¹’پ÷i·?ù×ـسخ½Mأ}ق¸َOe$ِ à'ظgءl”ƒ=fRن(rإهـPy¨2ش2ج:طQî49œt رA3kfفذ’){¯'7ذE=»نx¾ةLb|‘شاـ×s ل‡ةأجô‰—ثSùy¦y†uھc>‍ا/’›Zç9Vٍ·بش&¸ةq“s؟Yعlzگïگ_v¼ئ؟!؟د h=لّ’ےJ‏تْ…£ںبb÷U;Lآڑ›eڑƒ¨}كFپ ں›Uنvi>“]¤vçW†•Bڑˆˆ´!ج=¥4†é1حز ہحٹ‚é?“ل¢qع ¬ض4 <فل吨ڑ克ؤbوT§ةOEEچ8“ س©#ôںآ©سؤ™:pا¾ýهس一个کؤVC«صژKOEچ“ژr \ IW“TUؤ'œ¥&LT;غAU&LT ;§«,«Æ¶-FF¥¥رک³ظ(WVÊG {i®&gt; streamxœه]ëڈeإq XXVثs1ث‚¹ ;†¹ôûAâDٹEت7[Hùùd'N"ضر’ے_JUWَُô¹sg¦w±#ygخمVWuWWW?~Oâ(صAàü‏ةف¯çüك»éد‡ےxW‏ë®4ٌ£;Hkز؟ے_ؤƒSر~ü÷»ےQ‍pئ¨C0؛{,=ƒ=َù‰ég”qً?™ïH،l{[:گJ›‏Uي¢؛ٍص,أوm)¤>ٌ6ف‍ے°R:^ùêî[ثٹ3¢¾m…ƒضŒ‡ إVeززF{{0BM‍ˆڑں°îùخVيئ[هYPüG6Eàغn {[££آدù•د¥·ءىفس¾¸÷<〜÷= /

这是我的PHP代码下载

<?php


$company =$_GET['company'];

// Make sure an ID was passed
if(isset($_GET['id'])) {
// Get the ID
$id = intval($_GET['id']);

// Make sure the ID is in fact a valid ID
if($id <= 0) {
    die('The ID is invalid!');
}
else {
    // Connect to the database
    $dbLink = new mysqli('localhost', 'sqldata', 'sqldata', 'balhaf');
    if(mysqli_connect_errno()) {
        die("MySQL connection failed: ". mysqli_connect_error());
    }

    // Fetch the file information
    $query = "
        SELECT mime, name, size, data
        FROM $company
        WHERE id = $id";
    $result = $dbLink->query($query);

    if($result) {
        // Make sure the result is valid
        if($result->num_rows == 1) {
        // Get the row
            $row = mysqli_fetch_assoc($result);

            // Print headers
            header("Content-Type: ". $row['mime']);
            header("Content-Length: ". $row['size']);
            header("Content-Disposition: attachment; filename=". $row['name']);

            // Print data
            echo $row['data'];
        }
        else {
            echo 'Error! No image exists with that ID.';
        }

        // Free the mysqli resources
        @mysqli_free_result($result);
        }
        else {
        echo "Error! Query failed: <pre>{$dbLink->error}</pre>";
        }
        @mysqli_close($dbLink);
        }
        }
        else {
        echo 'Error! No ID was passed.';
        }
        ?>

2 个答案:

答案 0 :(得分:0)

在MySQL中使用BLOB以防止数据因编码而发生更改(可能存在产生错误的编码问题,因为BLOB是二进制安全的,因此保存)

Binary Data in MySQL

相关

最好将链接存储为数据库中的文件引用,而不是保存文件的实际内容并使用file_get_contents和其他相关函数检索文件以获取mimetype(或{{1} })...

查看Trying to download Blob via PHP / MySQLhttp://www.sitepoint.com/forums/showthread.php?693871-Problem-using-PHP-to-pull-binary-files-from-a-BLOB-field-in-MYSQL

答案 1 :(得分:0)

在开始使用ob_end_clean设置标头之前,请立即尝试刷新输出缓冲区,然后在回显之后立即退出。看看section of the PHP book on Output Control

另一种可能性是,在尝试回显数据时,内存不足,并且错误正被所有前面的二进制文件混淆。尝试将二进制文件拆分为较小的块(substr是二进制安全的),迭代它们并将它们返回到输出缓冲区。