gpt4 book ai didi

php - 字符串到 php 中的压缩流

转载 作者:行者123 更新时间:2023-12-02 05:37:17 25 4
gpt4 key购买 nike

我有一个带有我的数据库的处理服务器和一个服务数据库,以低带宽成本提供文件。在处理服务器上,php 无法创建文件,因此在发送到另一台服务器进行下载之前,一切都必须使用流来完成和/或保留在内存中。几天前,我发现了关于“php://memory”的流抽象,我可以做类似的事情

$fp=fopen('php://memory','w+');
fwrite($fp,"Hello world");
fseek($fp,0,SEEK_SET);

//make a ftp connection here with $conn_id
$upload = ftp_fput($conn_id,"targetpath/helloworld.txt",$fp,FTP_BINARY);

在内存中创建文件,然后允许我将其通过 ftp 传输到我的其他服务器。这正是我想要的,除了我还想在发送数据之前压缩数据——最好只使用 php 的 native 部分,如 ziparchive,而不是用于特殊流操作的额外自定义类。我知道我非常接近以下...

$zip = new ZipArchive();
if($zip->open('php://memory', ZIPARCHIVE::CREATE)) {
$zip->addFromString('testtext.txt','Hello World!');
$fp = $zip->getStream('test'); if(!$fp) print "no filepointer";

//make a ftp connection here with $conn_id
$upload = ftp_fput($conn_id,"targetpath/helloworld.zip",$fp,FTP_BINARY);
} else print "couldn't open a zip like that";

失败的地方是对 getStream 的调用(尽管我认为我使用正确,但它总是返回 false)。看起来 zip 可以很好地在“php://memory”中制作文件,但由于某种原因 getStream 仍然失败,尽管我可能不太了解 ZipArchive 如何制作 zips ...

如何从字符串转到压缩文件指针,以便我可以将压缩文件通过 ftp 传输到我的其他服务器?请记住,我无法制作任何文件,否则我只会制作 zip 文件,然后通过 ftp 将其传输过来。

编辑: 根据下面 skinnynerd 的建议,我尝试了以下操作

$zip = new ZipArchive();
if($zip->open('php://memory', ZIPARCHIVE::CREATE)) {
$zip->addFromString('testtext.txt','Hello World!');
$zip->close();

$fp = fopen('php://memory','r+');
fseek($fp,0,SEEK_SET);

//connect to ftp
$upload = ftp_fput($conn_id,"upload/transfer/helloworld.zip",$fp,FTP_BINARY);
}

这确实制作了一个 zip 并将其发送过来,但是 zip 是 0 字节大,所以我认为“php://memory”不像我想的那样工作......它实际上在关闭步骤失败了 - $zip->close() 返回 false,这让我想知道我是否可以将 zips 打开到“php://memory”中。有谁知道我可以尝试沿着这些路线获取 zip 吗?

最佳答案

$zip->getStream('test') 正在获取一个流以从存档中提取文件 'test'。由于存档中没有文件 'test',因此失败。这不是您要使用的函数。

如您所说,您要做的是将完成的存档发送到 ftp 服务器。在这种情况下,您可能希望关闭 zip 存档,然后将 php://memory 作为普通文件重新打开(使用 fopen)进行发送。

我不知道,但您也可以直接将 $zip 用作资源,而无需关闭并重新打开文件。

关于php - 字符串到 php 中的压缩流,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11488752/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com