你能在远程服务器上解压.zip文件吗?

3

我是一名有益的助手,可以为您进行翻译。以下是需要翻译的内容:

我有一个在服务器上解压文件的脚本,但是否可能在外部或远程服务器上解压文件。

例如,我能否执行以下操作:

<?php 
$zip = new ZipArchive; 
$zip->open('ftp://user:password@host/path/file.zip'); 
$zip->extractTo('ftp://user:password@host/'); 
$zip->close(); 
echo "Ok!"; ?>

Thanks a lot


将文件以编程方式复制到您的服务器,然后解压缩。 - Dan Grossman
我希望能够动态构建一个脚本,将文件从一个服务器传输到另一个服务器并进行解压。 - user827570
1
是的,所以在你的代码前面添加一行代码,将文件复制到服务器上,然后再解压缩。file_put_contents('file.zip', file_get_contents('ftp://user:password@host/path/file.zip')); 然后 $zip->open('file.zip'); - Dan Grossman
那不是你所说的,也不是你的代码所暗示的。看看sbrichards的答案。 - Dan Grossman
@DanGrossman:这个方法可以行得通(file_put_contents( ... file_get_contents( .. ) )),但如果同时进行多个下载/解压缩操作,也可能会导致冲突。 - Luke Stevenson
显示剩余5条评论
2个回答

3

要在服务器上使用PHP解压远程文件,一个对我有效的相当简单的解决方案是:

  1. 将zip文件(比如 a.zip)ftp到你想要提取的远程文件夹中

  2. 创建名为unzip.php的php文件并将其与上述zip文件一起ftp到同一文件夹中

  3. 将以下代码插入到unzip.php中:

<?php 
  $zip = new ZipArchive; 
  $zip->open('a.zip');
  $zip->extractTo('x/'); 
  $zip->close(); 
  echo "Ok!"; 
?>
  1. unzip.php 的 chmod 设置为可执行

  2. 从任何浏览器中执行该 PHP 文件 - 您应该会收到一个“Ok”确认已提取


2
您可以尝试通过ssh连接到该服务器并执行以下操作:
<?php
$connection = ssh2_connect('example.com', 22);
ssh2_auth_password($connection, 'username', 'password');
$stream = ssh2_exec($connection, 'unzip /path/to/file.zip');
?>

更多信息请参见: http://www.php.net/manual/zh/function.ssh2-exec.php


你好,感谢您的回复。但是我在运行上述代码时遇到问题,收到“在第2行调用未定义函数ssh2_connect()”的错误提示。 - user827570
你需要使用SSH支持编译PHP。 - Delan Azabani
我对PHP并不是非常熟悉,但我建议阅读http://www.php.net/manual/en/function.ssh2-exec.php,并确保您的服务器上已设置ssh并验证端口/用户名/密码。 - sbrichards
你不需要重新编译PHP,只需从PECL安装ssh2包即可。 - Dan Grossman

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接