如何将编码后的Base64字符串从数据库保存到磁盘上的文件?

时间:2015-06-11 11:49:16

标签: php mysql base64

第一篇文章:

我有一个MySQL数据库,由以下命令创建:

CREATE TABLE IF NOT EXISTS {CKox {1}}为( B TEXT NOT NULL,

以下是其结构:

TEXT NOT NULL );

要将这些Base64字符串(在数据库中)保存到文件(在我的 Web服务器上),我运行了这个PHP代码:

+----------+-----------------+
|    id    |   base64_str    |
+----------+-----------------+
|  file_1  |  base64_str_1   |
|  file_2  |  base64_str_2   |
|  file_3  |  base64_str_3   |
|  file_4  |  base64_str_4   |
+----------+-----------------+

它只返回一个文件,并且此保存的文件中有无数据。但是,我想将这些Base64字符串保存到服务器磁盘上的文件中。

在获得人们的帮助后(在StackOverlow上),我已经更新了我的代码,它已满了:

<?php

    // database connection
    // ...

    $cmd = mysql_query("SELECT * FROM `MyTable`");
    while($data = mysql_fetch_array($cmd)) {

    $filename = $data[id];
    $filedata = $data[base64_str];

    header('Content-Description: File Transfer');
    header("Content-type: application/octet-stream");
    header("Content-disposition: attachment; filename= ".$filename."");

    echo base64_decode($filedata);

    }

    // ...

?>

但是,我仍仅获取一个文件。主要问题是什么?怎么解决?

2 个答案:

答案 0 :(得分:1)

你不能在一段时间内发送该文件发送逻辑,因为你将几个文件的内容发送回客户端,它会将所有文件一个接一个地附加到客户端的单个文件中。

您可以获取所有文件,在服务器中创建临时文件,将其压缩为tgz,zip文件或其他任何内容,然后将其发送回用户,或者您只能发送一个文件。

这也是错误的:

$filename = $data[id];
$filedata = $data[base64_str];

您需要引号(单引号或双引号):

$filename = $data["id"];
$filedata = $data["base64_str"];

答案 1 :(得分:1)

对于从db到磁盘的转储文件,请使用file_put_contents

$cmd = mysql_query("SELECT * FROM `MyTable`");

while ($data = mysql_fetch_array($cmd)) {
    file_put_contents($data['id'], base64_decode($data['base64_str']));
}