Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/php/288.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Php 为什么存储在mysql数据库中的PDF文件在下载时会损坏?_Php_Mysql_Pdf_Blob - Fatal编程技术网

Php 为什么存储在mysql数据库中的PDF文件在下载时会损坏?

Php 为什么存储在mysql数据库中的PDF文件在下载时会损坏?,php,mysql,pdf,blob,Php,Mysql,Pdf,Blob,我正在创建一个页面,用户可以上传/下载存储在mysql数据库中的pdf文件,问题是当我下载一个文件时,它会被损坏 NP:数据库中以blob形式存储的文件数据 下面是我的代码: // Gather all required data $name = $dbLink->real_escape_string($_FILES['uploaded_file']['name']); $mime = $dbLink->real_escape_stri

我正在创建一个页面,用户可以上传/下载存储在mysql数据库中的pdf文件,问题是当我下载一个文件时,它会被损坏

NP:数据库中以blob形式存储的文件数据

下面是我的代码:

        // Gather all required data
        $name = $dbLink->real_escape_string($_FILES['uploaded_file']['name']);
        $mime = $dbLink->real_escape_string($_FILES['uploaded_file']['type']);
        $data = $dbLink->real_escape_string(file_get_contents($_FILES           ['uploaded_file']['tmp_name']));
        $size = intval($_FILES['uploaded_file']['size']);

        // Create the SQL query
        $query = "
            INSERT INTO `file` (
                `name`, `mime`, `size`, `data`, `created`
            )
            VALUES (
                '{$name}', '{$mime}', {$size}, '{$data}', NOW()
            )";

        // Execute the query
        $result = $dbLink->query($query);

        // Check if it was successfull
        if($result) {
            echo 'Success! Your file was successfully added!';
        }
        else {
            echo 'Error! Failed to insert the file'
               . "<pre>{$dbLink->error}</pre>";
        }
    }
    else {
        echo 'An error accured while the file was being uploaded. '
           . 'Error code: '. intval($_FILES['uploaded_file']['error']);
    }

    // Close the mysql connection
    $dbLink->close();
}
else {
    echo 'Error! A file was not sent!';
}

download code: 
 // Fetch the file information
        $query = "
            SELECT `mime`, `name`, `size`, `data`
            FROM `file`
            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: application/pdf');
                header("Content-Type: application/force-download"); 
                header("Pragma: public"); 
                header("Content-Description: File Transfer");
                header("Content-Type: ".$row['mime']);
                header("Content-Length: ".$row['size']);
                header("Content-Disposition: attachment; filename=".$row['name']);
                header("Content-Transfer-Encoding: binary");
                header("Cache-Control: must-revalidate, post-check=0, pre-check=0");
                // Print data
                @readfile($row['data']);
            }
            else {
                echo 'Error! No file 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.';
}
//收集所有需要的数据
$name=$dbLink->real_escape_字符串($_FILES['upload_file']['name']);
$mime=$dbLink->real_escape_字符串($_FILES['upload_file']['type']);
$data=$dbLink->real_escape_string(文件获取内容($_文件['upload_file']['tmp_name']);
$size=intval($_文件['uploaded_文件]['size']);
//创建SQL查询
$query=”
插入到“文件”中(
`name`、`mime`、`size`、`data`、`created``
)
价值观(
{$name}',{$mime}',{$size},{$data}',NOW()
)";
//执行查询
$result=$dbLink->query($query);
//检查是否成功
如果($结果){
echo“成功!您的文件已成功添加!”;
}
否则{
echo“错误!插入文件失败”
.“{$dbLink->error}”;
}
}
否则{
echo“上传文件时发生错误。”
.错误代码:'.intval($_文件['uploaded_文件']['Error']);
}
//关闭mysql连接
$dbLink->close();
}
否则{
echo“错误!未发送文件!”;
}
下载代码:
//获取文件信息
$query=”
选择'mime','name','size','data`
从`文件`
其中`id`={$id}”;
$result=$dbLink->query($query);
如果($结果){
//确保结果有效
如果($result->num_rows==1){
//吵架
$row=mysqli\u fetch\u assoc($result);
//打印标题
//标题(“内容类型:应用程序/pdf”);
标题(“内容类型:应用程序/强制下载”);
标题(“Pragma:public”);
标题(“内容描述:文件传输”);
标题(“内容类型:.$row['mime']);
标题(“内容长度:.$row['size']);
标题(“内容处置:附件;文件名=“.$row['name']);
标题(“内容传输编码:二进制”);
标头(“缓存控制:必须重新验证,后检查=0,前检查=0”);
//打印数据
@readfile($row['data']);
}
否则{
echo“错误!不存在具有该ID的文件。”;
}
//释放mysqli资源
@mysqli_免费_结果($result);
}
否则{
echo“错误!查询失败:{$dbLink->Error}”;
}
@mysqli_close($dbLink);
}
}
否则{
echo“错误!未传递ID”;
}

不是这样。Mysqli也不是这样。你总是有选择的余地,告诉你的老师这种方法没有价值。为什么不在mysql数据库中存储jpg?因为有一个更好的方法-将链接存储在数据库中,将.jpg存储在web上。PDF格式也一样。如果您必须仔细阅读,请查看基于web的编辑器(如ckedit)如何存储数据(另一种错误的方法),并查看dompfd code.google.com/p/dompdf/,了解是什么破坏了pdf格式


为什么mysqli是个坏主意?mySql就是这样。mySql试图用其他方法更好地实现它,否则mySql会这样做。

将文件内容存储在数据库中是个坏主意,请参阅@Bubby4j这是一个学校项目,所以我没有选择:s