PHP ftp_put 返回“无法建立数据连接:连接被拒绝”

2024-02-27

我有一台通过 PHP 运行一些 FTP 的 PC,我知道它在 1-2 个月前还可以工作,但现在我返回它,发现该 PC 不再工作了。我知道我一直在使用电脑,但我想不出可能会发生什么变化。

PHP 抛出错误消息读取

无法建立数据连接:连接被拒绝

...当我使用ftp_put()功能。

我正在使用的缩减代码是:

<?php

$trackErrors = ini_get('track_errors');
ini_set('track_errors', 1);

$server="***.***.***.***";
$port=21; 
echo "<LI>Connecting to $server:$port<BR>";
$conn_id = ftp_connect($server,$port,9999999) or die("<BR>Unable to connect to ".$server.":$port server.");
if ( !$conn_id ) {
    $errmsg = $php_errormsg;
    echo "<BR><LI>ERR:$errmsg";
}
else {
    $passive=false;
    echo "<LI>Setting Passive Mode=$passive";
    ftp_pasv($conn_id, $passive);

    $user="*********";
    $pass="*********";
    echo "<LI>Connecting as $user/*****";
    if (!ftp_login($conn_id, $user, $pass)) { 
        $msg = "Failed to login to $selected_server as $user; <BR>check logincredentials in the Settings";
        echo "<BR><LI>$msg";

        $errmsg = $php_errormsg;
        echo "<LI>ERR:$errmsg";
        return $msg;
    }

    ftp_set_option($conn_id, FTP_TIMEOUT_SEC, 10000);
    

    if (!@ftp_put($conn_id, "test.txt", "C:......test.txt", FTP_BINARY)) {
        echo "<BR><LI>ftp_put failed";

        $errmsg = $php_errormsg;
        echo "<LI>ERR:$errmsg";
    }
    echo "<HR>Done";
}
?>

作为网页运行时的输出是

Connecting to ***.***.***.***:21
Setting Passive Mode=
Connecting as *******/*****
ftp_put failed
ERR:ftp_put(): Unable to build data connection: Connection refused
Done

结果是ftp_put()给出错误消息并在服务器上留下具有正确文件名的零 (0) 字节文件。

奇怪的是

  1. 相同的代码/连接信息可以在另一台笔记本电脑上使用
  2. 推送文件时使用 FileZilla 可以正常使用相同的连接信息
  3. 该问题发生在多台服务器上(即,不仅仅是某一特定目的地出现问题)

另外,这似乎与被动模式没有任何关系(启用或不启用此模式都会失败)

请注意,我们看到端口 20 和 21 在ftp_close()用一个netstat -n在命令行上。 PHP 文档表明端口 20 是数据通道,但我们正在讨论存在问题的 INBOUND 问题(服务器到 PC)。添加防火墙规则以在 INBOUND 上打开端口 20 和 21 后,我可以看到 PHP 可以正常工作。但尚不清楚

  1. 为什么 PHP 需要端口 20(而 FileZilla 不需要),
  2. 为什么另一台电脑没有同样的问题(都是公司电脑,相同的型号/年龄/构造),以及
  3. 我应该使用什么防火墙修复程序(如果有)。

有没有人有什么建议?
Thanks
Abe


您正在使用主动 FTP 模式。在主动模式下,服务器尝试连接到客户端。在大多数网络配置中,这是不可能的,因为客户端计算机通常位于防火墙后面。

这就是服务器失败的原因:

无法建立数据连接:连接被拒绝

这是专门针对这种情况的 ProFTPD 错误消息。

请参阅我的文章主动和被动FTP连接模式 https://winscp.net/eng/docs/ftp_modes了解详情。


如果其他计算机禁用了防火墙或者具有允许非特权端口上的传入流量的规则,则该代码可以在其他计算机上运行。

FileZilla 之所以能够工作,是因为它默认采用被动模式(就像大多数现代 FTP 客户端那样)。


您声称也尝试过被动模式,但仍收到相同的错误消息。

那是因为你正在使用ftp_pasv调用错误。

你必须移动ftp_pasv call after the ftp_login.

$user = "*********";
$pass = "*********";
echo "<LI>Connecting as $user/*****";
if (!ftp_login($conn_id, $user, $pass)) { 
    // ...
}

$passive = true;
echo "<LI>Setting Passive Mode=$passive";
ftp_pasv($conn_id, $passive);

文档 https://www.php.net/manual/en/function.ftp-pasv.php明确表明:

请注意,ftp_pasv()只能在登录成功后调用,否则会失败。


对于类似的问题(仅使用 Pure-FTPd),请参阅通过 FTP 上传 PHP - ftp_put() 我不会打开到 x.x.x.x 的连接(仅到 y.y.y.y) https://stackoverflow.com/q/31819695/850848.

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

PHP ftp_put 返回“无法建立数据连接:连接被拒绝” 的相关文章

  • foreach 循环中 current() 的意外行为[重复]

    这个问题在这里已经有答案了 这是一个简单的循环 list array A B C D foreach list as var print current list Output demo http 3v4l org sBDjl BBBB O
  • jquery ajax加载后丢失CSS

    大家知道如何解决 load Ajax 请求后的 css 问题吗 例如 如果我想从网页加载 DIV 在我的 Ajax 请求之后 container load path to div div id 我丢失了与该 div 关联的所有 css 和脚
  • 如何使用 php 从字符串中提取日期

    我需要从字符串中提取日期 下面是我的代码和字符串 str Updated status to Masters Software Engineering Enrolled Documents to Send on 03 06 2014 14
  • 如何从 PHP 中的字符串创建可能的字符串组合?

    如何从 PHP 中的字符串创建可能的字符串组合 Exp input abc output array 0 gt a 1 gt ab 2 gt abc 3 gt ac 4 gt acb 5 gt b 6 gt ba 7 gt bac 8 gt
  • 间歇性 PHP 抽象类错误

    我已经为此奋斗了一段时间 但无法弄清楚 也许其他人也有 或者 Slim PHP Apache 等这里有更深层次的问题 在正常工作几个小时后 我的 Slim 安装将开始给出所有路线均如此 致命错误 类 Slim Collection 包含 1
  • php动态创建子域的问题

    你好 我通过以下代码在 php 中创建子域 function subd host port ownername passw request sock fsockopen localhost 2082 if sock print Socket
  • 使用 php ping 网站

    我想创建一个 php 脚本 它将 ping 一个域并列出响应时间以及请求的总大小 这将用于监控网站网络 我尝试过curl 这是我到目前为止的代码 function curlTest2 url clearstatcache return if
  • 没有得到 popen 的完整回复

    嗨 我正在使用 popen 运行一个进程 handle popen python scriptos py r while feof handle data fgets handle echo gt data 我只从返回 5 行的进程中获取
  • 将 PayPal 返回 URL 设置为 localhost

    我正在尝试集成 Paypal 并且在此过程中使用沙箱 我按照以下问题中接受的答案的步骤进行操作 设置 PayPal 返回 URL 并使其自动返回 https stackoverflow com questions 7642895 setti
  • laravel 5.3 新的 Auth::routes()

    最近开始使用laravel 5 3写博客 但是运行后出现一个问题php artisan make auth 当我运行这个时 它会在我的web php 这是其中的代码 Auth routes Route get home HomeContro
  • 为什么 PHPUnit 将一些右大括号显示为未被覆盖?

    我正在使用 PHPUnit 3 6 7 PHP CodeCoverage 1 1 1 和 Xdebug 2 1 2 当我让 PHPUnit 将代码覆盖率统计信息写入 clover 样式的 XML 文件时 它偶尔会显示一个右花括号 表示测试未
  • 如何在之前的 Facebook 身份验证后自动安全地让用户登录?

    用户抱怨他们必须过于频繁地登录 如果身份验证完全基于 Facebook OAuth 那么用户如何在下次访问该页面时自动登录 用户流程示例 用户点击 使用 Facebook 登录 用户通过 Facebook 进行身份验证并被重定向回网站 用户
  • PHP MVC 应用程序中哪里可以捕获异常?

    我有一个中小型 PHP 应用程序 用于练习 OOP 和 MVC 技能 我有初始化 引导程序调用的文件Router谁打电话控制器 gt 服务层 gt 存储库 数据库 然后将变量发送回视图层 所有依赖项均由 DiC IOC 处理 我创建抽象类
  • 退出 PHP 脚本后终止或停止 MySQL 查询

    我在工作中运行一个统计服务器 由于运行的查询量很大 该服务器有时会变得非常慢 我们的营销团队使用它作为主要统计工具 团队中的某些人有时会在脚本结束之前退出脚本 通过关闭浏览器或选项卡 同时 SQL 查询继续执行 当有人关闭或离开 PHP 脚
  • 警告:mysqli_query() 期望参数 1 为 mysqli,在 中给出 null

    我正在尝试构建一个简单的自定义 CMS 但出现错误 警告 mysqli query 期望参数 1 为 MySQLi 在中给出的为 null 为什么我会收到此错误 我的所有代码都已经是 MySQLi 并且我使用两个参数 而不是一个 con m
  • 是否可以使用流上下文在 PHP 下使用 FTPS?

    我了解到使用ftpsPHP for Windows 下的 ftp ssl connect 很困难 您被要求进入构建自己的二进制文件以包括 Open SSL 的漫长旅程 我找到了以下建议phpseclib http phpseclib sou
  • 计算特定产品类别的购物车商品数量

    我试图仅从 WooCommerce 中的特定产品类别获取购物车中的商品数量 我正在为一家酒厂做一个网站 它有酒精和非酒精产品 所有葡萄酒都属于 葡萄酒 主类别或类别 ID 34 其下有许多子类别和产品 对于属于此类别的任何商品 我需要知道此
  • 为什么 LinkedIn v2 Share API 在任何 v2/shares 端点上给出权限不足的错误?

    当我调用任何 v2 LinkedIn 共享 API 端点时 例如https api linkedin com v2 socialActions https api linkedin com v2 socialActions share UR
  • preg_match 所有以@开头的单词?

    我对正则表达式不太确定 所以我不得不问你 如何用 PHP 判断字符串中是否包含以 开头的单词 例如我有一个像 This is for codeworxx 这样的字符串 我很抱歉 但我没有任何起点 希望你能帮忙 谢谢 萨沙 好的 谢谢你的结果
  • 合并 csv 文件 [关闭]

    Closed 这个问题不符合堆栈溢出指南 help closed questions 目前不接受答案 如何在 PHP 或 joomla 中将多个 CSV 文件合并为一个 csv 文件 将文件夹中 csv 文件中的所有数据合并到文本文件中 通

随机推荐

  • 使用入口点console_script进行Python包分发

    我准备部署一个具有以下布局的 Python 包 MyPackage setup py MyPackage init py main py lib init py utils py db init py db1 py db2 py tasks
  • 使用另一个表中的随机值更新 MySQL 表的最佳方法

    对于这个 伪代码 示例 我在 MySQL 中有两个表 member id name names name 会员人数100人 姓名10人 我想使用名称中的随机名称来更新成员表 到目前为止我已经得到了这个 但是不确定是否有更好的方法来实现它 U
  • 在 Swift 中的 WebService 中传递参数

    我正在学习 Swift 但不知道如何使用 Swift 向服务器发送参数 在 Objective C 中我们可以通过使用来做到这一点 作为占位符 但是对于 Swift 应该怎么做 假设我有一个需要电子邮件和密码的登录 Web 服务 现在我想知
  • 如何在android中根据材料设计制作Cardview?

    我看到了有关材料设计指南 但它有点混乱 当我设计我的卡片时 左侧有图像 图像右侧有一些文字 但我不满意它是否符合指南 请检查并告诉 我还希望我的虚拟文本段落合理 这是我的代码
  • 是否可以在 Google 地图或 Google 地球中显示 3D 数据?

    我正在尝试找到一种有效的方法来可视化一些现实世界传感器测量不同高度风速的反馈 有谁知道在谷歌地图中显示3D数据是否可行 我想象着指示方向和风速的 3D 箭头 如果可以加载模型并将其定位到特定的 GPS 位置 高度 然后更改其方向以指向特定的
  • 如何在 Python 中将字符串转换为转义序列? [复制]

    这个问题在这里已经有答案了 如果我有一个包含四个字符的字符串 例如 xf0 我如何将其转换为转义序列 xf0 我正在使用Python 3 4 编辑 我试图将字符串转换为字符串值代表的字符 您要做的就是解释原始字符串中的转义序列 以获取相应的
  • 清晰高效的 3D 范围树实现

    我正在做这个项目 我必须在 3d 空间中搜索对象 我认为效率是一个巨大的问题范围树非常适合我想要做的事情 间隔树也可以工作 但我不会从树中删除任何内容 一旦我在 3D 空间中添加每个对象 我只会使用该结构进行搜索 以下是我将如何使用该结构
  • 在不同的 Excel 文件中使用一个宏

    我写了一个宏 我想在不同的Excel文件中使用它 这些文件具有几乎相同的表结构但不同的数据 那么是否有可能将我的宏脚本 包含 到任何 Excel 文件中 我已经读过this tip https web archive org web 201
  • PHP 和 PDO:一个连接与多个连接

    在我的 PHP 程序中 我需要针对任何给定的网页请求访问数据库 0 到 3 次 我正在使用 PDO 与 MySQL 交互 首先 我使用如下内容创建一个数据库连接 dbh new PDO mysql host hostname dbname
  • 辅助功能、字段集图例和标题标签

    我正在开发的网站的一个要求是它必须符合 508 标准 目前我们大多数的 html 视图都以 header 开头h1然后该视图中需要的任何内容 现在对于表单 建议使用fieldsets and legend除其他众多准则外 在处理可访问性时也
  • 谷歌分析是否将裸域与 www 子域结合起来?

    我为自己的域安装了谷歌分析 http mydomain com 输入的用户是否会http www mydomain com也被分析脚本计算在内吗 对我来说 这似乎是合乎逻辑的 因为裸域地址与 www 前缀的站点位于同一站点是很常见的 但分析
  • 重置被拒绝的 HTML 通知

    我有一个网络应用程序 在其中使用 HTML 通知 如果用户第一次允许它并开始使用它 它工作正常 但是如果用户第一次通过单击阻止按钮阻止通知 然后尝试通过某些用户手势再次请求权限 则浏览器不会触发 允许 阻止 弹出窗口 这是我第二次触发许可
  • 按键时的 JTable 编辑

    我正在尝试以编程方式开始编辑当前行的第三列JTable在按键上 我已经实现了一个 KeyListener 其中keyReleased 包含这段代码 if e getKeyCode KeyEvent VK ENTER myTab change
  • 在 Powershell 中优雅地停止

    How do I catch and handle Ctrl C in a PowerShell script I understand that I can do this from a cmdlet in v2 by including
  • JVM 何时抛出 OutOfMemoryError

    我们正在运行一个有时会 冻结 的 Java 应用程序 因为某些线程正在使用几乎所有堆 尽管 JVM 执行的 Full GC 持续了 60 秒以上 但应用程序从未因 OutOfMemoryError 错误而终止 我从 Java 文档中读到 如
  • amqp 与 amqplib - 哪个 Node.js amqp 客户端库更好?

    这些 amqp 客户端库之间有什么区别 哪一款最值得推荐 主要区别是什么 我会推荐amqp node https github com squaremo amqp node and bramqp https github com bakke
  • Json.Net 没有以相同的方式序列化小数两次

    我正在测试我正在处理的购物车的 Json NET 序列化 并注意到当我序列化 gt 反序列化 gt 再次序列化时 我发现某些文件的尾随零格式有所不同decimal字段 这是序列化代码 private static void TestRoun
  • 检测 Excel 设置的语言并将其显示在文件的单元格中

    我正在设计一组它们之间相关的相关Excel文件 目标是引用彼此文档的宏可以在任何给定的计算机 路径中工作 因此 我使用了一组相对路径 使宏能够正常工作 我使用了以下功能 CELDA nombrearchivo A 1 nombredearc
  • UIPasteboard 字符串从 Today 扩展返回 null

    似乎在 iOS 9 Xcode 7 beta 5 中 我无法访问 UIPasteboard generalPasteboard string 来自我的 今日 小部件扩展 因为每次无论内容如何 它都会返回 NULL 我浏览了发行说明 但没有看
  • PHP ftp_put 返回“无法建立数据连接:连接被拒绝”

    我有一台通过 PHP 运行一些 FTP 的 PC 我知道它在 1 2 个月前还可以工作 但现在我返回它 发现该 PC 不再工作了 我知道我一直在使用电脑 但我想不出可能会发生什么变化 PHP 抛出错误消息读取 无法建立数据连接 连接被拒绝