通过 PHP 上传 ZIP 文件并解压缩 ftp 文件夹

2023-12-23

我想制作一个表格,您可以在其中填写 FTP 登录服务器并获得上传 ZIP 文件的选项。该脚本与最后一部分(解压缩文件)分开工作,我想执行解压缩上传的文件。有谁知道有什么问题吗? TIA

<?php 
if (isset($_POST['Submit'])) {
$ftp_server = $ftp = $_POST['ftp'];
$ftp_user_name = $username = $_POST['username'];
$ftp_user_pass = $password = $_POST['password'];   


 if (!empty($_FILES['upload']['name'])) {
$ch = curl_init();

$file1 = $localfile = $_FILES['upload']['name'];
$fp = fopen($file1, 'r');

$file = '/htdocs/file.zip';
// set up basic connection
$conn_id = ftp_connect($ftp_server);

// login with username and password
$login_result = ftp_login($conn_id, $ftp_user_name, $ftp_user_pass);

// try to upload $file
if (ftp_fput($conn_id, $file, $fp, FTP_ASCII)) {
    echo "Successfully uploaded ftp://".$username.":".$password."@".$ftp.$file."\n";

    $zip = new ZipArchive;
    $zip->open($file); 
    $zip->extractTo('ftp://'.$username.':'.$password.'@'.$ftp.'/htdocs'); 
    $zip->close();

} else {
    echo "There was a problem while uploading $file\n";
}

// close the connection and the file handler
ftp_close($conn_id);
fclose($fp);
 }  
}
?>

    <?php if(isset($error)){ echo $error; } ?>
        <form action="upload.php" method="post" enctype="multipart/form-data">
            <div>
                <label for="upload">Select file</label>
                <input name="upload" type="file" />
                <br> Ftp Server:
                <br>
                <input type="text" name="ftp" value="<?php if(isset($ftp)){ echo $ftp; } ?>">
                <br> Username:
                <br>
                <input type="text" name="username" value="<?php if(isset($username)){ echo $username; } ?>">
                <br> Password:
                <br>
                <input type="text" name="password" value="<?php if(isset($password)){ echo $password; }else{ echo '123456';} ?>">

                <input type="submit" name="Submit" value="Upload" />
            </div>
        </form>

错误

上传成功

ftp://:@ftp.***.com/htdocs/file.zip 警告: ZipArchive::extractTo():无效或未初始化的 Zip 对象 第 29 行 C:\xampp\htdocs\upload.php

警告:ZipArchive::close():无效或未初始化的 Zip 对象 C:\xampp\htdocs\upload.php 第 30 行


The ZipArchive不支持 URL 包装器。

无论如何,你的代码没有多大意义:

  • 你先上传$localfile到 FTP 服务器作为/htdocs/file.zip

    $file = '/htdocs/file.zip';
    ftp_fput($conn_id, $file, $fp, FTP_ASCII)
    
  • 然后你尝试打开/htdocs/file.zip,因为它是本地文件

    $zip->open($file);
    

    但这样的本地文件不存在。

  • 然后您尝试将该不存在的文件提取到 FTP URL。这不受支持。

    See ZipArchive::open():支持流包装器 https://bugs.php.net/bug.php?id=68621。是关于open,但如果open不支持包装器,extactTo也不会(这是一种更难支持的方式)。看到cmb 评论 https://bugs.php.net/bug.php?id=68621#1433424133:

    无论如何,ZipArchive::open() 不应该接受任何流 包装 URL,但仅限真实文件路径。它的文档没有 否则,“支持”的手册页也没有说明 协议和包装器”[1]:

    | PHP 附带了许多用于各种 URL 样式的内置包装器 |与文件系统功能一起使用的协议[...]

    但是,ZipArchive::open() 不是一个文件系统函数 事情。

    所以,实际上,这不是一个错误,甚至不是一个文档错误 严格意义上。因此我要更改为功能请求。


由于您的代码是错误的,因此很难猜测您实际上想要做什么。我可以想象这两种可能性。

  • 您想要将 ZIP 文件上传到 FTP 服务器并在那里解压缩。这简直就是无法在 FTP 服务器上解压缩 ZIP 文件 https://superuser.com/q/479661/213663.

  • 您想要将本地 ZIP 解压缩到 FTP 服务器。虽然看起来可以使用 URL 包装器ZipArchive:extractTo打电话,不是。正如我上面所展示的。也没有任何其他方法可以通过 PHP 中的一些简单语句将本地 ZIP 文件提取到 FTP 服务器。

    您所能做的就是在本地(在 Web 服务器上)提取 ZIP 文件;然后逐个文件上传到FTP服务器。

    • 创建一个临时文件夹并解压(ZipArchive::extractTo) 那里的 ZIP 存档。

    • 将临时文件夹上传到 FTP 服务器。

      See PHP - ftp_put + 复制整个文件夹结构 https://stackoverflow.com/q/8773843/850848.

    • 删除临时文件夹。


另请注意,您使用 ASCII 模式上传文件。 ZIP 格式是二进制的。以 ASCII 模式上传二进制文件会损坏它。

ftp_fput($conn_id, $file, $fp, FTP_ASCII);
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

通过 PHP 上传 ZIP 文件并解压缩 ftp 文件夹 的相关文章

  • 使用 file_get_content 发布数据

    我已经做了一些关于如何使用的研究file get content与帖子 我也读过this one https stackoverflow com questions 2445276 how to post data in php using
  • 如何将图像从 Android 应用程序上传到网络服务器的特定文件夹中

    如何将图像从 android 移动到 Web 服务器上的指定文件夹 这是我的安卓代码 package com example bitmaptest import java io ByteArrayOutputStream import ja
  • 通过 Sparkpost 发送 iCal 邀请

    我正在尝试使用 SparkPost 通过电子邮件以附件形式发送日历邀请 但收到电子邮件后邀请不会打开 我使用两个文件 calendarinvite php 来创建邀请 使用 Sendemail php 来发送电子邮件 calendarinv
  • 更改 Woocommerce 中“我的帐户”页面上的标题

    我见过大量有关如何使用 WooCommerce 我的帐户仪表板重新排序 更改导航和页面的示例 但我一生都无法弄清楚如何更改每个部分的主要标题 我的帐户 订单 下载 地址等 我已经搜索过模板 但没有任何乐趣 我尝试使用条件 php 注释来回显
  • 如何隐藏 URL 中的锚标记

    如何隐藏地址栏中以下链接 href 的哈希值 a href index php dev name 所以它会将我重定向到index php dev name 但我希望地址栏只显示index php 您可以使用 Javascript oncli
  • 在 PHP 中比较两个对象的最快方法是什么?

    假设我有一个对象 在本例中为 User 对象 并且我希望能够使用单独的类来跟踪更改 用户对象不必以任何方式改变它的行为才能发生这种情况 因此 我的单独的类创建它的 干净 副本 将其存储在本地某个位置 然后可以将 User 对象与原始版本进行
  • 使用 PHP PayPal REST API 退款?

    我正在开发一个集成到 PayPal 的 REST API 中的 PHP 应用程序 我正确处理了事务并将事务 ID 保存到 MySQL 数据库中 我现在正在尝试退款 但无法让它停止给出 传入 JSON 请求未映射到 API 请求 错误 有人对
  • 如何在HTML中的PHP中注释掉HTML和PHP?

    这是我想注释掉的一行代码 h1 class post title a href title a h1 一种流行的注释方法是分别注释 html 和 php 有一个更好的方法吗
  • 访问sendBeacon发送的数据

    文档表明sendBeacon通过发送其数据HTTP POST request 但在 PHP 中 POST变量似乎是一个空数组 这是我的 JavaScript 代码 navigator sendBeacon beacon log php My
  • WordPress 包含 SVG 文件错误

    我使用 PHP 和 WordPress 在本地主机上 我可以毫无问题地包含 SVG 文件 但在实时服务器上 我尝试包含一个 SVG 文件以便能够使用 CSS 对其进行样式设置 我收到此错误消息 Parse error syntax erro
  • 在 WooCommerce 中添加到购物车之前清空购物车

    我正在使用 WP 作业管理器和 Woo Subscriptions Now 最初 我选择了一个套餐 Woo Subscription 然后我添加了所有细节 但没有提交 回到网站 所以要再次购买 我需要选择一个套餐 于是我选择了套餐并填写了详
  • 如何在 Zend MVC 中实现 SSL

    我之前已经通过使用特定的安全文件夹 例如服务器上的 https 文件夹与 http 文件夹 实现了安全页面 我已经开始使用 Zend Framework 并希望应用程序的某些部分 例如登录 使用 https 我在谷歌上搜索过 甚至在这里搜索
  • Facebook PHP SDK - 如何获取访问令牌?

    我正在尝试从我的应用程序在用户的 Facebook 墙上发帖 用户授予应用程序在他的墙上发布的权限 并且我在数据库中有用户ID 我需要自动发送帖子 而无需用户再次登录 我的代码是 try require once dirname FILE
  • Ebay api GetSellerList,解析响应 XML

    我正在使用 eBay 交易 api 来获取当前列出的卖家股票 我正在使用 GetSellerList 调用 我在解析 xml 时遇到问题 然后将其插入到网站商店中 这是 xml 请求
  • 如何通过ssh检查ubuntu服务器上是否存在php和apache

    如何通过ssh检查Ubuntu服务器上apache是 否安装了php和mysql 另外如果安装的话在哪个目录 如果安装了其他软件包 例如 lighttpd 那么它在哪里 确定程序是否已安装的另一种方法是使用which命令 它将显示您正在搜索
  • 我可以在 PHP 会话变量中安全地存储用户名和密码吗?

    我想在 REST api 之上制作一个轻量级的 web 应用程序 用户只需进行一次身份验证 从那时起 所有针对 web api 的请求都希望通过以某种方式保持用户名和密码有效来完成 我已经做了一个工作原型我在哪里将用户名和密码存储在会话变量
  • 如何从 Laravel 执行存储过程

    我需要在表单提交数据后执行存储过程 我让存储过程按照我想要的方式工作 并且我的表单正常工作 我只是不知道从 laravel 5 执行 sp 的语句 它应该是这样的 执行 my stored procedure 但我似乎在网上找不到类似的东西
  • phpActiveRecord 日期时间格式不正确

    当尝试使用 phpActiveRecord 在表中创建记录时 出现以下错误 Invalid datetime format 1292 Incorrect datetime value 2013 06 20 11 59 08 PDT for
  • 如何使用 php 将 *.xlsb 转换为数组或 *.csv

    我正在尝试转换 xlsb文件到php array or csv文件 或至少 xls 我尝试使用PHPExcel 但看起来它无法识别该文件中的内容 我注意到 你可以重命名 xlsb文件到 zip文件 然后使用命令行解压缩unzip zip 之
  • 使用 crypt() 加密

    我目前正在做一个非常安全的登录系统 但我是 crypt 函数的新手 需要一些快速帮助 我在注册过程中使用 crypt 加密密码字符串并将其保存到数据库中 但是 我如何在登录过程中解密密钥 或者我应该怎么做 或者是否可以对提交的密码字符串进行

随机推荐

  • 使用ARAnchor插入节点和直接插入节点有什么区别?

    在ARKit中 我发现了两种在hitTest之后插入节点的方法 插入 ARAnchor 然后在中创建节点renderer renderer SCNSceneRenderer nodeFor anchor ARAnchor gt SCNNod
  • Zend Framework:该行已标记为只读

    这是我第一次遇到这个问题 保存我的模型之一时 我收到错误消息 此行已标记为只读 不知道为什么我会收到此错误以及如何解决它 堆栈跟踪对我没有帮助 如何解决此问题以便保存记录 将行标记为只读可能是以下任一操作的结果 The Zend Db Se
  • Cocos2d中用手指旋转精灵

    我需要帮助用手指计算精灵的旋转 精灵旋转得很好 但在我手指第一次触摸时 它不知何故自行旋转了几度 此外 只有当手指围绕精灵中心旋转时 旋转才起作用 我正在尝试模拟自行车车轮 并有一个齿轮精灵和一个踏板精灵作为齿轮精灵的子级 我希望当我触摸踏
  • 输入类型=复位和敲除

    单击表单重置按钮时 Knockout 不会更新可观察值 http jsfiddle net nQXeM http jsfiddle net nQXeM HTML
  • 为什么 ARC 在 popViewController 之后不释放内存

    我在 UINavigationController 中推送和弹出 ViewController 我正在跟踪我的应用程序的内存消耗 在推送新的 viewController 时 内存消耗逐渐增加 但是当我使用以下命令弹出相同的 ViewCon
  • C++ 库实现如何分配内存但在程序退出时不释放它?

    代码相当简单 include
  • numpy:按列点积

    给定一个 2Dnumpy数组 我需要计算每一列与其自身的点积 并将结果存储在一个一维数组中 以下作品 In 45 A np array 1 2 3 4 5 6 7 8 In 46 np array np dot A i A i for i
  • 将表单数据序列化为 JSON [重复]

    这个问题在这里已经有答案了 我想对表单进行一些服务器前验证骨干网 js https en wikipedia org wiki Backbone js模型 为此 我需要将用户输入从表单获取为可用数据 我找到了三种方法来做到这一点 var i
  • JQuery:从“a”标签中删除“OnClick”事件

    这是一个奇怪的问题 我们的内网上有一些生产链接 一些 rouge javascript 在我们的 Intranet 主页上的所有链接上返回 false 我们无权访问源代码来重新构建控件并修复此 JavaScript 因此 作为临时创可贴 我
  • 为什么 scipy.stats.nanmean 给出与 numpy.nansum 不同的结果?

    gt gt gt import numpy as np gt gt gt from scipy import stats gt gt gt a np r 1 2 np nan 4 5 gt gt gt stats nanmean a 2 9
  • MySql SELECT 不同列的联合? [复制]

    这个问题在这里已经有答案了 我有一个选择查询 用于选择附加了缩略图文件的文件 并且我还需要获取那些未附加缩略图的文件 我当前的sql查询是 SELECT node title node nid files fid files filepat
  • 将 .txt 保存为 .csv 将取消宏在文件中所做的所有更改。如何预防呢?

    问题仍在继续this https stackoverflow com q 54523166 10348607主题并与之相关我之前的帖子 https stackoverflow com q 54488624 10348607 该代码应处理更改
  • Windows 2012 服务器 IIS 8.0 中的 IIS 调试

    我正在尝试使用 IIS 8 0 调试 Windows Server 2012 中托管的 Web 应用程序 我用代码打开VS2008并附加进程 但那里没有列出W3Wp exe进程 在任务管理器中我可以看到 w3wp exe 在details选
  • 将 JasperReport 导出到 PDF 输出流?

    我正在编写一个非常简单的示例项目来熟悉 Jasper Reports 我想将我配置的报告导出为 PDFOutputStream 但没有它的工厂方法 InputStream template JasperReportsApplication
  • 如何保存/恢复对象在 DOM 树中的位置?

    如果我有以下 html ul li test li li class draggable special li li test li ul 我该如何保存 draggable当前 DOM 位置 一般而言 我打算拖这个 draggable通过将
  • 类方法和实例方法的区别

    我正在读书PEP 8 https pep8 org 时尚指南 http www python org dev peps pep 0008 我注意到它建议使用self作为实例方法中的第一个参数 但是cls作为类方法中的第一个参数 我使用并编写
  • 检查 Cython 数组中是否存在值

    我想知道如何检查数组中是否存在值或对象 就像在 python 中一样 a 1 2 3 4 5 b 4 if b in a print True else print False 我想知道 cython 中是否已经存在类似的东西 我有一个指针
  • AWS Amplify 未经授权错误 - 未授权访问类型 [...]

    我有一个使用 google federate 登录的 AWS Amplify 应用程序 这是我的数据模型 type TriadeMetric model auth rules allow owner id ID NoteMetrics No
  • HTML5 离线谷歌地图访问

    我们正在开发一个 HTML5 应用程序 它有一个 Google 地图来更改搜索位置 现在这个应用程序也有离线版本 有什么办法可以缓存谷歌地图 当应用程序离线时 它会显示离线版本 我们怎样才能让用户再次更改位置呢 目前谷歌地图还没有任何缓存机
  • 通过 PHP 上传 ZIP 文件并解压缩 ftp 文件夹

    我想制作一个表格 您可以在其中填写 FTP 登录服务器并获得上传 ZIP 文件的选项 该脚本与最后一部分 解压缩文件 分开工作 我想执行解压缩上传的文件 有谁知道有什么问题吗 TIA