第一篇文章:
我有一个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);
}
// ...
?>
但是,我仍仅获取一个文件。主要问题是什么?怎么解决?
答案 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']));
}