【发布时间】:2015-08-27 02:22:43
【问题描述】:
第一次发帖:
我有一个 MySQL 数据库,它是由这个命令创建的:
CREATE TABLE IF NOT EXISTSCKox(aTEXT NOT NULL,bTEXT NOT NULL );
下面是它的结构:
+----------+-----------------+
| id | base64_str |
+----------+-----------------+
| file_1 | base64_str_1 |
| file_2 | base64_str_2 |
| file_3 | base64_str_3 |
| file_4 | base64_str_4 |
+----------+-----------------+
为了将这些 Base64 字符串(在数据库中)保存到文件中(在我的 web 服务器 上),我运行了以下 PHP 代码:
<?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);
}
// ...
?>
它返回只有一个文件,并且这个保存的文件中没有没有数据。但是,我想将这些 Base64 字符串保存到 服务器磁盘上的文件中。
在得到人们的帮助后(在 StackOverlow 上),我更新了我的代码,它已满:
// database connection
// ...
$cmd = mysql_query("SELECT * FROM `MyTable`");
while ($data = mysql_fetch_array($cmd)) {
file_put_contents($data['id'], base64_decode($data['base64_str']));
echo $data['base64_str'];
}
// ...
但是,我仍然只获得一个文件。主要问题是什么?如何解决?
【问题讨论】:
-
$data["id"] 和 $data["base64_str"] 将列名放在双引号内
-
您只能下载一个文件
-
再想想 fpj 你在循环中传递标头值
-
如果可以的话,你应该stop using
mysql_*functions。它们不再被维护并且是officially deprecated。改为了解 prepared statements,并考虑使用 PDO,it's really not hard。 -
在任何情况下,HTTP 响应都可以包含单个标头和单个内容,因此您一次只能发送一个文件