【问题标题】:Is there a way to stream a remote file as "zipped" without downloading to server?有没有办法将远程文件作为“压缩”流式传输而不下载到服务器?
【发布时间】:2021-04-05 19:35:16
【问题描述】:

看看这个简单的代码

<?php
readfile('http://ovh.net/files/1Mio.dat');
?>

此代码和链接是示例。

我的服务器就像是一种代理一样工作。为用户显示远程原始文件。

我无法将文件下载到我的服务器,因为它太大了。 我无法保存到服务器,我无法对文件本身做任何事情。

我需要并在互联网上搜索了所有关于文件格式(zip、rar、tar、gzip 等)的文件格式,这些文件的原始代码非常简单,我可以向用户显示类似的东西。

echo "#filename,filesize";
readfile ($url1);
echo "#filename1,filesize1";
readfile ($url2);

所以用户得到一个像这样的原始文件

#file1.dat,12312
(rawdata of file)
#file2.dat,1232
(rawdata of file)

最后的文件,就像一个包含这两个文件的 zip 文件

我尝试了很多,但我没有得到任何满意的答案。

我找到的所有答案都是在服务器上下载文件所必需的。

它也不一定是 zip,任何其他可用的格式。 一种选择是简单地显示所有的整个文件,并留给用户使用文件拆分器将其拆分为多个部分,但这也不是一件友好的事情。

@编辑 也无法加载到内存中

【问题讨论】:

  • ZIP 和 RAR 是索引存档格式,具有压缩功能,但不可流式传输。 TAR 是一种可流式存档格式,但未压缩,而且我知道没有用于 PHP 的 TAR 流式传输器,我对自己编写感到厌烦。像 GZIP 这样的大多数压缩算法都是流压缩,所以没有真正的问题。理想情况下,您可能希望通过 GZIP 过滤器流式传输 TAR 存档,但这并不是一个有趣的时间,因为不存在 TAR 流式传输器。
  • @waterloomatt zip 是可流式传输的。

标签: php zip hex gzip ziparchive


【解决方案1】:

我成功地实现了我想要的。它不是很漂亮,但它大部分时间

都能正常工作

我可以在 7zip-manager 中轻松打开文件,查看和提取文件。 它的 Unix Archiver(一个文件)https://en.wikipedia.org/wiki/Ar_(Unix)

<?php
echo "!<arch>\n";
echo "file1.mp4/      1618101072  0     0     100644  1570024   `\n";
readfile("https://file-examples-com.github.io/uploads/2017/04/file_example_MP4_480_1_5MG.mp4");
echo "file2.mp4/      1618101072  0     0     100644  1570024   `\n";
readfile("https://file-examples-com.github.io/uploads/2017/04/file_example_MP4_480_1_5MG.mp4");
?>

大多数时候:

不幸的是,至少使用这个示例,有些文件无法正常工作。

可能与文件末尾或开头的字符有关,我不知道。我正在调查

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多