通过php将文件从mysql导出到存档

时间:2014-07-26 18:56:19

标签: php mysqli tar

我正在尝试添加一项功能,允许用户从服务器的数据库中导出所有媒体(文件存储在mysql数据库中)。

这是我用来从数据库中获取单个文件的代码:

$l=mysqli_fetch_assoc($R);//Raw data=['file'], File name=['name'] 
$xd = $l['file'];
$file_extension = strtolower(substr(strrchr($l['name'],"."),1));
$ctype='';
switch( $file_extension ) {
    case "gif": $ctype="image/gif"; break;
    case "png": $ctype="image/png"; break;
    case "jpeg":
    case "jpg": $ctype="image/jpg"; break;
    case "webm": $ctype="video/webm"; break;
    default:
}
header('Content-type: ' . $ctype);
echo $xd;

理想情况下,我希望避免在本地创建.tar文件并向其发送链接。我记得用C创建tar文件,我只是放置文件大小,文件名和原始数据,并且无限期地以这种格式附加东西,但是我找不到该方法的文档,也没有任何代码可以让我在php中这样做。 我至少是朝着正确的方向前进,还是有更好的方法来做到这一点?

1 个答案:

答案 0 :(得分:1)

首先,您必须为数据库中的所有文件提取该用户的所有文件。我将它们全部存储在一个数组中,以便您可以使用foreach轻松浏览它们。

之后,我会生成一个随机的数字和字母字符串,并在某个文件夹中创建一个mkdir()的文件夹。我们称之为临时文件夹。然后,您可以使用copy()将文件复制到临时文件夹。

之后,您可以使用shell_exec()使用您选择的命令行包执行本地命令,以创建.tar。之后,您可以将tar文件复制回服务器区域,并使用rmdir删除该文件夹,这样可以减少服务器上的混乱。

  

我是否正朝着正确的方向前进?

是的,如果你想要一个文件。您只需要一个虚拟文件系统,例如tar或zip文件。另一种方法是使用PHP代码生成JS代码,这样您就可以下载所有文件,但虚拟文件系统占用的空间更少(下载速度更快),如果您想将其移出下载,则更容易使用文件。这是你的选择......