Php 创建zip存档并将其流式传输到ftp服务器

Php 创建zip存档并将其流式传输到ftp服务器,php,ftp,stream,zip,ziparchive,Php,Ftp,Stream,Zip,Ziparchive,我正在尝试从本地文件创建一个zip文件,并将其直接流式传输到ftp(无需先将zip写入磁盘)。我对压缩本身没有问题,但ZipArchive类似乎不识别ftp流包装器 下面的代码是我能想到的最简单的东西,可以说明这个问题 <?php $zip = new ZipArchive(); var_dump($zip->open('ftp://[username]:[password]@[hostname.net]/public_html/test.zip', ZipArchive::OVE

我正在尝试从本地文件创建一个zip文件,并将其直接流式传输到ftp(无需先将zip写入磁盘)。我对压缩本身没有问题,但ZipArchive类似乎不识别ftp流包装器

下面的代码是我能想到的最简单的东西,可以说明这个问题

<?php

$zip = new ZipArchive();
var_dump($zip->open('ftp://[username]:[password]@[hostname.net]/public_html/test.zip', ZipArchive::OVERWRITE));

$zip->addFile(realpath('/input.txt'), 'input.txt');

var_dump($zip->close());

我已经在我的Ubuntu系统上测试了你的代码,我可以确认它不起作用。
通过使用“strace”实用程序,我看到PHP正在处理“$filename”参数,就像它是本地文件名一样,如下所示:

lstat64("/var/www/test/ftp://myuser:mypass@127.0.0.1/tmp/test.zip", 0xbfcbb008) = -1 ENOENT (No such file or directory)
lstat64("/var/www/test/ftp://myuser:mypass@127.0.0.1/tmp", 0xbfcbaeb8) = -1 ENOENT (No such file or directory)
lstat64("/var/www/test/ftp://myuser:mypass@127.0.0.1", 0xbfcbad68) = -1 ENOENT (No such file or directory)
lstat64("/var/www/test/ftp:", 0xbfcbac28) = -1 ENOENT (No such file or directory)
“/var/www/test”前缀是我的PHP测试脚本的路径。
因此,ZipArchive::open()方法似乎无法有效地处理URL文件名。
查看PHP源代码,我发现ZipArchive::open()方法调用“”函数。
“”函数的PHP手册页声明:

如果文件名的格式为“scheme://...,则假定它是一个URL PHP将搜索协议处理程序(也称为包装器) 为了这个计划。如果没有注册该协议的包装器,PHP 将发出通知,帮助您跟踪脚本中的潜在问题 然后继续,就好像文件名指定了一个常规文件一样

,位于“”函数的PHP手册页中,声明zip_open()忽略自定义流包装器,但上面的测试表明它也忽略标准流包装器。

同样,zip_open手册页和zip_open手册页都没有明确指出“$filename”参数可以是URL。

您可以尝试
try
catch
块。。可能存在
异常
未引发异常。我有错误报告的一切和一个未经处理的异常最终会抛出一个错误。感谢您的信息,甚至在PHP源代码看!我将把它写入一个文件,然后通过ftp发送。